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

能否检测Discord用户修改用户名(非昵称)并推送消息到指定频道?

问题原因

你当前使用的display_name属性是服务器专属的用户昵称,只有用户在当前服务器修改了自己的专属昵称时才会触发变更,自然检测不到全局用户名的改动。
Discord 目前有三类用户名称属性,差异如下:

  • display_name:用户在当前服务器的专属昵称,优先级最高,未自定义时等同于全局显示名
  • global_name:用户的全局显示名,所有服务器默认展示的名称,可随时修改
  • name:用户的唯一账号用户名(@后面的ID,新用户无#后缀),修改频率较低

修复方案

如果你需要监听全局用户名/显示名的变更,优先使用 on_user_update 事件,该事件会在用户修改全局资料时触发,不受单服务器限制。
另外你现有代码中还存在新旧名称写反的问题,修改后的代码示例如下:

# 监听全局用户资料变更(discord.py v2.0+ 支持)
@client.event
async def on_user_update(before, after):
    # 检测全局显示名变更
    if before.global_name != after.global_name:
        embed = discord.Embed(colour=discord.Colour.from_rgb(162, 28, 29), title=f"用户全局显示名变更")
        embed.add_field(name='修改前', value=before.global_name if before.global_name else before.name)
        embed.add_field(name='修改后', value=after.global_name if after.global_name else after.name)
        channel = client.get_channel(你的频道ID)
        await channel.send(embed=embed)
    # 检测唯一用户名变更
    if before.name != after.name:
        embed = discord.Embed(colour=discord.Colour.from_rgb(162, 28, 29), title=f"用户唯一用户名变更")
        embed.add_field(name='修改前', value=f"{before.name}#{before.discriminator}" if before.discriminator != "0" else before.name)
        embed.add_field(name='修改后', value=f"{after.name}#{after.discriminator}" if after.discriminator != "0" else after.name)
        channel = client.get_channel(你的频道ID)
        await channel.send(embed=embed)

# 如果你同时需要保留服务器昵称变更的检测,可以保留原事件做修正
@client.event
async def on_member_update(before, after):
    if before.display_name != after.display_name:
        embed = discord.Embed(colour=discord.Colour.from_rgb(162, 28, 29), title=f"用户服务器昵称变更")
        embed.add_field(name='修改前', value=before.display_name)
        embed.add_field(name='修改后', value=after.display_name)
        channel = client.get_channel(你的频道ID)
        await channel.send(embed=embed)

注意事项

如果你的discord.py版本低于2.0,需要先升级库版本才能使用on_user_update事件,低版本可以在on_member_update事件中额外判断before.name/before.global_name和对应after属性的差异来实现全局变更检测。

内容的提问来源于stack exchange,提问作者Connor Hancock

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:30:05