【问题标题】:My Discord.js bot gets an error when trying to send DMs我的 Discord.js 机器人在尝试发送 DM 时出错
【发布时间】:2020-07-05 02:59:14
【问题描述】:

所以,从昨天开始,我的机器人无法在没有收到错误的情况下发送 DM。 它实际上将消息发送给用户的 DM,但它也会收到带有 .catch 的错误:

DiscordAPIError: Cannot send messages to this user
    at RequestHandler.execute (D:\Users\me\Discord\mybot\node_modules\discord.js\src\rest\RequestHandler.js:170:25)
    at processTicksAndRejections (internal/process/task_queues.js:97:5) {
  code: 50007,
  httpStatus: 400
}

我的机器人似乎没有被列入黑名单或任何可能导致此错误的类似内容。

这是发生错误时的同步(可能是问题,但我不知道如何)代码(我简化了它并删除了很多东西,但我仍然得到 400 Bad请求):

client.on('message', message => {
    message.member.user.send(message.content).catch(console.error);
})

我也试过message.author.sendmessage.member.send,同样的问题,我收到了DM,然后是错误。

【问题讨论】:

    标签: javascript discord.js


    【解决方案1】:

    您的代码不会检查消息作者是否是机器人。

    client.on('message', message => {
        message.member.user.send(message.content).catch(console.error);
    })
    

    因此,在机器人向您发送消息后,message 事件会检测到您在 DM(来自机器人)中收到的消息,并且机器人会尝试向自己发送消息。

    修复:

    client.on('message', message => {
        if (message.author.bot) return false // Checking if the message author is a bot.
        message.member.user.send(message.content).catch(console.error);
    })
    

    【讨论】:

    • 哇谢谢。多亏了你,我发现我的数据库存在问题,因为机器人在发送消息之前试图找到公会 ID,但不支持 DM 频道。我只需要检查消息通道是否不是 DM。使用那段代码:if (message.channel instanceof Discord.DMChannel) return;,这样它就不会“适得其反”。再次感谢;D
    猜你喜欢
    • 2020-06-29
    • 2021-10-12
    • 2020-09-14
    • 2019-09-10
    • 1970-01-01
    • 2022-01-10
    • 2021-05-04
    • 2021-03-03
    • 2021-06-13
    相关资源
    最近更新 更多