【问题标题】:How can I avoid sending two commands at once?如何避免一次发送两个命令?
【发布时间】:2017-08-16 17:04:20
【问题描述】:

我正在创建一个不和谐机器人,它的部分命令是用不同的值(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

我遇到的问题是,当我发送 '!rolld100' 时,机器人的回答好像我同时发送了 '!rolld10' 和 '!rolld100',因为 10 是 100。

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

【问题讨论】:

  • 如果您将rolld100 命令移到rolld10 命令之前,它将在匹配10 之前匹配100。
  • startsWith 似乎是一个糟糕的选择。那么寄回的是什么?邮件内容是什么?
  • @forrestmid 和 OP 需要使用 else if
  • @epascarello 绝对正确,因为如果您不返回函数或使用else if 语句,它将匹配rolld100 之后的rolld10
  • 感谢您的回答。 @epascarello,函数的消息部分中的内容可能是用户在命令部分之后发送的任何内容,如果我删除它,我很确定代码将无法正常工作。我应该使用什么来代替 startWith?

标签: javascript bots discord


【解决方案1】:

代码似乎有点复杂,有重复的代码。您可以使用正则表达式将其简化为几行代码

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)){ }

【讨论】:

  • 感谢替代代码!我会看看我能不能让它工作。
  • 你会用你的通用代码向机器人发送什么命令?
  • 当我尝试使用你的代码时,它说'rollMatch'行的第一个正斜杠上有一个无效的表达式。
  • 不知何故,结尾的 / 不见了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 2011-01-11
相关资源
最近更新 更多