如何避免一次发送两个命令?

时间:2017-03-23 22:14:00

标签: javascript bots discord

我正在创建一个不和谐机器人,其部分命令是掷骰子的不同值(d6,d10,d20,d100)。我已经这样设置了:

const Discord = require('discord.js');
const client = new Discord.Client();

function commandIs (str, msg){
    return msg.content.toLowerCase().startsWith("!" + str)
} //Function that shortens all response commands.

client.on ('message', message => {
  if(commandIs("rolld6", message)){
    var result = Math.floor(Math.random() * ((6 - 1) + 1) + 1); 
    message.channel.sendMessage (result);
  } //rolls a d6

  if(commandIs("rolld10", message)){
    var result = Math.floor(Math.random() * ((10 - 1) + 1) + 1); 
    message.channel.sendMessage (result);
  } //rolls a d10

  if(commandIs("rolld20", message)){
    var result = Math.floor(Math.random() * ((20 - 1) + 1) + 1); 
    message.channel.sendMessage (result);
  } //rolls a d20

  if(commandIs("rolld100", message)){
    var result = Math.floor(Math.random() * ((100 - 1) + 1) + 1); 
    message.channel.sendMessage (result);
  } //rolls a d100

})   
client.login('<Discord bot token>'); //Bot token so it can login to Discord

我遇到的问题是当我发送&#39;!rolld100&#39;时,机器人的答案就好像我发送了&#39;!rolld10&#39;和&#39;!rolld100&#39;同时,因为10是100。

任何可能的修复方法?我也是javascript的新手,所以如果你能解释一下你的解决方案是什么,那对我有很大帮助。

1 个答案:

答案 0 :(得分:0)

代码似乎有点复杂,重复的代码。您可以使用正则表达式

将其简化为几行代码
const Discord = require('discord.js');
const client = new Discord.Client();

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

  const rollMatch = message.match(/roll(\d+)\s/)
  if (rollMatch) {
    const sides = Number(rollMatch)
    var result = Math.floor(Math.random() * sides + 1); 
    message.channel.sendMessage (result);
  } 

})   
client.login('<Discord bot token>'); //Bot token so it can login to Discord

现在,如果你想按自己的方式去做。你基本上需要做

if(commandIs("rolld100", message)){ }
else if(commandIs("rolld10", message)){ }
else if(commandIs("rolld20", message)){ }
else if(commandIs("rolld6", message)){ }