Discord.js如何实现批量封禁用户名含指定关键词的成员?
报错原因
fetchedMembers.filter()返回的是discord.js的Collection集合类型,本身没有ban方法,只有集合内存储的单个GuildMember成员实例才支持调用ban方法执行封禁操作,因此直接对集合调用ban会抛出类型错误。
正确批量封禁逻辑
- 遍历筛选得到的目标成员集合,取出每一个成员实例
- 对单个成员逐一调用
ban方法,推荐用Promise.all管理批量异步请求,也可以根据服务器规模调整为串行执行避免触发Discord API速率限制
修正后的核心代码片段
let target_word = args[0]; // 注意提前定义reason变量存储封禁原因 message.guild.members.fetch().then(fetchedMembers => { const target_users = fetchedMembers.filter(member => member.user.username.includes(target_word)) // 批量执行封禁 Promise.all(target_users.map(member => member.ban({ reason: reason }))) .then(() => console.log(`成功封禁 ${target_users.size} 个匹配关键词的用户`)) .catch(err => console.error('批量封禁过程出现错误:', err)) })
内容的提问来源于stack exchange,提问作者user16540688
相关产品推荐
相关产品推荐

