Discord.py中如何设置包含空格的命令名称
问题根因
你之前的两种写法无法生效,原因非常明确:
- 第一种直接把带空格、问号的文本作为异步函数名的写法,本身就不符合Python语法规则:Python函数名仅支持字母、数字、下划线,且不能以数字开头,空格、问号这类字符根本不允许出现在函数名里,代码本身就无法正常运行。
- 第二种传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
相关产品推荐
相关产品推荐

