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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:20:08