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

如何让Discord机器人的角色命令对输入不区分大小写

问题原因

你遇到的问题是:discord.Role转换器本身默认区分大小写,而命令的case_insensitive=True仅作用于命令名称(比如!Role和!role都能触发命令),不影响角色参数的匹配逻辑。capitalize()方法无效是因为它只能处理首字母大写的单一场景,没法覆盖所有大小写组合(比如角色名是"Full Stack Coder",用户输入"full stack coder"时,capitalize()只会转成"Full stack coder",仍然匹配不上)。

解决方案1:自定义不区分大小写的角色转换器

写一个自定义转换器类,统一将用户输入和角色名转为小写后再匹配:

from discord.ext import commands

class CaseInsensitiveRole(commands.Converter):
    async def convert(self, ctx, argument):
        input_lower = argument.lower()
        # 遍历服务器所有角色,匹配小写后的名称
        for role in ctx.guild.roles:
            if role.name.lower() == input_lower:
                return role
        # 未找到角色时抛出标准错误
        raise commands.BadArgument(f"找不到角色 '{argument}'")

然后修改命令的参数类型为这个自定义转换器:

@client.command(aliases=['r'], case_insensitive=True)
async def role(ctx, *, role: CaseInsensitiveRole):
    if role in ctx.author.roles:
        await ctx.author.remove_roles(role)
        await ctx.send(f"已移除角色「{role.name}」")
    else:
        await ctx.author.add_roles(role)
        await ctx.send(f"已添加角色「{role.name}」")
解决方案2:直接接收字符串,手动匹配角色

如果不想写自定义转换器,也可以直接将参数当作字符串处理,手动遍历服务器角色找匹配项:

@client.command(aliases=['r'], case_insensitive=True)
async def role(ctx, *, role_name):
    target_role = None
    role_name_lower = role_name.lower()
    # 遍历服务器角色,对比小写后的名称
    for role in ctx.guild.roles:
        if role.name.lower() == role_name_lower:
            target_role = role
            break
    
    if not target_role:
        await ctx.send(f"服务器中不存在名为「{role_name}」的角色")
        return
    
    if target_role in ctx.author.roles:
        await ctx.author.remove_roles(target_role)
        await ctx.send(f"已为你移除角色「{target_role.name}」")
    else:
        await ctx.author.add_roles(target_role)
        await ctx.send(f"已为你添加角色「{target_role.name}」")

两种方案的核心逻辑都是将用户输入和角色名统一转为同一大小写(比如全小写)后再比较,彻底忽略大小写差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:36:20