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

Discord.py中如何设置包含空格的命令名称

问题根因

你之前的两种写法无法生效,原因非常明确:

  1. 第一种直接把带空格、问号的文本作为异步函数名的写法,本身就不符合Python语法规则:Python函数名仅支持字母、数字、下划线,且不能以数字开头,空格、问号这类字符根本不允许出现在函数名里,代码本身就无法正常运行。
  2. 第二种传aliases的写法,不符合Discord.py默认命令解析逻辑:框架默认以空格作为命令名和参数的分隔符,读取到命令前缀后,只会把第一个连续不含空格的字符串识别为命令名,后续所有空格分隔的内容都会被判定为命令参数,自然不可能匹配到带空格的别名。
实现方法

针对你要匹配整句触发回复的需求,最直接稳定的方案是通过on_message事件做内容精确匹配,不需要走原生命令注册逻辑,代码如下:

@client.event
async def on_message(message):
    # 过滤机器人自身发送的消息,避免触发无限回复循环
    if message.author.bot:
        return
    
    # 精确匹配目标指令,.strip()用来忽略用户消息首尾不小心多打的空格
    if message.content.strip() == "Am I right lads or am I right lads?":
        await message.reply("You are right lad!")
    
    # 这行必须保留,否则你之前注册的其他普通前缀命令会全部失效
    await client.process_commands(message)

如果需要支持不区分大小写匹配,只需要把判断条件改成:

if message.content.strip().lower() == "am i right lads or am i right lads?":

如果后续你需要注册更多带空格的命令,不想每次都在on_message里写判断,也可以自己重写Bot类的命令解析逻辑,但对于当前这个单句触发的需求,上面的写法是维护成本最低、最不容易出兼容问题的选择。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 10:31:02