Bot将字符串返回到我没有指定的数字

时间:2017-10-10 23:47:16

标签: javascript node.js discord

制作不和谐机器人。获得“你赢了”不仅是6卷,还有2和4。我知道这不是最好的方法。它似乎并不关心 random =='insert string here'或random =='insert int here'。

//Dice Roll Game
bot.on('message', (message) =>{  

    let diceNum = ['1','2','3','4','5','6'];
    let random = diceNum[Math.floor(Math.random() * diceNum.length)];

    if(message.content == '!roll') {
        message.reply('You rolled a' + ' ' + random + '!');
    }

    if(random == 6){
        message.reply('You win!');
    }
});

1 个答案:

答案 0 :(得分:2)

我发现代码的主要问题是:

  
      
  1. 您没有将所有与骰子相关的代码放入if - 块中,检查消息是否为roll命令。

         
        
    • 即使未调用命令,这也会导致机器人在“滚动”数字为6 时进行回复。
    •   
  2.   
  3. 您没有检查消息是否来自机器人

         
        
    • 会多次回复,因为您没有检查消息是否来自您的机器人
    •   
  4.   

修复所有错误后,您的代码将如下所示:

//Dice Roll Game
bot.on('message', message => { // If theres only one parameter, you can omit brackets
    // Bot Check
    if(message.author.bot)return;

    // Even with useless parameters to the command, it will still run
    if(message.content.startsWith('!roll')) { 

        // Arrays are not needed

        // Gives a random int from 1 - 6, (~~) floors an integer 
        let random = ~~(Math.random() * 6) + 1; 

       message.reply(`You rolled a ${ random }!`); // ES6 Template Strings 

        // Please use strict equality signs to prevent bugs from appearing in your code
        if(random === 6){
            message.reply('You win!');
        }
    }

});

附注:如果您不希望在机器人消息之前提及,请使用message.channel.send代替message.reply

Discord.js Docs