如何在discord.py中将多个单词设置为单个命令?
问题原因
- discord.py 默认的命令解析逻辑会按空格切割用户发送的消息,第一个空格前的内容会被识别为命令名,剩余内容会被当做命令参数处理。你在aliases里配置带空格的字符串,自然无法被解析器匹配到,所以不会触发对应命令。
实现多词触发命令的两种方案
方案1:直接定义带空格的命令名
直接在command装饰器的name参数中填写完整的多词命令即可,不需要用aliases配置:
@client.command(name="how old are you") async def age(ctx): await ctx.send('I am 30')
配置完成后,发送[你的命令前缀]how old are you就能触发该命令,比如你的前缀是!,就发送!how old are you。
方案2:通过on_message事件手动匹配(灵活度更高)
如果你有大量多词命令,或者需要实现无前缀的触发,可以直接在on_message事件里做字符串匹配,不需要走官方的命令解析逻辑:
@client.event async def on_message(message): # 排除机器人自己发的消息 if message.author == client.user: return # 匹配多词触发内容,这里可以根据需求加前缀判断 if message.content.strip() == "how old are you": await message.channel.send('I am 30') # 不要漏掉这行,否则其他正常的命令会失效 await client.process_commands(message)
内容的提问来源于stack exchange,提问作者Alex Venova
相关产品推荐
相关产品推荐

