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

如何制作可将含大写字母的用户名转为小写昵称的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:15:05