【发布时间】: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