如何为Discord.py斜杠命令的多个参数设置选项
Discord.py斜杠命令可选参数及选项设置方案
原代码的问题
你原来用的@app_commands.Argument不是Discord.py的正确用法,这个写法已经过时且无效。正确配置参数的方式是直接在函数参数上定义,或搭配专用装饰器设置选项。
修正后的可行代码
要实现name必填、day可选带默认值,同时给参数加可选选项,代码如下:
import discord from discord import app_commands from discord.ext import commands # 先确保bot初始化正确,示例: # bot = commands.Bot(command_prefix="!", intents=discord.Intents.all(), token="你的Bot令牌") @bot.tree.command(name="schedule", description="创建日程安排") # 给day参数设置可选选项,用户在输入时能直接选择 @app_commands.choices(day=[ app_commands.Choice(name="今天", value="Today"), app_commands.Choice(name="明天", value="Tomorrow"), app_commands.Choice(name="后天", value="The day after tomorrow") ]) async def schedule(interaction: discord.Interaction, name: str, day: str = "Today"): # name无默认值,自动设为必填;day有默认值,成为可选参数 await interaction.response.send_message(f"日程:{name},日期:{day}") # 同步命令到Discord服务器,全局同步需等待,测试可指定服务器ID:guild=discord.Object(id=你的服务器ID) @bot.event async def on_ready(): await bot.tree.sync() print(f"已登录:{bot.user}")
核心要点
- 必填参数:没有设置默认值的参数(比如
name)会自动被Discord标记为必填项,用户必须输入。 - 可选参数:给参数加上默认值(比如
day: str = "Today"),用户不输入时会自动使用这个默认值。 - 选项列表:用
@app_commands.choices装饰器给参数添加可选选项,每个选项是app_commands.Choice,name是用户看到的显示文本,value是传给函数的实际值。 - 命令生效:必须在
on_ready事件里调用bot.tree.sync(),否则命令不会在Discord里显示。
内容的提问来源于stack exchange,提问作者Ryan Thomas
相关产品推荐
相关产品推荐

