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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:15:04