两个 if 语句使 cmd 区分角色

Two if statements to make cmd differentiate between roles

我想知道是否可以这样使用 if 语句,以便命令根据用户角色提供单独的消息。这是我所做的一次尝试,但无法访问第二个 if 语句。


module.exports = {
    name: "train",
    description: "Train to earn some reputation!",
    async execute(client, message, args, cmd, discord, profileData) {

        const events1 = [
            "sample event",
            "sample event",
            "sample event",
        ];

        const events2 = [
            "sample event",
            "sample event",
            "sample event",
        ];

        const injuries = [
            "sample injury",
            "sample injury",
            "sample injury",
        ];

        const chosenEvent1 = events1.sort(() => Math.random() - Math.random()).slice(0, 1);
        const chosenEvent2 = events2.sort(() => Math.random() - Math.random()).slice(0, 1);
        const chosenInjury = injuries.sort(() => Math.random() - Math.random()).slice(0, 1);

        const randomNumber1 = Math.floor(Math.random() * 29) + 5;
        const randomNumber2 = Math.floor(Math.random() * 9) + 1;

        if((!message.member.roles.cache.has('roleid#1'))); {
            if(Math.floor(Math.random() * 3) === 0) {
                await profileModel.findOneAndUpdate(
                    {
                        userID: message.author.id,
                    },
                    {
                        $inc: {
                        health: -randomNumber2,
                    },
                    }
                );
            return message.channel.send(`${chosenInjury} You lost ${randomNumber2} health and gained no reputation.`);
                } else {
                await profileModel.findOneAndUpdate(
                    {
                    userID: message.author.id,
                }, 
                {
                    $inc: {
                    reputation: randomNumber1,
                },
                }
            );
            return message.channel.send(`${chosenEvent1} You earned ${randomNumber1} reputation!`);
            }
        if((!message.member.roles.cache.has('roleid#2'))); {
            return message.channel.send(`${chosenEvent2} You earned ${randomNumber1} reputation!`);
        }
    }}
};

所以理想情况下,如果您的 RoleID #1,您就有可能受伤或声望增加,并且您会收到带有 Event1 提示的消息。如果您的 RoleID #2,您的声望只会增加,您会收到一条带有 Event2 提示的消息。我希望这是清楚的。

似乎括号有点偏了,这就是代码无法访问的原因。

我还附上了我进行代码更改的位置的图像。一个关键的考虑是 javascript 尽量避免在 if 语句之后放置分号

请查看我在您的代码示例中所做的小括号更改:

module.exports = {
name: 'train',
description: 'Train to earn some reputation!',
async execute(client, message, args, cmd, discord, profileData) {
    const events1 = ['sample event', 'sample event', 'sample event'];

    const events2 = ['sample event', 'sample event', 'sample event'];

    const injuries = ['sample injury', 'sample injury', 'sample injury'];

    const chosenEvent1 = events1.sort(() => Math.random() - Math.random()).slice(0, 1);
    const chosenEvent2 = events2.sort(() => Math.random() - Math.random()).slice(0, 1);
    const chosenInjury = injuries.sort(() => Math.random() - Math.random()).slice(0, 1);

    const randomNumber1 = Math.floor(Math.random() * 29) + 5;
    const randomNumber2 = Math.floor(Math.random() * 9) + 1;

    if (!message.member.roles.cache.has('roleid#1')) {
        if (Math.floor(Math.random() * 3) === 0) {
            await profileModel.findOneAndUpdate(
                {
                    userID: message.author.id,
                },
                {
                    $inc: {
                        health: -randomNumber2,
                    },
                }
            );
            return message.channel.send(
                `${chosenInjury} You lost ${randomNumber2} health and gained no reputation.`
            );
        } else {
            await profileModel.findOneAndUpdate(
                {
                    userID: message.author.id,
                },
                {
                    $inc: {
                        reputation: randomNumber1,
                    },
                }
            );
            return message.channel.send(`${chosenEvent1} You earned ${randomNumber1} reputation!`);
        }
    } else if (!message.member.roles.cache.has('roleid#2')) {
        return message.channel.send(`${chosenEvent2} You earned ${randomNumber1} reputation!`);
    }
},
};