DiscordJS V14中如何检查用户封禁状态及fetchBans报错解决
解决Discord.js v14中
fetchBans失效的解封命令问题 问题说明
在Discord.js v14环境下编写解封命令时,原代码调用message.guild.fetchBans()触发错误TypeError: message.guild.fetchBans is not a function,无法正常获取封禁列表并执行解封操作。需求为:若目标用户处于封禁状态则解封,否则向用户返回错误提示。
错误根源
Discord.js v14对公会封禁相关API进行了版本迭代:
- 移除了旧版的
fetchBans()方法 - 封禁列表获取改为
guild.bans.fetch() - 解封操作从
guild.members.unban()调整为guild.bans.remove()
修改后的完整代码
const { EmbedBuilder } = require("discord.js"); const { colors } = require("discordjs-colors-bundle"); module.exports = { config: { name: "unban", description: "Unban a member from the guild", usage: "unban [id]", }, permissions: ["BanMembers"], owner: false, run: async (client, message, args, prefix, config, db) => { const userId = args.join(" "); if (!userId) { return message.reply({ content: `:x: | Please provide a ID to ban! ` }); } // 替换为v14的封禁列表获取方法 const banList = await message.guild.bans.fetch(); const bannedUser = banList.find((user) => user.id === userId); const UnbannedEmbed = new EmbedBuilder() .setColor(colors.SeaBlue) .setTitle(`Unbanned`) .setDescription(`The user is unbanned!`) .setTimestamp() .setFooter({ text: `${message.guild.name}` }); if (bannedUser) { // 替换为v14的解封方法,并添加await处理异步操作 await message.guild.bans.remove(userId); message.reply({ embeds: [UnbannedEmbed] }); } else { message.reply({ content: `:x: | The mentioned user is not banned!` }); } }, };
核心修改点
- 封禁列表获取:
message.guild.fetchBans()→message.guild.bans.fetch() - 解封操作:
message.guild.members.unban(userId)→await message.guild.bans.remove(userId)(必须添加await确保异步操作完成后再发送提示)
内容的提问来源于stack exchange,提问作者Mohtasim Alam Sohom
相关产品推荐
相关产品推荐

