首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Discord.py:获取id为的用户对象

Discord.py:获取id为的用户对象
EN

Stack Overflow用户
提问于 2020-09-07 04:33:46
回答 2查看 9.2K关注 0票数 1

我有一个机器人,它只保存用户的id (这样工作更好)。现在,我想从该id中获取user-object。

我试着追随,但这对我不起作用,也许我做错了什么。

代码语言:javascript
运行
复制
client = discord.Client
client.get_user(id)

client.get_user_info(id)

代码如下:

代码语言:javascript
运行
复制
import discord
class MyClient(discord.Client):
    ntd = name_table.get_all_records() #google sheets api: returns a list of dicts
        async def on_message(self, message):
             print(message.content[1])
             if message.author == client.user:
                return
             if isinstance(message.channel, discord.channel.DMChannel):
                await self.handle_DM(message)
             if message.content[0] == "/":
                if message.content.split(" ")[0].lower() == "/rank":
                   await self.rank_command(message)
       
       async def rank_command(self, message):
        if len(message.content.split(" ")) < 2:
            await message.channel.send(
                message.author.mention + "/rank takes 2 or 3 arguments. Do '/rank ?' for help.")
        try:
            if message.content.split(" ")[1] == "?":
                await self.help("rank", message)
                return
        except:
            pass
        try:
            if message.content.split(" ")[1] == "top":
                await self.top_rank_command(message)
                return
        except:
            pass
     async def top_rank_command(message):
          print("Top rank entered")
          _user = await client.fetch_user(372746847393021953) #my id: Cluebo#2312
        print(_user)
        print("Top rank end")

执行此命令后,它将只打印"Top rank entered",而不打印user"Top rank end"。但是,我没有收到错误消息。该方法就到此为止(机器人在Heroku上运行)。提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-07 04:59:08

从id中获取用户有两种方法:

下面是一些示例(同时使用ClientBot):

代码语言:javascript
运行
复制
#Get a discord.User object
@client.event
async def on_message(message):
    content = message.content[6:]
    if message.content.startswith('!find'):
        user = await client.fetch_user(int(content))
        print(user)
    else:
        pass

@bot.command()
async def find(ctx, id: int):
    user = await bot.fetch_user(id)
    print(user)
代码语言:javascript
运行
复制
#Get a discord.Member object
@client.event
async def on_message(message):
    content = message.content[6:]
    if message.content.startswith('!find'):
        member = await message.guild.fetch_member(int(content))
        print(member)
    else:
        pass

@bot.command()
async def find(ctx, id: int):
    member = await ctx.guild.fetch_member(id)
    print(member)

对于这些示例,您只需在不一致的情况下编写!find [id],它将打印在您的终端中获取的对象

票数 1
EN

Stack Overflow用户

发布于 2020-09-07 17:56:48

client.fetch_user(id(int))是一个协程。这意味着我需要添加一个await,因此它需要为_user = await client.fetch_user(id)。确保id是正确的,因为脚本可能会在没有错误的情况下停止。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63768648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档