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

discord.js V13中为interactionCreate事件添加参数及斜杠命令添加参数的技术咨询

Discord.js v13 斜杠命令参数配置与interactionCreate事件处理

一、先搞定带参数的斜杠命令注册

从v12转到v13,最大的变化之一就是斜杠命令需要通过Discord的API进行注册,而不是像前缀命令那样直接解析消息内容。以你要做的/verify UsernameHere为例,咱们先把这个带参数的命令注册好:

1. 命令注册代码示例

你可以用@discordjs/rest和discord-api-types来注册全局或服务器专属命令,这里给个全局命令的实操例子:

const { REST } = require('@discordjs/rest');
const { Routes } = require('discord-api-types/v9');
const { Client, GatewayIntentBits } = require('discord.js');

const client = new Client({ intents: [GatewayIntentBits.Guilds] });

const commands = [
  {
    name: 'verify',
    description: '验证指定用户的身份',
    options: [
      {
        name: 'username',
        type: 3, // 对应STRING类型,也可以用ApplicationCommandOptionType.String枚举值
        description: '需要验证的用户名',
        required: true, // 设为必填参数,用户必须输入才能执行命令
      },
    ],
  },
];

const rest = new REST({ version: '9' }).setToken('你的Bot令牌');

(async () => {
  try {
    console.log('开始注册全局斜杠命令...');

    await rest.put(
      Routes.applicationCommands(client.user.id),
      { body: commands },
    );

    console.log('全局斜杠命令注册成功!');
  } catch (error) {
    console.error(error);
  }
})();

小提示:全局命令可能需要1小时左右才会在所有服务器生效,如果是测试用,可以用Routes.applicationGuildCommands(client.user.id, '你的测试服务器ID')注册服务器专属命令,几秒就能生效。

二、处理interactionCreate事件中的参数

命令注册好后,接下来就是在interactionCreate事件里捕捉命令、获取参数,然后处理你的验证逻辑:

1. interactionCreate事件处理代码

client.on('interactionCreate', async interaction => {
  // 先判断当前交互是不是斜杠命令
  if (!interaction.isChatInputCommand()) return;

  // 匹配到verify命令时执行逻辑
  if (interaction.commandName === 'verify') {
    // 获取参数:这里的'username'就是咱们注册命令时定义的参数名
    const targetUsername = interaction.options.getString('username');

    // 接下来写你的验证逻辑,比如查找用户、发送验证通知、写入数据库等
    try {
      // 先给用户一个反馈,告诉他们命令已接收
      await interaction.reply(`正在验证用户:${targetUsername}...`);
      
      // 这里可以加你的具体验证逻辑,举个例子:
      // 根据用户名查找服务器内的成员
      // const member = interaction.guild.members.cache.find(m => m.user.username === targetUsername);
      // 如果找到成员,就发送验证消息或者更新数据库状态
      
    } catch (error) {
      // 出错时给用户发个私密提示
      await interaction.reply({ content: '验证过程中出现错误!', ephemeral: true });
      console.error(error);
    }
  }
});

2. 常用参数类型与获取方式

如果你的验证系统需要其他类型的参数,比如直接选择用户而不是输入用户名,可以修改注册时的type字段:

  • 用户类型:6(或ApplicationCommandOptionType.User),用interaction.options.getUser('target_user')直接获取用户对象
  • 角色类型:8(或ApplicationCommandOptionType.Role),用interaction.options.getRole('target_role')获取角色对象
  • 布尔值:5,用interaction.options.getBoolean('is_verified')获取布尔值

三、转版本后的关键注意点

  • v13的Bot必须开启Guilds意图(也就是代码里的GatewayIntentBits.Guilds),否则根本收不到交互事件
  • 所有斜杠命令的参数都必须在注册时定义好,不能像v12那样从消息内容里手动截取
  • 如果想让参数可选,把required设为false就行,获取时可以加默认值:interaction.options.getString('username', false) || '默认用户名'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 06:43:12