Discord.js使用message.author实现成员自动封禁功能失败求助
Discord机器人封禁逻辑修复方案
现有代码的错误点
- API调用不匹配:discord.js v12及以上版本,
guild.members.get方法已废弃,需要调用guild.members.cache.get获取成员对象 - 参数类型错误:
get方法需要传入用户ID字符串,直接传message.author用户对象无法匹配到对应成员 - 异步逻辑未处理:
ban是异步Promise方法,直接调用不会等待执行完成,既无法捕获执行错误,也不能实现封禁成功后再发消息的需求 - 逻辑结构问题:未给if语句加花括号容易出现分支逻辑匹配错误,
message.content === message.content是恒成立的无效判断,可以直接删除 - 未过滤机器人自身消息:没有加机器人账号排除逻辑,可能出现机器人自己触发封禁规则的异常情况
修复后代码
// 注意:你的message事件回调函数需要加async关键字,示例:client.on('messageCreate', async message => { ... }) const targetChannelId = '替换为你指定的频道ID'; if (message.channel.id === targetChannelId && !message.author.bot) { try { const member = message.guild.members.cache.get(message.author.id); // 等待封禁操作执行完成 await member.ban({ reason: '自定义封禁原因' }); // 封禁成功后再发送指定消息 await message.channel.send('x'); } catch (err) { // 此处可添加自定义错误处理逻辑,比如打印错误日志 console.error('封禁执行失败:', err); } }
注意事项
- 必须确保机器人拥有
Ban Members服务器权限,同时机器人的角色层级要高于被封禁用户的角色层级,否则会触发权限不足报错 - discord.js v13、v14版本均可直接使用上述代码
- 必须给message事件的回调函数添加
async关键字,否则无法使用await调用异步方法
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

