Discord.py 如何实现用户修改昵称时立即自动重置该昵称?
Discord机器人昵称自动重置实现方案(基于discord.py v2.x)
你推测的client.event装饰器确实是正确的实现路径,核心是监听成员信息更新事件,完整实现方案如下:
前置准备
- 前往Discord开发者平台的对应机器人管理页,在「Bot」选项卡下开启Server Members Intent(成员意图),否则无法捕获成员信息更新事件
- 给机器人在目标服务器授予管理昵称权限,且机器人的角色层级要高于所有你需要管控昵称的用户的角色层级(无法重置权限高于自己的用户、服务器所有者的昵称)
核心实现代码
import discord from discord.ext import commands # 声明需要的意图 intents = discord.Intents.default() intents.members = True # 启用成员意图,必须和后台设置对应 client = commands.Bot(command_prefix='!', intents=intents) @client.event async def on_ready(): print(f'机器人已登录为 {client.user}') @client.event async def on_member_update(before: discord.Member, after: discord.Member): # 仅在昵称发生修改时触发逻辑 if before.nick != after.nick: try: # 重置为修改前的昵称,若要固定为某个昵称直接替换引号内内容即可,清空昵称设为None await after.edit(nick=before.nick, reason="自动重置用户修改的昵称") except discord.Forbidden: # 没有权限修改该用户昵称时的异常处理 print(f"无权限重置用户 {after.name} 的昵称") client.run('你的机器人Token')
自定义调整说明
- 如果要固定所有用户的昵称为统一格式,把
nick=before.nick替换为你需要的固定值即可,比如nick="匿名用户" - 如果需要排除特定角色/特定用户的昵称重置限制,可在判断
before.nick != after.nick后加额外的权限判断逻辑
内容的提问来源于stack exchange,提问作者Itsjul1an
相关产品推荐
相关产品推荐

