如何在Discord.js中判断命令是否在指定服务器内执行
实现方案
直接通过命令触发对象自带的服务器ID字段和预设的目标ID比对即可实现校验,以下分两种常见命令类型给出具体实现:
斜杠命令(/命令)适配方案
斜杠命令触发时返回的Interaction对象自带guildId字段,直接读取该字段和目标服务器ID比对即可:
// 替换为你要限定的服务器ID const TARGET_GUILD_ID = 'xxx你的服务器IDxxx'; client.on('interactionCreate', async interaction => { // 先过滤非聊天输入类的交互 if (!interaction.isChatInputCommand()) return; // 服务器校验逻辑,私信场景下guildId为null也会被拦截 if (interaction.guildId !== TARGET_GUILD_ID) { return interaction.reply({ content: '该命令仅支持在指定服务器内使用', ephemeral: true // 仅触发用户可见,避免公屏刷屏 }); } // 后续正常写命令执行逻辑 });
上述逻辑适配discord.js v13及以上版本
前缀消息命令适配方案
如果是用传统字符前缀触发的消息命令,读取Message对象的guild.id字段做比对即可:
const TARGET_GUILD_ID = 'xxx你的服务器IDxxx'; const CMD_PREFIX = '!'; // 替换为你自己的命令前缀 client.on('messageCreate', async message => { // 过滤非命令消息和机器人发送的消息 if (!message.content.startsWith(CMD_PREFIX) || message.author.bot) return; // 服务器校验逻辑,私信场景无guild属性会直接被拦截 if (!message.guild || message.guild.id !== TARGET_GUILD_ID) { return message.reply('该命令仅支持在指定服务器内使用'); } // 后续正常解析执行命令逻辑 });
多服务器适配方案
如果需要同时允许多个服务器使用该命令,将允许的服务器ID存入数组,用includes方法判断即可:
// 填入所有允许执行命令的服务器ID const ALLOWED_GUILD_IDS = ['服务器ID1', '服务器ID2', '服务器ID3']; // 斜杠命令校验逻辑 if (!ALLOWED_GUILD_IDS.includes(interaction.guildId)) { // 拦截逻辑 } // 消息命令校验逻辑 if (!message.guild || !ALLOWED_GUILD_IDS.includes(message.guild.id)) { // 拦截逻辑 }
内容的提问来源于stack exchange,提问作者Coolebooster
相关产品推荐
相关产品推荐

