你如何使它不’;如果角色不正确,请不要给出错误?Discord.js

你如何使它不’;如果角色不正确,请不要给出错误?Discord.js,discord.js,Discord.js,我正在为我的机器人制作一个addrole命令,但是每当有人得到一个错误的角色时,它就会给出一个错误。我不知道怎么修,所以请帮忙 代码: 现在,您可能会想‘如果角色有两个词怎么办’,我正在处理这个问题,我只需要帮助,这样,如果角色不存在,它不会给出错误,它只会发送‘角色未找到’。请帮帮我,谢谢。抱歉,缺少详细信息,不知道还需要添加什么。.message.guild.roles.cache.find将返回一个承诺,因此您需要在访问角色之前处理该承诺。这样做的一种方法是使用。然后和。接球 messag

我正在为我的机器人制作一个addrole命令,但是每当有人得到一个错误的角色时,它就会给出一个错误。我不知道怎么修,所以请帮忙

代码:


现在,您可能会想‘如果角色有两个词怎么办’,我正在处理这个问题,我只需要帮助,这样,如果角色不存在,它不会给出错误,它只会发送‘角色未找到’。请帮帮我,谢谢。抱歉,缺少详细信息,不知道还需要添加什么。

.message.guild.roles.cache.find将返回一个承诺,因此您需要在访问角色之前处理该承诺。这样做的一种方法是使用。然后和。接球

message.guild.roles.cache.find(role => role.name === suggestedRole)
.then((role)=>{
//what to do if the role does exist using the role parameter

}).catch(()=>{
//what to do if the role does not exist, in your case, 
message.channel.send(‘Role does not exist!’)
})

我们之所以需要这样做,是因为正如我所说,cache.find()将返回一个承诺。一个承诺可以被履行,也可以被拒绝。如果您正在搜索的角色不存在,您将收到未经处理的承诺拒绝,在某些情况下可能导致程序崩溃。为了阻止这种情况,我们需要考虑你的承诺可能处于的不同状态。我们用。然后。接住。如果您的承诺得到履行,则调用.then块。如果被拒绝,则调用.catch块。使用.catch块,您的代码现在知道如果遇到错误该怎么办,在本例中,我们告诉它发送一条消息,说“未找到角色”。我希望这段代码有助于您理解承诺背后的一些重要概念。message.guild.roles.cache.find将返回一个承诺,因此您需要在访问角色之前处理该承诺。这样做的一种方法是使用。然后和。接球

message.guild.roles.cache.find(role => role.name === suggestedRole)
.then((role)=>{
//what to do if the role does exist using the role parameter

}).catch(()=>{
//what to do if the role does not exist, in your case, 
message.channel.send(‘Role does not exist!’)
})

我们之所以需要这样做,是因为正如我所说,cache.find()将返回一个承诺。一个承诺可以被履行,也可以被拒绝。如果您正在搜索的角色不存在,您将收到未经处理的承诺拒绝,在某些情况下可能导致程序崩溃。为了阻止这种情况,我们需要考虑你的承诺可能处于的不同状态。我们用。然后。接住。如果您的承诺得到履行,则调用.then块。如果被拒绝,则调用.catch块。使用.catch块,您的代码现在知道如果遇到错误该怎么办,在本例中,我们告诉它发送一条消息,说“未找到角色”。我希望这段代码能够帮助您理解承诺背后的一些重要概念。

您实际上可以使用try-catch,这对于不熟悉承诺的人来说可能会简单得多。那看起来像

try{
    //will attempt to run the code in this try block
    const target = message.mentions.members.first() // target 
    if(!target) message.channel.send(‘User not found!’) // if no target 
    target.roles.add(role) // adds the role to the target
} catch {
    //will run if an error occurs in the try block
    message.channel.send(‘Role does not exist!’)
}

这与我的另一个解决方案的工作原理基本相同,但有点不同。我不会像上次那样深入解释它,因此,这里有一个关于try-catch块及其作用的简单解释:。

您实际上可以使用try-catch,对于不熟悉承诺的人来说,这可能会简单得多。那看起来像

try{
    //will attempt to run the code in this try block
    const target = message.mentions.members.first() // target 
    if(!target) message.channel.send(‘User not found!’) // if no target 
    target.roles.add(role) // adds the role to the target
} catch {
    //will run if an error occurs in the try block
    message.channel.send(‘Role does not exist!’)
}

这与我的另一个解决方案的工作原理基本相同,但有点不同。我不会像上次那样深入解释它,因此,这里有一个关于try-catch块及其作用的简单解释:。

此代码将检查角色是否存在,如果不存在,则发送错误消息,如果存在,则将角色添加到成员,并在发生错误时发送“无法添加角色”

const role = message.guild.roles.cache.find(role => role.name === 'roleName');
if(!role) return message.channel.send('Role not found.')
const member = message.member;
member.roles.add(role).catch(() => { message.channel.send('Can\'t add role.') });

此代码将检查角色是否存在,如果不存在,则发送错误消息,如果存在,则将角色添加到成员中,并在出现错误时发送“无法添加角色”

const role = message.guild.roles.cache.find(role => role.name === 'roleName');
if(!role) return message.channel.send('Role not found.')
const member = message.member;
member.roles.add(role).catch(() => { message.channel.send('Can\'t add role.') });