在这种情况下不知道如何更改为小写
Don't know how to change to lowercase in this scenario
我正在尝试使用 discord.js awaitMessages
方法,但它似乎不适用于大写字母,因为我可能的答案 (triviacharacterslist.js
) 都是小写字母。我试图转换它(在代码中),但它似乎不起作用。
triviachar.js
:
const iKF = Characters.KiritoVariants;
const possibleAnswers = [iKF.kirito0, iKF.kirito1, iKF.kirito2, iKF.kirito3, iKF.kirito4, iKF.kirito5, iKF.kirito6, iKF.kirito7, iKF.kirito8];
const triviaKiritoEmbed = new MessageEmbed()
.setColor('#008fff')
.setTitle(guessCharacterString)
.setImage(Characters.CharacterImgs.kiritoimg)
msg.channel.send(triviaKiritoEmbed)
const filterK = m => possibleAnswers.some(answer => m.content.includes(answer));
msg.channel.awaitMessages(filterK, { max: 1, time: 15000, errors: ['time'] })
.then(collected => {switch(collected.first().content.toLowerCase()){
case Characters.KiritoVariants.kirito0:
msg.channel.send(fivePoint);
break;
case Characters.KiritoVariants.kirito3:
msg.channel.send(fivePoint);
break;
case Characters.KiritoVariants.kirito6:
msg.channel.send(fivePoint);
break;
case Characters.KiritoVariants.kirito1:
msg.channel.send(tenPoint);
break;
case Characters.KiritoVariants.kirito2:
msg.channel.send(tenPoint);
break;
case Characters.KiritoVariants.kirito4:
msg.channel.send(tenPoint);
break;
case Characters.KiritoVariants.kirito5:
msg.channel.send(tenPoint);
break;
case Characters.KiritoVariants.kirito7:
msg.channel.send(tenPoint);
break;
case Characters.KiritoVariants.kirito8:
msg.channel.send(tenPoint);
break;
}})
.catch(collected => msg.channel.send('too bad u took too long ya 3am'));
}
triviacharacterslist.js
:
//character names ---------------------------------------------------------------------------------------------------------------
const KiritoVariants = {
kirito0: 'kirito',
kirito1: 'kirito sao',
kirito2: 'kirito sword art online',
kirito3: 'kazuto',
kirito4: 'kazuto sao',
kirito5: 'kazuto sword art online',
kirito6: 'kazuto kirigaya',
kirito7: 'kazuto kirigaya sao',
kirito8: 'kazuto kirigaya sword art online'
};
includes()
方法区分大小写:
const str1 = 'kirito sword art online'
const str2 = 'Kirito sword art online'
console.log(str1.includes(str2))
您可以在过滤器中使用 m.content.toLowerCase()
将用户的答案转换为小写:
const filterK = m => possibleAnswers.some(answer => m.content.toLowerCase().includes(answer));
您还可以简化 switch 语句并使用 Object.values
获取 possibleAnswers
中的值数组:
const possibleAnswers = Object.values(Characters.KiritoVariants);
const triviaKiritoEmbed = new MessageEmbed()
.setColor('#008fff')
.setTitle(guessCharacterString)
.setImage(Characters.CharacterImgs.kiritoimg);
msg.channel.send(triviaKiritoEmbed);
const filterK = (m) =>
possibleAnswers.some((answer) => m.content.toLowerCase().includes(answer));
msg.channel
.awaitMessages(filterK, { max: 1, time: 15000, errors: ['time'] })
.then((collected) => {
switch (collected.first().content.toLowerCase()) {
case Characters.KiritoVariants.kirito0:
case Characters.KiritoVariants.kirito3:
case Characters.KiritoVariants.kirito6:
msg.channel.send(fivePoint);
break;
case Characters.KiritoVariants.kirito1:
case Characters.KiritoVariants.kirito2:
case Characters.KiritoVariants.kirito4:
case Characters.KiritoVariants.kirito5:
case Characters.KiritoVariants.kirito7:
case Characters.KiritoVariants.kirito8:
msg.channel.send(tenPoint);
break;
}
})
.catch((collected) => msg.channel.send('too bad u took too long ya 3am'));
我觉得@Zsolt的想法是对的,但是执行起来有点不对。由于您所有的答案都已经是小写的,因此在答案字符串上调用 .toLowerCase()
不会有太大作用。相反,您需要对字符串内容调用 .toLowerCase()
。请参阅以下示例:
const filterK = m => possibleAnswers.some(answer => m.content.toLowerCase().includes(answer));
我正在尝试使用 discord.js awaitMessages
方法,但它似乎不适用于大写字母,因为我可能的答案 (triviacharacterslist.js
) 都是小写字母。我试图转换它(在代码中),但它似乎不起作用。
triviachar.js
:
const iKF = Characters.KiritoVariants;
const possibleAnswers = [iKF.kirito0, iKF.kirito1, iKF.kirito2, iKF.kirito3, iKF.kirito4, iKF.kirito5, iKF.kirito6, iKF.kirito7, iKF.kirito8];
const triviaKiritoEmbed = new MessageEmbed()
.setColor('#008fff')
.setTitle(guessCharacterString)
.setImage(Characters.CharacterImgs.kiritoimg)
msg.channel.send(triviaKiritoEmbed)
const filterK = m => possibleAnswers.some(answer => m.content.includes(answer));
msg.channel.awaitMessages(filterK, { max: 1, time: 15000, errors: ['time'] })
.then(collected => {switch(collected.first().content.toLowerCase()){
case Characters.KiritoVariants.kirito0:
msg.channel.send(fivePoint);
break;
case Characters.KiritoVariants.kirito3:
msg.channel.send(fivePoint);
break;
case Characters.KiritoVariants.kirito6:
msg.channel.send(fivePoint);
break;
case Characters.KiritoVariants.kirito1:
msg.channel.send(tenPoint);
break;
case Characters.KiritoVariants.kirito2:
msg.channel.send(tenPoint);
break;
case Characters.KiritoVariants.kirito4:
msg.channel.send(tenPoint);
break;
case Characters.KiritoVariants.kirito5:
msg.channel.send(tenPoint);
break;
case Characters.KiritoVariants.kirito7:
msg.channel.send(tenPoint);
break;
case Characters.KiritoVariants.kirito8:
msg.channel.send(tenPoint);
break;
}})
.catch(collected => msg.channel.send('too bad u took too long ya 3am'));
}
triviacharacterslist.js
:
//character names ---------------------------------------------------------------------------------------------------------------
const KiritoVariants = {
kirito0: 'kirito',
kirito1: 'kirito sao',
kirito2: 'kirito sword art online',
kirito3: 'kazuto',
kirito4: 'kazuto sao',
kirito5: 'kazuto sword art online',
kirito6: 'kazuto kirigaya',
kirito7: 'kazuto kirigaya sao',
kirito8: 'kazuto kirigaya sword art online'
};
includes()
方法区分大小写:
const str1 = 'kirito sword art online'
const str2 = 'Kirito sword art online'
console.log(str1.includes(str2))
您可以在过滤器中使用 m.content.toLowerCase()
将用户的答案转换为小写:
const filterK = m => possibleAnswers.some(answer => m.content.toLowerCase().includes(answer));
您还可以简化 switch 语句并使用 Object.values
获取 possibleAnswers
中的值数组:
const possibleAnswers = Object.values(Characters.KiritoVariants);
const triviaKiritoEmbed = new MessageEmbed()
.setColor('#008fff')
.setTitle(guessCharacterString)
.setImage(Characters.CharacterImgs.kiritoimg);
msg.channel.send(triviaKiritoEmbed);
const filterK = (m) =>
possibleAnswers.some((answer) => m.content.toLowerCase().includes(answer));
msg.channel
.awaitMessages(filterK, { max: 1, time: 15000, errors: ['time'] })
.then((collected) => {
switch (collected.first().content.toLowerCase()) {
case Characters.KiritoVariants.kirito0:
case Characters.KiritoVariants.kirito3:
case Characters.KiritoVariants.kirito6:
msg.channel.send(fivePoint);
break;
case Characters.KiritoVariants.kirito1:
case Characters.KiritoVariants.kirito2:
case Characters.KiritoVariants.kirito4:
case Characters.KiritoVariants.kirito5:
case Characters.KiritoVariants.kirito7:
case Characters.KiritoVariants.kirito8:
msg.channel.send(tenPoint);
break;
}
})
.catch((collected) => msg.channel.send('too bad u took too long ya 3am'));
我觉得@Zsolt的想法是对的,但是执行起来有点不对。由于您所有的答案都已经是小写的,因此在答案字符串上调用 .toLowerCase()
不会有太大作用。相反,您需要对字符串内容调用 .toLowerCase()
。请参阅以下示例:
const filterK = m => possibleAnswers.some(answer => m.content.toLowerCase().includes(answer));