如何制作可将含大写字母的用户名转为小写昵称的Discord bot
现有代码问题说明
- 未正确获取成员用户名变量:你代码里的
username没有定义,需要从成员对象after中获取用户名字段after.name - 大写判断逻辑错误:
u.upper()仅会将字符串转换为全大写格式,无法判断原字符串是否包含大写字符,正确逻辑为遍历字符串判断是否存在大写字符 - 语法错误:
if u.upper()后缺少冒号、代码缩进不符合Python规范、字符串小写方法lower后缺少调用括号 - 缺少必要的意图配置:新版discord.py默认关闭成员相关事件的接收权限,需要手动开启成员意图
- 未加异常捕获:如果bot没有权限修改对应成员的昵称(比如对方是服务器所有者、权限高于bot),直接调用编辑接口会报错,需要加异常捕获处理
修正后的完整代码
import discord # 开启成员意图,必须配置否则无法接收成员事件 intents = discord.Intents.default() intents.members = True client = discord.Client(intents=intents) @client.event async def on_ready(): print('Bot is Online!') # 监听已有成员的资料更新事件 @client.event async def on_member_update(before, after): username = after.name # 判断用户名是否包含大写字母 has_upper = any(char.isupper() for char in username) if has_upper: try: # 设置昵称为全小写格式 await after.edit(nick=username.lower()) except discord.Forbidden: # 没有权限修改该用户昵称时直接跳过 pass # 可选:监听新成员加入事件,对刚进服的成员也生效 @client.event async def on_member_join(member): username = member.name if any(char.isupper() for char in username): try: await member.edit(nick=username.lower()) except discord.Forbidden: pass # 填入你自己的Bot Token启动 client.run('你的Bot Token')
前置配置要求
- 前往Discord开发者后台,在对应Bot的设置页「Privileged Gateway Intents」板块下开启
Server Members Intent - 邀请Bot进服务器时,需要给Bot勾选
Manage Nicknames(管理昵称)权限
内容的提问来源于stack exchange,提问作者Earn Nitro
相关产品推荐
相关产品推荐

