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

