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

如何检查指定Discord频道内机器人的发送消息权限

问题修正方案

原代码存在的问题

  • 取值错误:message.user.bot是用于判断消息发送者是否为机器人的布尔值,不存在permissions属性,无法通过该路径获取机器人的权限对象
  • 校验范围错误:直接读取成员全局权限无法感知频道单独设置的权限覆盖规则(比如频道单独封禁机器人发言权限),无法得到指定频道下的真实权限
  • 权限名拼写错误:发送消息的权限标识不是单数形式的SEND_MESSAGE,拼写错误会导致校验结果完全失效

正确实现代码

以下是适配discord.js v13/v14(当前主流版本)的实现:

// 指定要校验的目标频道ID
const TARGET_CHANNEL_ID = "988087516844421170";
// 从服务器频道缓存中获取目标频道实例
const targetChannel = message.guild.channels.cache.get(TARGET_CHANNEL_ID);

// 兜底处理:频道不存在时直接返回,避免后续代码报错
if (!targetChannel) {
  console.log("目标频道不存在,无法校验权限");
  return;
}

// 调用频道实例的permissionsFor方法,获取机器人在当前频道的真实生效权限
const botHasSendPerm = targetChannel.permissionsFor(message.guild.me).has("SendMessages");

if (botHasSendPerm) {
  console.log("I can send message!!")
} else {
  console.log("I can't send message!!")
}

补充说明

  • 如果你还在使用discord.js v12及更早版本,只需要把权限字符串替换为全大写下划线格式的SEND_MESSAGES即可,其余逻辑不变
  • message.guild.me是当前服务器中机器人自身的成员对象,是获取机器人权限的正确入口
  • 必须通过频道实例的permissionsFor()方法做校验,才能正确计算角色继承、频道专属权限覆盖、频道同步规则等影响最终权限的逻辑,返回的校验结果才准确

内容的提问来源于stack exchange,提问作者Julian-V

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:42:23