如何将Discord.py机器人的Command.ignore_extra默认值设为False
方案1:直接修改全局默认值(最简单快速)
如果你确定所有命令都需要开启多余参数校验,直接在初始化Bot实例之前修改Command类的默认类属性即可:
from discord.ext.commands import Command # 全局修改默认值,所有后续创建的命令都会继承这个配置 Command.ignore_extra = False # 之后再初始化你的bot实例 bot = commands.Bot(...)
注意:这个方法会修改所有依赖discord.py Command类的命令默认配置,如果你引入了第三方插件命令也会受到影响。
方案2:自定义命令基类(无侵入更安全)
如果不想修改全局类属性,避免影响第三方组件,可以继承Command类创建自定义子类,初始化Bot的时候指定使用你的自定义命令类:
from discord.ext.commands import Command, Bot class StrictCommand(Command): def __init__(self, *args, **kwargs): # 默认设置ignore_extra为False,允许单个命令单独覆盖配置 kwargs.setdefault("ignore_extra", False) super().__init__(*args, **kwargs) # 初始化bot时指定命令类为你自定义的类 bot = Bot(command_prefix="!", command_cls=StrictCommand)
这个方案的优势是不会影响第三方库的命令行为,同时你依然可以给个别需要忽略多余参数的命令单独配置ignore_extra=True:
@bot.command(ignore_extra=True) async def loose_command(ctx, *args): # 这个命令依然会忽略多余参数 await ctx.send("该命令不受多余参数限制")
配套错误处理配置
修改完配置后,你可以监听CommandTooManyArguments异常来统一给用户返回提示:
@bot.event async def on_command_error(ctx, error): if isinstance(error, commands.CommandTooManyArguments): await ctx.send(f"命令 `{ctx.command.name}` 传入了过多参数,请使用 `!help {ctx.command.name}` 查看正确用法。") # 阻止异常继续向上抛出 error.handled = True # 其他错误处理逻辑
内容的提问来源于stack exchange,提问作者Mario
相关产品推荐
相关产品推荐

