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

如何在discord.py中使用由多个单词组成的命令别名

问题原因

discord.py 原生的命令解析逻辑默认按空格拆分消息内容,取第一个拆分后的片段作为命令名匹配,因此aliases参数本身不支持传入带空格的多词内容,你输入[前缀]night night时,程序只会把night当作命令名匹配,第二个night会被识别为命令参数,自然无法触发对应命令。

可用实现方案

方案1:通过on_message事件手动匹配多词别名

这个方案灵活度最高,不需要改动原有命令的结构,新增多词别名时只要加匹配规则即可,示例代码如下:

# 原有goodnight命令仅保留单单词别名即可
@bot.command(aliases=["gn"])
async def goodnight(ctx):
    await ctx.send("@everyone Goodnight everyone!")

@bot.event
async def on_message(message):
    # 匹配前缀+多词别名的规则,示例假设你的机器人命令前缀为!,可自行调整
    if message.content.lower() == "!night night":
        # 手动生成命令上下文,触发goodnight命令
        ctx = await bot.get_context(message)
        await ctx.invoke(goodnight)
    # 必须保留此行,否则其他普通命令会全部失效
    await bot.process_commands(message)

方案2:通过嵌套命令组实现

你也可以通过discord.py的组命令功能,把多词别名拆分为父命令+子命令的形式实现,示例代码如下:

# 定义父命令night,设置调用无对应子命令时不触发操作
@bot.group(invoke_without_command=True)
async def night(ctx):
    pass

# 定义子命令night,形成!night night的调用形式,直接复用goodnight逻辑
@night.command(name="night")
async def _night_night(ctx):
    await goodnight(ctx)

# 原有goodnight命令保持不变
@bot.command(aliases=["gn"])
async def goodnight(ctx):
    await ctx.send("@everyone Goodnight everyone!")
注意事项
  • 两种方案都可以兼容原有单单词别名的使用,不需要调整已有调用逻辑
  • 如果需要新增更多多词别名,方案1只要在on_message里新增对应匹配规则即可,方案2需要新增对应层级的组命令/子命令

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:09:03