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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:45:03