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

如何在discord.py的CommandTree中获取命令参数后的内容?

Discord.py斜杠命令相关问题解答

1. 获取命令后续内容的方法

Discord的斜杠命令是结构化参数设计,不像前缀命令支持*args直接捕获未定义的后续内容。但可以通过以下方式实现类似需求:

  • 利用最后一个字符串参数自动合并内容:
    保留可选的extra字符串参数,Discord的斜杠命令解析器会自动将用户输入的所有后续内容(包括空格)合并到这个参数中。比如用户执行/mycmd foo bar baz bam bap,extra的值就会是"baz bam bap",无需用户手动加引号。示例代码:
    @client.tree.command(
        name="mycmd",
        description="...",
        guild=discord.Object(id=serverId)
    )
    @app_commands.autocomplete(...)
    async def mycmd(
        interaction: discord.Interaction,
        arg1: str,
        arg2: str,
        extra: str = ''
    ):
        await interaction.response.send_message(f"捕获到的额外内容:{extra}")
    
  • 注意:如果不定义extra参数,用户在arg1和arg2之后输入的内容会被Discord客户端判定为无效输入,无法传递到命令处理函数中,所以必须通过定义最后一个字符串参数来接收后续内容。

2. 斜杠命令实现方式的正确性

你当前的写法是discord.py v2.x版本中现代且正确的斜杠命令实现方式。不过可以简化一下:直接使用client.tree(discord.Client或discord.Bot实例内置的CommandTree对象),无需手动创建CommandTree实例,示例如下:

import discord
from discord import app_commands

# 初始化客户端(注意需要启用必要的intents)
client = discord.Client(intents=discord.Intents.default())

@client.tree.command(
    name="mycmd",
    description="...",
    guild=discord.Object(id=serverId)
)
@app_commands.autocomplete(...)
async def mycmd(
    interaction: discord.Interaction,
    arg1: str,
    arg2: str,
    extra: str = ''
):
    # 你的命令逻辑
    pass

# 运行客户端
client.run("你的Bot令牌")

如果需要将命令同步到多个服务器,可以去掉guild参数,然后在客户端就绪时调用await client.tree.sync()进行全局同步(全局同步生效可能需要1小时),或者指定多个guild对象进行同步。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 13:42:45