如何在discord.js中检查自身机器人是否有发消息权限并编写对应if语句
discord.js 机器人自身发送消息权限校验实现
要校验机器人自身的权限,首先可以通过当前服务器实例的guild.members.me属性获取机器人在该服务器的成员实例,再基于该实例做权限校验即可,具体的if语句写法分两种场景:
场景1:校验服务器全局发送消息权限
适用于不需要区分频道,只需要判断机器人在整个服务器有没有发消息基础权限的情况:
// guild为当前服务器的Guild实例 const botGuildMember = guild.members.me; if (botGuildMember.permissions.has('SendMessages')) { // 有权限的执行逻辑 } else { // 无权限的降级处理逻辑 }
场景2:校验指定频道内的发送消息权限
频道可能会单独覆写权限,即使服务器全局有权限,也可能在指定频道被禁止发消息,建议优先用这个校验方案:
// channel为要校验的目标频道实例,比如interaction.channel const botChannelPermissions = channel.permissionsFor(guild.members.me); if (botChannelPermissions?.has('SendMessages')) { // 该频道内有权限发消息的执行逻辑 } else { // 该频道内无权限的降级处理逻辑 }
- 注意:如果你使用的是discord.js v14及以上版本,权限标识需要使用导入的枚举值,替换为
PermissionFlagsBits.SendMessages即可,避免硬写字符串出现拼写错误。
内容的提问来源于stack exchange,提问作者Tachanks
相关产品推荐
相关产品推荐

