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

discord.js v13开发Discord机器人解封功能时fetchBans报错如何解决

问题原因

  • 首次报错Cannot read properties of undefined (reading 'fetchBans'):message.guild对象没有cache子属性,访问不存在的属性得到undefined,调用方法直接触发空指针错误。
  • 二次报错TypeError: message.guild.fetchBans is not a function:discord.js v13做了API破坏性调整,旧版本v12的guild.fetchBans()方法已被移除,所有封禁相关操作都迁移到guild.bans管理器下。

解决方案

  1. 替换获取服务器封禁列表的代码,将原报错行修改为:
message.guild.bans.fetch().then(async bans => {
  1. 检查机器人初始化的Intents配置,必须启用GUILDS权限,否则无法正常获取服务器对象相关数据,初始化示例:
const { Client, Intents } = require('discord.js');
const client = new Client({
  intents: [
    Intents.FLAGS.GUILDS,
    Intents.FLAGS.GUILD_MESSAGES,
    // 其他业务需要的Intents
  ]
});
  1. 建议在命令逻辑最前端增加场景判断,避免私信触发命令时报错:
if (!message.inGuild()) return message.channel.send('该命令仅支持在服务器内使用');

修改后核心代码示例:

// 开头先加场景判断
if (!message.inGuild()) return message.channel.send('该命令仅支持在服务器内使用');

message.guild.bans.fetch().then(async bans => {
  if (bans.size === 0) return message.channel.send("No one is banned on the server!")
  let bannedUser = bans.find(ban => ban.user.id == userID)
  if (!bannedUser) return message.channel.send("This user isn't banned!")
  await message.guild.members.unban(bannedUser.user, reason).catch(err => {
    return message.channel.send("Something went wrong!")
  }).then(() => {
    let embed = new MessageEmbed()
      .setColor("GREEN")
      .setTitle(`Member unbanned!`)
      .setDescription("")
      .setTimestamp()
      .setFooter(this.client.user.username)

    embed.addField(`member = ${target.username}`, `reason = ${reason}`, false)
    message.channel.send({embeds: [embed]});

    if (row[0].logs_channel != null) this.client.channels.cache.get(row[0].logs_channel).send({embeds: [embed]})
    message.delete()
  })
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:15:03