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

Python开发Discord Bot:实现命令参数选择与可选参数

Discord Bot 命令功能解决方案

问题1:实现参数可选选项(Heads/Tails/Random)

你之前用commands.Option(choices=["Heads", "Tails", "Random"])的方式不符合discord.py应用命令的规范,正确做法是使用discord.app_commands.Choice类定义可选选项,修正后的代码如下:

import discord
from discord import app_commands

@bot.tree.command(name="createcoinflip", description="Creates a coinflip based on the arguments.")
@app_commands.describe(amount="The amount of gems to bet", side="Choose your side")
async def createcoinflip(interaction: discord.Interaction, amount: int, side: app_commands.Choice[str]):
    await interaction.response.send_message(f"You chose {side.value} with an amount of {amount} gems.")

关键说明:

  • 必须导入discord.app_commands模块,用app_commands.Choice[str]指定选项的字符串类型
  • 配置后Discord会自动在输入命令时弹出Heads、Tails、Random三个可选值,用户无需手动输入
  • 获取选中的选项值时要使用side.value,因为side是一个Choice对象,而非直接的字符串

问题2:实现可选参数的默认值(自动使用发起命令的用户)

对于/balance命令,只需将玩家参数设置为可选(指定default=None),然后在函数内判断参数是否为空,为空则自动使用发起命令的用户作为目标:

@bot.tree.command(name="balance", description="Check a user's gem balance")
@app_commands.describe(player="The user to check balance for (optional)")
async def balance(interaction: discord.Interaction, player: discord.Member = None):
    # 若未指定player,默认使用发起命令的用户
    target_user = player or interaction.user
    # 替换为你实际的余额查询逻辑
    balance_amount = 1000  # 示例余额值
    await interaction.response.send_message(f"{target_user.display_name}'s balance: {balance_amount} gems")

关键说明:

  • 将player参数的默认值设为None,Discord会自动识别这是可选参数,用户输入命令时可选择不填写
  • 使用player or interaction.user简化判断逻辑:有传入参数则用传入的用户,否则用发起命令的用户

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 08:17:16