Discord机器人运行hack恶搞命令发DM时报Cannot send messages to this user错误
错误原因
- 服务器隐私配置限制:即使用户个人全局开放了私信权限,若用户在命令触发的对应服务器中关闭了「允许来自此服务器成员的私信」选项,机器人作为服务器内的实体也无法向其发送私信。
- 机器人被触发用户拉黑:若触发命令的用户主动拉黑了该机器人账号,所有私信发送请求都会被Discord API直接拒绝。
- 网关意图配置缺失:使用discord.js v13及以上版本时,若未在Discord开发者后台开启
GUILD_MEMBERS等相关网关意图,会导致用户对象操作受限,无法正常发起私信。 - Discord API防滥用限制:新注册的机器人账号、短时间内大量发送私信的账号会被Discord临时限制私信发送能力,属于平台反垃圾消息的常规限制。
- 代码上下文对象异常:确认代码上下文里的
msg.author为有效用户对象,若之前的异步逻辑未正确处理消息对象,可能出现属性缺失导致发送失败。
修复方案
- 补充降级兜底逻辑,私信发送失败时自动 fallback 到当前频道发送仅触发用户可见的临时消息,参考代码如下:
msg.author.send(`Name:${taggedUser.username}, ID:${taggedUser.id} IP Address:${response}`) .catch(err => { console.error(err) // 私信失败时发送临时提示 msg.reply({ content: "无法向你发送私信,请检查当前服务器的私信权限设置后重试", ephemeral: true }) })
- 引导触发命令的用户检查对应服务器的私信设置:路径为
服务器设置 → 隐私设置 → 允许来自服务器成员的私信,打开该开关即可正常接收机器人私信。 - 检查Discord开发者后台的机器人配置,确认已经开启
GUILDS、GUILD_MEMBERS、GUILD_MESSAGES等必要的网关意图,符合新版本discord.js的权限要求。 - 控制机器人私信发送频率,短时间内不要批量发起私信请求,避免触发平台防滥用限制导致功能被冻结。
内容的提问来源于stack exchange,提问作者lelbro420
相关产品推荐
相关产品推荐

