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

Discord机器人JS代码运行报错Cannot send messages to this user如何解决

报错产生原因
  • 核心触发原因:你调用msg.author.send()向用户发私信时,用户侧限制了私信接收:要么关闭了当前服务器的私信接收权限,要么拉黑了机器人,要么用户账号处于异常状态无法接收消息,Discord API拒绝了发信请求返回错误。
  • 代码本身存在语法错误:第一个MessageEmbed实例的addField方法调用不合法,你写的.addField("Unchecked)存在符号不匹配、参数缺失的问题,addField要求至少传入字段名称、字段值两个必填参数,同时引号/反引号需要正确闭合,该语法问题也可能导致对象生成异常,触发发信失败。
  • 缺少Promise错误捕获逻辑:msg.author.send()是异步方法返回Promise,你没有添加catch回调处理reject情况,所以错误抛出后变成未处理的Promise拒绝报错。
可行修复方案
  1. 先修正Embed的语法错误,补全addField的参数,闭合符号
  2. 给私信发送逻辑添加错误捕获,遇到无法发DM的情况做降级提示,避免未捕获报错
  3. 可以在降级提示里告知用户需要开启服务器私信权限后再重试

修复后的完整代码参考:

// 修正第一个Embed的语法错误
let embed = new Discord.MessageEmbed()
    .addField("DJ", `https://discord.gg/microsoft`)
    .addField("状态", "Unchecked") // 补全参数、闭合符号,可根据实际需求调整字段内容
    .setColor("#363940")
    .setTimestamp();

// 给send方法添加catch捕获错误
msg.author.send(embed)
.catch(err => {
    // 捕获到无法发DM的错误时,直接在频道提示用户
    msg.reply("无法向你发送私信,请检查你是否开启了本服务器的私信接收权限,且未拉黑机器人").then(m => {
        setTimeout(() => m.delete(), 15000);
    });
    return; // 出错时可中断后续逻辑,不需要的话可删除该行
});
        
let xd = new Discord.MessageEmbed()
    .setColor("#ff0000")
    .setTitle("CHECK YOUR DM")
    .setThumbnail("https://cdn.discordapp.com/attachments/773133136929226763/797204521997828106/777514274829893683.gif")
    .setFooter("DJ")
    .setTimestamp()
    .setDescription("I've sent you")

msg.reply(xd).then(m => {
    setTimeout(() => {
        m.delete();
    }, 900000);
});

cooldown.add(msg.author.id);
setTimeout(() => {
    cooldown.delete(msg.author.id);
}, config.COOLDOWN * 60 * 1000);

内容的提问来源于stack exchange,提问作者DJ18

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:54:08