问题描述
我有一个只保存用户 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 的用户对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!