如何在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
相关产品推荐
相关产品推荐

