如何通过Discord消息ID获取发送用户的用户名?
如何通过Discord消息ID获取发送用户的用户名?
别担心,刚入门Discord Bot遇到这种问题太正常了!我来帮你一步步理清问题出在哪,以及怎么解决~
首先,你遇到的AttributeError: 'int' object has no attribute 'author'错误原因很明确:message.reference.message_id返回的只是一个整数类型的消息ID,它只是一串数字,代表这条消息的唯一标识,并不是完整的消息对象。而author是消息对象才有的属性,所以直接用这个数字去访问author肯定会报错。
想要拿到消息作者,你需要先通过这个消息ID获取到完整的消息对象,然后再从对象里提取作者信息。下面是具体的解决方法(以discord.py库为例):
解决步骤与代码示例
- 先拿到被回复消息的ID(你这一步是对的)
- 获取该消息所在的频道(回复消息和被回复消息肯定在同一个频道里)
- 调用异步方法
fetch_message()获取完整的消息对象 - 从消息对象中提取作者信息
完整代码如下:
async def your_command_function(message): # 拿到被回复消息的ID referenced_msg_id = message.reference.message_id # 获取消息所在的频道 channel = message.channel try: # 通过ID获取完整的消息对象(注意这里要用await,因为是异步操作) referenced_msg = await channel.fetch_message(referenced_msg_id) # 现在可以获取作者信息了 author = referenced_msg.author # 打印用户名和用户ID,按需使用 print(f"发送这条消息的用户名是:{author.name},用户ID是:{author.id}") except discord.NotFound: print("出错了:找不到对应的消息,可能这条消息已经被删除啦") except discord.Forbidden: print("出错了:Bot没有权限获取这条消息,请检查Bot的频道权限")
关键注意点
- 一定要用
await:fetch_message()是异步方法,所以你的函数必须定义为async类型,并且调用时加上await关键字。 - 异常处理:加上
try-except可以避免因为消息被删除、Bot权限不足等情况导致程序崩溃。
这样就能顺利通过消息ID拿到发送用户的信息啦!
备注:内容来源于stack exchange,提问作者Maxolinochen YT
相关产品推荐
相关产品推荐

