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

Discord Bot JOIN_COMMAND命令更新报错:子命令类型冲突排查

问题

我正在创建一个Discord机器人,用于在用户加入社区时提示其提供所需个人资料以完成信息收集。我定义了如下JOIN_COMMAND命令结构:

const JOIN_COMMAND = {
  name: 'join',
  description: 'User requests to join the community and need to provide his/her profile information',
  //type: 1,
  options: [
    {
      type: 3, // STRING
      name: 'name',
      description: 'Please provide your name',
      required: true,
    },
    {
      type: 4, // INTEGER
      name: 'age',
      description: 'Please provide your age',
      required: true,
      min_value: 18,
      max_value: 90
    },
    {
      type: 1, // SUB_COMMAND
      name: 'gender',
      description: 'Please provide your gender',
      //required: true,
      "options": [
        {
            "name": "male",
            "description": "Male",
            "type": 3 // 1 is type SUB_COMMAND
        },
        {
            "name": "female",
            "description": "Female",
            "type": 3
        }
      ]      
    },
  ],
  integration_types: [0, 1],
  contexts: [0, 1, 2],
};

当我使用PUT请求更新现有命令时,收到如下错误:

{
  "message": "Invalid Form Body",
  "code": 50035,
  "errors": {
    "1": {
      "options": {
        "2": {
          "_errors": [
            {
              "code": "APPLICATION_COMMAND_OPTIONS_TYPE_INVALID",
              "message": "Sub-command and sub-command group option types are mutually exclusive to all other types"
            }
          ]
        }
      }
    }
  }
}

明明我的命令结构中并没有子命令组(type: 2),却出现了该错误,该如何解决?

解决方法

错误的核心原因是Discord不允许同一个顶级命令中同时包含普通参数(如string、integer)和子命令(sub-command),两者是互斥的,和有没有子命令组无关。你有两种修复方案:

方案1:将gender改成带可选值的普通STRING参数

直接把gender设为带固定选项的字符串参数,和name、age保持一致的参数类型:

const JOIN_COMMAND = {
  name: 'join',
  description: 'User requests to join the community and need to provide his/her profile information',
  options: [
    {
      type: 3, // STRING
      name: 'name',
      description: 'Please provide your name',
      required: true,
    },
    {
      type: 4, // INTEGER
      name: 'age',
      description: 'Please provide your age',
      required: true,
      min_value: 18,
      max_value: 90
    },
    {
      type: 3, // STRING
      name: 'gender',
      description: 'Please provide your gender',
      required: true,
      choices: [
        { name: "Male", value: "male" },
        { name: "Female", value: "female" }
      ]
    },
  ],
  integration_types: [0, 1],
  contexts: [0, 1, 2],
};

方案2:将所有参数统一放到子命令中

如果一定要用子命令结构,需要把name、age也整合到子命令里,让顶级命令只包含子命令:

const JOIN_COMMAND = {
  name: 'join',
  description: 'User requests to join the community and need to provide his/her profile information',
  options: [
    {
      type: 1, // SUB_COMMAND
      name: 'submit_profile',
      description: 'Submit your profile information to join',
      options: [
        {
          type: 3, // STRING
          name: 'name',
          description: 'Please provide your name',
          required: true,
        },
        {
          type: 4, // INTEGER
          name: 'age',
          description: 'Please provide your age',
          required: true,
          min_value: 18,
          max_value: 90
        },
        {
          type: 3, // STRING
          name: 'gender',
          description: 'Please provide your gender',
          required: true,
          choices: [
            { name: "Male", value: "male" },
            { name: "Female", value: "female" }
          ]
        }
      ]
    }
  ],
  integration_types: [0, 1],
  contexts: [0, 1, 2],
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:05:08