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
相关产品推荐
相关产品推荐

