Nextcord自动昵称系统问题:如何基于显示名设置昵称
问题:Discord机器人昵称更新错误,需基于用户显示名生成带角色前缀的昵称
当前使用Nextcord开发的Discord机器人,在用户获得指定角色时自动修改昵称的功能存在问题。Discord已区分用户名(如jaymes)和显示名(如James),但现有代码生成的昵称是Dev | jaymes (username),不符合预期的Dev | James (Display Name)格式。
原代码如下:
async def update_nickname(member): leitung_role = nextcord.utils.get(member.guild.roles, name='Leitung') dev_role = nextcord.utils.get(member.guild.roles, name='Developer') if leitung_role in member.roles: new_nickname = f'Leitung | {member.user}' elif dev_role in member.roles: new_nickname = f'Dev | {member.user}' else: new_nickname = member.name if new_nickname != member.nick: try: await member.edit(nick=new_nickname) except nextcord.Forbidden: print(f"Could not change nickname for {member.name}")
修复方案
核心问题是代码错误使用了member.user和member.name(两者均指向用户名),而需要调用member.display_name来获取用户的显示名(优先取服务器内自定义昵称,无自定义则取全局显示名)。
修改后的代码:
async def update_nickname(member): leitung_role = nextcord.utils.get(member.guild.roles, name='Leitung') dev_role = nextcord.utils.get(member.guild.roles, name='Developer') if leitung_role in member.roles: new_nickname = f'Leitung | {member.display_name}' elif dev_role in member.roles: new_nickname = f'Dev | {member.display_name}' else: new_nickname = member.display_name if new_nickname != member.nick: try: await member.edit(nick=new_nickname) except nextcord.Forbidden: print(f"Could not change nickname for {member.display_name}")
关键改动说明
- 替换
member.user和member.name为member.display_name:该属性会返回用户在当前服务器的显示名称,完全匹配需求; - 异常打印语句同步改用
member.display_name,保证日志信息的准确性; - else分支也改为
member.display_name,确保用户无指定角色时同样使用显示名作为昵称。
内容的提问来源于stack exchange,提问作者Taycen
相关产品推荐
相关产品推荐

