在discord.py中如何将用户ID转换为Discord用户名?
解决Discord.py机器人显示用户@格式用户名的问题
嘿,这个问题我之前开发Discord机器人时也碰到过,其实很容易搞定!你现在用message.author.id拿到的是纯数字ID,但想要的@用户名格式,直接通过message.author这个对象自带的属性就能轻松获取,不用自己手动拼接。
最推荐的方法:使用mention属性
message.author本质是一个Member(服务器内场景)或User对象,它自带的mention属性会直接生成Discord可识别的@格式文本——比如@tristan360,而且在聊天框里是可点击的,用户一点就能跳转到对方的资料页,完全符合你想要的交互效果。
举个代码修改的实际例子:
原来的代码可能是这样的:
# 假设recipient是接收积分的目标用户对象 await message.channel.send(f"{message.author.id} 已向@AceFTW赠送22个布朗尼积分,他们当前拥有22个布朗尼积分!")
把它改成:
await message.channel.send(f"{message.author.mention} 已向{recipient.mention}赠送22个布朗尼积分,他们当前拥有22个布朗尼积分!")
修改后输出就会变成你期望的样子:@tristan360已向@AceFTW赠送22个布朗尼积分,他们当前拥有22个布朗尼积分!
如果你需要纯文本的「用户名#0000」格式
要是你只是想显示tristan360#1234这种纯文本格式(不带可点击的@跳转),可以用name和discriminator属性拼接:
full_username = f"{message.author.name}#{message.author.discriminator}" await message.channel.send(f"@{full_username} 已向@AceFTW赠送22个布朗尼积分,他们当前拥有22个布朗尼积分!")
不过这种方式不如mention实用,毕竟Discord用户更习惯点击@提及直接查看对方资料。
额外提示:显示服务器自定义昵称
如果用户在服务器里设置了专属昵称,你可以用display_name属性获取(如果没有设置昵称,会默认显示用户名):
server_nickname = message.author.display_name await message.channel.send(f"@{server_nickname} 已向@AceFTW赠送22个布朗尼积分,他们当前拥有22个布朗尼积分!")
但其实mention属性会自动优先显示用户的服务器昵称,所以还是直接用mention最省心。
内容的提问来源于stack exchange,提问作者tristan360
相关产品推荐
相关产品推荐

