Discord.py:获取带有 id 的用户对象

Discord.py: Get user object with id(Discord.py:获取带有 id 的用户对象)
本文介绍了Discord.py:获取带有 id 的用户对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

限时送ChatGPT账号..

我有一个只保存用户 ID 的机器人(这样工作会更好).现在我想从那个 id 中获取用户对象.

I have a bot which only saves the id of a user (it's better working like that). Now I want to get the user-object from that id.

我尝试了以下对我不起作用的方法,也许我做错了什么..

I tried following which doesn't work for me, maybe I have made something wrong..

client = discord.Client
client.get_user(id)

client.get_user_info(id)

代码如下:

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 enter",而不是userTop rank end"但是,我没有收到错误消息.该方法就停在那里(机器人在 Heroku 上运行).提前致谢!

Executing this, it will only print "Top rank entered" but not the user or "Top rank end" However, I did not get an error message. The method just stops there (The bot is running on Heroku). Thanks in advance!

推荐答案

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

There are two methods to get a user from an id:

  • Client.fetch_user(id)(或 Bot.fetch_user(id)) → 返回一个 discord.User 对象
  • Guild.fetch_member(id) → 返回一个 discord.Member 对象

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

Here are some examples (using both Client and Bot):

#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)

#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)

使用这些示例,您只需在 discord 中编写 !find [id] ,它就会打印它在终端中获取的对象

With those examples, you'd just have to write !find [id] in discord and it would print the object it fetched in your terminal

这篇关于Discord.py:获取带有 id 的用户对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

How do I make a list of all members in a discord server using discord.py?(如何使用 discord.py 列出不和谐服务器中的所有成员?)
how to change discord.py bot activity(如何更改 discord.py 机器人活动)
Issues with getting VoiceChannel.members and Guild.members to return a full list(让 VoiceChannel.members 和 Guild.members 返回完整列表的问题)
Add button components to a message (discord.py)(将按钮组件添加到消息(discord.py))
on_message() and @bot.command issue(on_message() 和@bot.command 问题)
How to edit a message in discord.py(如何在 discord.py 中编辑消息)