Nart Abaza
Nart Abaza

Reputation: 7

Don't know how to change to lowercase in this scenario

I am trying to use the discord.js awaitMessages method but it doesn't seem to work with uppercase letters because my possible answers (triviacharacterslist.js) are all lowercase. I tried to convert this (in the code) but it doesn't seem to work.

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'
};

Upvotes: 0

Views: 87

Answers (2)

Zsolt Meszaros
Zsolt Meszaros

Reputation: 23169

The includes() method is case sensitive:

const str1 = 'kirito sword art online'
const str2 = 'Kirito sword art online'

console.log(str1.includes(str2))

You can use m.content.toLowerCase() in your filter to convert the user's answer to lowercase:

const filterK = m => possibleAnswers.some(answer => m.content.toLowerCase().includes(answer));

You could also simplify your switch statement and use Object.values to get an array of values in 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'));

Upvotes: 0

T. Dirks
T. Dirks

Reputation: 3676

I think @Zsolt had the right idea but the execution is a bit wrong. Since all your answers are already in lowercase, calling .toLowerCase() on an answer string won't do much. Instead, you need to call .toLowerCase() on the string content. See the example below:

const filterK = m => possibleAnswers.some(answer => m.content.toLowerCase().includes(answer));

Upvotes: 1

Related Questions