discord.py获取用户信息报错:user_id非snowflake格式求助
问题分析与解决方案
错误原因
fetch_user()参数错误:client.fetch_user()需要传入的是用户ID(整数类型的Snowflake),但你传了message.author——这本身已经是一个User/Member对象,并非ID,所以触发了「Value is not snowflake」的报错。- 发送对象类型错误:
message.channel.send()无法直接发送User对象,必须提取对象中的字符串属性(比如用户名)再发送。
修正代码
其实你完全不需要调用 fetch_user(),因为 message.author 已经包含了发送者的所有用户信息,直接提取属性即可:
@client.event async def on_message(message): # 获取纯用户名 username = message.author.name # 获取带服务器昵称的用户名(如果用户设置了昵称) display_name = message.author.display_name # 获取带标签的完整用户名(如:User#1234) full_username = str(message.author) # 发送用户名到频道 await message.channel.send(f"发送消息的用户:{username}") # 或者@该用户 await message.channel.send(f"@{message.author}")
如果确实需要使用 fetch_user()(比如获取不在当前服务器的用户信息),则需要传入用户ID:
@client.event async def on_message(message): user_id = message.author.id user = await client.fetch_user(user_id) await message.channel.send(f"用户名:{user.name}")
内容的提问来源于stack exchange,提问作者cfrrf
相关产品推荐
相关产品推荐

