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

