Discord.py: Get user object with id(Discord.py:获取带有 id 的用户对象)
问题描述
我有一个只保存用户 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",而不是user或Top 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对象
以下是一些示例(同时使用 Client 和 Bot):
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 的用户对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Discord.py:获取带有 id 的用户对象
基础教程推荐
- 比较两个文本文件以找出差异并将它们输出到新的文本文件 2022-01-01
- 究竟什么是“容器"?在蟒蛇?(以及所有的 python 容器类型是什么?) 2022-01-01
- Kivy 使用 opencv.调整图像大小 2022-01-01
- 在 Django Admin 中使用内联 OneToOneField 2022-01-01
- 对多索引数据帧的列进行排序 2022-01-01
- kivy 应用程序中的一个简单网页作为小部件 2022-01-01
- Python,确定字符串是否应转换为 Int 或 Float 2022-01-01
- Python 中是否有任何支持将长字符串转储为块文字或折叠块的 yaml 库? 2022-01-01
- matplotlib 设置 yaxis 标签大小 2022-01-01
- 在 Python 中将货币解析为数字 2022-01-01
