You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:46:44