具有多个单词的命令的Javascript Discord机器人

时间:2020-01-28 21:27:22

标签: javascript discord discord.js

所以我有一段这样的代码。

case 'trait':
        if (args[1] === 'aerobic'){
            const embed = new RichEmbed()
            .setTitle('Aerobic')    
            .addField('Effect','When attacking with Window, gets SPDEF - and SPD +.')
            .addField('Temtem that can have this trait', 'Volarend')
            message.channel.send(embed); 
        }else if (args[1]  === 'air specialist'){
            const embed = new RichEmbed()
            .setTitle('Air specialist')
            .addField('Effect','+15% damage with Wind techniques.')
            .addField('Temtem that can have this trait', 'Saku, Barnshe, Zebhyruff')
            message.channel.send(embed);
        }else {
            message.channel.sendMessage('Invalid trait (use "-" instaed of space, when using two word trait)')
             }
        break;

第一个“ if”按预期工作,但是我对第二个有疑问,因为它有两个单词。我想像这样在Discord上使用此命令

!trait air specialist

代码的开始看起来像这样,但不包括令牌,前缀等:

    bot.on('ready', () => {
    console.log('This bot is online!');
})

bot.on('message', message=>{

    const args = message.content.toLowerCase().slice(PREFIX.length).trim().split(/ +/);

谢谢。

2 个答案:

答案 0 :(得分:0)

问题是您的邮件被拆分,因此args[1]中的两个单词不是全部。 args[1]是“空气”,args[2]是“专家”。

您可以通过以下方式解决此问题:更改消息的拆分方式,使它们位于同一字符串中;或者,如果需要拆分,可以查看多个参数以输入else if语句。

例如,您的消息可能会像这样拆分:

const args = message.content.toLowerCase().slice(PREFIX.length).trim().split(/ (.*)/);

或者您可以通过以下方式输入if语句:

else if (args[1]  === 'air' && args[2] === 'specialist') { ... }

答案 1 :(得分:0)

如果只希望在命令中包含一个条件参数,则一种解决方案是使用串联重新组合它们。不过,这仅在您期望该命令和一个参数的情况下才有效,如果您想为单个命令使用2个或更多参数,则有点复杂。

case 'trait':
    // We should always have the first one 
    // but you should error check this first.
    let combinedArgs = args[1];

    for(let i = 2; i < args.length; i++)
    {
        combinedArgs += " " + args[i];
    }

    if (combinedArgs === 'aerobic'){

    ... and so on