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

Discord.js V14:如何注册右键菜单命令

创建Discord消息右键删除命令(服务器级)

以下是基于discord.js v14的实现步骤,直接落地你的需求:

一、注册服务器级消息上下文菜单命令

先创建一个MESSAGE类型的应用命令,指定为服务器级(通过guildId绑定目标服务器):

const { REST, Routes, ApplicationCommandType } = require('discord.js');
const config = require('./config.json'); // 存储你的机器人token、clientId、目标服务器guildId

const commands = [
  {
    name: '删除消息',
    type: ApplicationCommandType.Message,
  },
];

const rest = new REST({ version: '10' }).setToken(config.token);

(async () => {
  try {
    console.log('正在注册服务器级消息上下文菜单命令...');

    await rest.put(
      Routes.applicationGuildCommands(config.clientId, config.guildId),
      { body: commands },
    );

    console.log('「删除消息」右键菜单注册成功!');
  } catch (error) {
    console.error(error);
  }
})();
  • 运行这段代码后,目标服务器的消息右键「应用」列表中就会出现你的机器人的「删除消息」选项。
  • 如需批量部署到多服务器,循环遍历guildId数组重复调用注册接口即可。

二、监听并处理interactionCreate事件

接下来要监听机器人的交互事件,响应用户的右键菜单操作:

const { Client, GatewayIntentBits, PermissionsBitField } = require('discord.js');
const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages] });
const config = require('./config.json');

client.on('interactionCreate', async (interaction) => {
  // 过滤非消息上下文菜单的交互
  if (!interaction.isMessageContextMenuCommand()) return;

  // 匹配「删除消息」命令
  if (interaction.commandName === '删除消息') {
    // 检查机器人权限
    if (!interaction.guild.members.me.permissions.has(PermissionsBitField.Flags.ManageMessages)) {
      return interaction.reply({ content: '我没有管理消息的权限,无法执行操作!', ephemeral: true });
    }

    // 检查用户权限
    if (!interaction.member.permissions.has(PermissionsBitField.Flags.ManageMessages)) {
      return interaction.reply({ content: '你没有删除消息的权限!', ephemeral: true });
    }

    try {
      // 删除用户选中的目标消息
      await interaction.targetMessage.delete();
      // 发送仅用户可见的操作反馈
      await interaction.reply({ content: '消息已删除!', ephemeral: true });
    } catch (error) {
      console.error(error);
      await interaction.reply({ content: '删除失败,请检查消息状态或权限设置!', ephemeral: true });
    }
  }
});

client.login(config.token);

核心细节说明:

  • interaction.targetMessage就是用户右键选中的那条消息,直接调用delete()即可完成删除操作。
  • ephemeral: true设置回复仅触发命令的用户可见,避免在频道内产生冗余消息。
  • 必须开启Guilds和GuildMessages意图,否则机器人无法接收服务器及消息相关的交互事件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 07:25:19