Discord.py中无法不@用户显示名称,调用display_name报错
问题解决:Discord.py中无法正确显示用户名称的问题
问题原因
- 属性调用方式错误:
discord.User.display_name是类属性,直接调用会返回属性对象而非实际名称,必须通过具体的用户实例(如user.display_name)访问。 - 参数类型未指定:命令中的
user参数默认是字符串类型,未被解析为discord.User对象,导致无法正常访问其mention、display_name等属性。
修复后的完整代码
import discord import json import random from discord.ext import commands @bot.command(name="kiss") async def kiss(ctx, user: discord.User): # 添加类型注解,自动解析用户对象 if ctx.message.channel.is_nsfw(): with open('kiss.json') as kg: kissgifs = json.load(kg) ksrandomchoice = random.choice(kissgifs) embed = discord.Embed() embed.set_image(url=ksrandomchoice['kiss']) # 使用user.display_name获取用户昵称,或user.name获取账号用户名 embed.add_field(name=f"{ctx.author.display_name} kissed {user.display_name}", value="") await ctx.send(embed=embed) else: await ctx.send("此命令仅允许在NSFW频道使用")
关键修改说明
- 添加类型注解:在
user参数后追加: discord.User,让discord.py自动将传入的用户提及、ID或用户名转换为discord.User实例。 - 正确访问属性:用
user.display_name(优先显示服务器昵称,无昵称则显示账号名)或user.name(固定显示账号用户名)替代错误的discord.User.display_name写法。 - 优化提示文本:将模糊的"I'm not"替换为明确的中文提示,提升用户体验。
内容的提问来源于stack exchange,提问作者gallmonds
相关产品推荐
相关产品推荐

