【问题标题】:Catching an permission error problem discord.js?捕获权限错误问题 discord.js?
【发布时间】:2021-08-31 22:57:08
【问题描述】:

我在尝试捕获错误时遇到问题。我要捕获的错误是 403 discord Missing Permission 错误。然而,当错误发生时,它导致我的机器人离线,而不是捕获错误。

这是我试图发现我的错误的方法。

module.exports = new Command({
name: 'ban',
usage: 'ban <member>',
description: 'Bans a member from the server.',
permission: "BAN_MEMBERS",
async run(message, args, client) {
    const member = message.mentions.users.first()

    if (!member) {
        return message.channel.send("A member argument must be given. Example: `ban [@member]`");
    }

    if (member) {
        try {
            message.guild.members.ban(member)
            message.channel.send(`${member.tag} was banned!`);
        } catch { //this is the line where error isn't caught? 
            message.channel.send(`I do not have permissions to ban ${member.username}`);
        }
    } else {
        message.channel.send(`You do not have permissions to ban ${member.username}`);
}
}


})

帮助表示赞赏。

【问题讨论】:

    标签: javascript node.js discord.js


    【解决方案1】:

    TextChannel.send()GuildMemberManager.ban() 返回一个 Promise,这意味着它们是异步的。

    在您的async 函数中,您没有await 执行这些调用,因此它们不会捕获任何错误,并且稍后会抛出错误。

    要解决此问题,您可以:

    • 使用await:
      try {
        await message.guild.members.ban(member);
        await message.channel.send(`${member.id} was banned!`);
      } catch(err) {
        // handle errors
      }
      
    • 添加.catch():
      message.guild.members.ban(member).catch((err) => {/* handle error */});
      message.channel.send(`${member.id} was banned!`).catch((err) => {/* handle error */});
      

    还应注意,如果您在捕获错误后决定向频道发送消息,如果机器人没有发送消息的权限,它可能会引发另一个错误,因此您也应该在那里捕获错误。

    【讨论】:

      猜你喜欢
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      • 1970-01-01
      • 2019-05-04
      • 1970-01-01
      • 2019-10-29
      相关资源
      最近更新 更多