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

discord.js v13开发反链接脏话功能时报permissions为null的TypeError

问题根因定位
  • 报错核心原因是message.member为null,该情况通常出现在消息来自服务器外的私聊(DM)场景时,私聊场景不存在服务器成员属性,自然没有permissions字段
  • discord.js v13 已废弃旧的message事件,替换为messageCreate事件,继续使用旧事件会导致属性读取异常
  • 未配置v13强制要求的网关意图(Intents),必须手动开启GUILDS、GUILD_MESSAGES、GUILD_MEMBERS 三个意图才能正常读取成员、消息、服务器相关属性
  • 代码存在笔误,静音逻辑里的message.guildMember是错误写法,正确属性为message.member,运行到静音逻辑时会触发二次报错
修复步骤
  1. 先在事件逻辑最前面增加无效消息过滤,直接跳过不需要处理的场景
  2. 将事件监听从client.on('message'替换为v13适配的messageCreate事件
  3. 检查客户端初始化代码,配置必要的网关意图,同时需要在Discord开发者后台的Bot设置页面,开启 Privileged Gateway Intents 下的Server Members Intent开关
  4. 修正代码里的guildMember笔误为member

客户端初始化参考配置:

const { Client, Intents } = require('discord.js');
const client = new Client({
  intents: [
    Intents.FLAGS.GUILDS,
    Intents.FLAGS.GUILD_MESSAGES,
    Intents.FLAGS.GUILD_MEMBERS
  ]
});
修复后完整业务代码
const fs = require('fs')
module.exports = (client) => {
  // 替换为v13支持的messageCreate事件
  client.on('messageCreate', async message => {
    // 前置过滤无效消息:机器人消息、非服务器消息、无成员属性的消息直接跳过
    if (message.author.bot || !message.guild || !message.member) return;
    if(message.member.permissions.has('MANAGE_MESSAGES')) return
    let warnings = {}
    let warnCount = 3
    let warnCount2 = 5
    let warnCount3 = 7
    warnings = fs.readFileSync('./db.json', 'utf8');
    warnings = JSON.parse(warnings)
    if(message.content.toLowerCase().includes('fuk')) {
      await message.delete()
      await message.channel.send(`${message.author.username} was warned for posting links`)
      if(!warnings[message.author.id]) warnings[message.author.id] = {
        warnings: 0
      }
      warnings[message.author.id].warnings += 1
      console.log(`${message.author.tag} was warned in ${message.guild.name}. Warnings: ${warnings[message.author.id].warnings}`)
      if(warnings[message.author.id].warnings == warnCount){
        let muterole = message.guild.roles.cache.find(role => role.name === 'Muted')
        if(!muterole) return message.channel.send('cant mute because theres no roles such as "Muted"')
        // 修复笔误:guildMember改为member
        await message.member.roles.add(muterole)
        await message.channel.send(`${message.author.tag} was muted for 1m. Reason: Unknown Link`)
        setTimeout(async() => {
          await message.member.roles.remove(muterole)
          await message.channel.send(`${message.author.tag} was unmuted`)
        }, 60000)
      }
      if(warnings[message.author.id].warnings == warnCount2){
        let muterole = message.guild.roles.cache.find(role => role.name === 'Muted')
        if(!muterole) return message.channel.send('cant mute because theres no roles such as "Muted"')
        // 修复笔误:guildMember改为member
        await message.member.roles.add(muterole)
        await message.channel.send(`${message.author.tag} was muted for 1h. Reason: Unknown Link`)
        setTimeout(async() => {
          await message.member.roles.remove(muterole)
          await message.channel.send(`${message.author.tag} was unmuted`)
        }, 3600000)
      }
      fs.writeFileSync('./db.json', JSON.stringify(warnings));
    }
  })
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:57:02