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

Discord.js基于guildBanAdd事件仅解封已封禁ID避免未知报错

实现方案

核心逻辑

  • 调用guild.bans.fetch()拉取服务器当前全部封禁用户列表,确认目标ID的封禁状态后再执行操作,避免触发不存在封禁的报错
  • 修正原代码中guildBanAdd事件的错误参数定义:该事件触发时仅传入1个GuildBan类型的参数,不存在message/member等冗余参数

修正后完整代码

const cool = ['607868627181502467', '638038115277340723', '347651751651966978'];
const { Client } = require('discord.js');

module.exports = {
  name: 'guildBanAdd',
  // guildBanAdd事件仅接收GuildBan单个参数
  async execute(ban) {
    const currentGuild = ban.guild;
    try {
      // 拉取当前服务器所有已封禁的用户集合
      const bannedList = await currentGuild.bans.fetch();
      // 遍历白名单ID,仅对确实处于封禁状态的用户执行解封
      cool.forEach(allowId => {
        if (bannedList.has(allowId)) {
          currentGuild.members.unban(allowId)
            .catch(err => console.log(`解封ID${allowId}失败:`, err));
        }
      })
    } catch (err) {
      console.log('拉取服务器封禁列表失败:', err);
    }
  }
}

版本适配说明

  • 以上代码适配Discord.js v13/v14版本,如果你使用v12及更早版本,请将currentGuild.bans.fetch()替换为currentGuild.fetchBans()即可
  • 请确保机器人已被授予Ban Members权限,否则无法正常拉取封禁列表和解封用户

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:09:01