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

如何为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 11:47:16