【问题标题】:Discord.js trying to DM a user when they get bannedDiscord.js 试图在用户被禁止时向他们发送消息
【发布时间】:2020-10-15 03:40:24
【问题描述】:

您好,当我的 discord 机器人被禁止时,我正在尝试向他们发送消息,但每次我禁止用户时,日志中都会出现此消息:

2020-06-24T18:55:42.825881+00:00 app[worker.1]: Unhandled promise rejection: DiscordAPIError: Cannot send messages to this user

2020-06-24T18:55:42.825916+00:00 app[worker.1]:     at RequestHandler.execute (/app/node_modules/discord.js/src/rest/RequestHandler.js:170:25)

2020-06-24T18:55:42.825918+00:00 app[worker.1]:     at processTicksAndRejections (internal/process/task_queues.js:97:5) {

2020-06-24T18:55:42.825918+00:00 app[worker.1]:   method: 'post',

2020-06-24T18:55:42.825919+00:00 app[worker.1]:   path: '/channels/725422295631396876/messages',

2020-06-24T18:55:42.825920+00:00 app[worker.1]:   code: 50007,

2020-06-24T18:55:42.825921+00:00 app[worker.1]:   httpStatus: 403

2020-06-24T18:55:42.825921+00:00 app[worker.1]: }

目前这是我的代码:

module.exports = {
    name: 'ban',
    description: 'Bans a member.',
    usage: '[mention]',
    guildOnly: true,
    execute(message, args) {
        if (message.member.hasPermission('BAN_MEMBERS')) {
            const user = message.mentions.users.first();

            if (user) {
                const member = message.guild.member(user);
                if (member) {
                    user.send("You we're banned from Jakooobs Cat House!")
                  member
                    .ban({
                      reason: 'BANNED!',
                    })
                    .then(() => {
                      message.reply(`Successfully banned ${user.tag}`);
                    })
                    .catch(err => {
                      message.reply('I was unable to ban the member');
                      console.error(err);
                    });
                } else {
                  message.reply("That user isn't in this guild!");
                }
              } else {
                message.reply("You didn't mention the user to ban!");
              }
            }
          
        else {
            message.reply('you don\'t have permission to ban members!')
        }
    },
};

我在网上查了,但没有找到任何东西,所以如果有人知道,请回复谢谢。

【问题讨论】:

    标签: discord.js


    【解决方案1】:

    member.send() 是一种异步方法,因此它不会等待发送消息然后禁止,因此您可以使用 await 或 .then,因为您已经在使用 .then 您也可以像这样链接承诺所以:

    if (member) {
        user.send("You we're banned from Jakooobs Cat House!")
            //incase bot can't dm user
            .catch(() => message.reply("Unable to send message to user"))
            .then(() => member.ban({ reason: "BANNED!" }))
            .then(() => message.reply(`Successfully banned ${user.tag}`))
            .catch(err => {
                message.reply('I was unable to ban the member');
                console.error(err);
            });
    }
    

    【讨论】:

    • 您应该在user.send() 添加一个.catch。根据用户的隐私设置,它可能会返回错误。
    • 要注意的关键是它返回了 Promise,所以如果 Promise 拒绝,那么它将返回拒绝,它会转到我最后的 catch 块。因此user.sendmember.banmessage.reply 都将被单个 catch 块覆盖
    • 但是由于一个单独的 catch 块涵盖了所有的承诺,如果它在 user.send 上失败,那么它不会到达实际上禁止该成员的 .then,将编辑答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 2021-05-17
    • 2021-02-08
    • 1970-01-01
    • 2019-10-09
    • 2020-10-08
    • 2021-08-27
    相关资源
    最近更新 更多