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

discord.js v14机器人指定频道权限检查报错求助

解决discord.js v14检查机器人频道权限的TypeError问题

问题重现

原discord.js v13权限检查代码:

if(!interaction.guild.me.permissionsIn(channel).has("VIEW_CHANNEL"))

升级到v14后修改为:

if(!interaction.guild.members.me.permissionsIn(channel).has([PermissionsFlagsBits.ViewChannel, PermissionsFlagsBits.SendMessages]))

触发错误:

TypeError: Cannot read properties of undefined (reading 'id') at GuildMemberRoleManager.get cache [as cache] (C:\Users\sdamz\OneDrive\Desktop\dcbot v2\node_modules\discord.js\src\managers\GuildMemberRoleManager.js:37:101) ...

尝试if(!interaction.guild.members.me.permissions.has([PermissionsFlagsBits.ViewChannel, PermissionsFlagsBits.SendMessages]))仍报错。

错误原因

该错误是因为机器人自身的GuildMember对象未被缓存,v14中guild.members.me依赖成员缓存,若缓存中不存在该对象,就会触发读取undefined属性的报错。

解决方案

  1. 启用GuildMembers意图
    创建Client实例时必须添加GuildMembers意图,否则无法获取成员缓存:

    const { Client, GatewayIntentBits } = require('discord.js');
    const client = new Client({
      intents: [
        GatewayIntentBits.Guilds,
        GatewayIntentBits.GuildMembers, // 关键:添加此意图
        // 按需添加其他意图(如GuildMessages等)
      ],
    });
    
  2. 手动获取机器人成员对象
    若启用意图后仍报错,直接通过fetch方法主动获取机器人的GuildMember对象,不依赖缓存:

    // 先获取机器人的成员实例
    const botMember = await interaction.guild.members.fetch(client.user.id);
    // 检查目标频道的权限
    if (!botMember.permissionsIn(channel).has([
      PermissionsFlagsBits.ViewChannel,
      PermissionsFlagsBits.SendMessages
    ])) {
      // 权限不足的处理逻辑,比如发送提示
      await interaction.reply('我在该频道没有查看和发送消息的权限!');
    }
    

    也可以简化为单行:

    if (!(await interaction.guild.members.fetch(client.user.id)).permissionsIn(channel).has([PermissionsFlagsBits.ViewChannel, PermissionsFlagsBits.SendMessages])) {
      // 处理逻辑
    }
    
  3. 修复代码拼写错误
    注意到你最后一段代码中SendMessagesl多了一个字母l,虽然不是当前报错的原因,但会导致权限检查逻辑失效,需修正为SendMessages。

内容的提问来源于stack exchange,提问作者tryfyfu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 10:45:37