所以我有一段这样的代码。
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(/ +/);
谢谢。
答案 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