Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

154
Views
Rock Paper Scissor Array Not Working Discord.js V12

I am trying to build an RPS game in my Discord bot. I want to add the functionality that if the word you choose does not exist in the list, it will return a message. This is my code so far:

async execute(message, args, cmd, client, Discord, profileData) {
  if (!args.length)
    return message.channel.send('To keep it fair, also send your pick!'); //If you don't
  //send a second
  //argument.

  const list = ['rock', 'paper', 'scissor']; // What the bot accepts.

  const rps = ['Rock! - โ›ฐ', 'Paper! - ๐Ÿ“„', 'Scissor! - โœ‚']; // Where the bot can
  // randomly pick from
  const random = rps[Math.floor(Math.random() * rps.length)];

  for (var i = 0; i < list.length; i++) {
    if (message.content.includes(list[i])) {
      // If it does exits,
      // just execute the
      // command.
      message.channel.send(random);
      break;
    } else {
      message.channel.send(`\`${args}\` is not a valid option.`); //Return if the
      //argument you are
      //sending does not exist
      //in the list.
      break;
    }
  }
},

I thought this would work, and already did many other variants of this one. But still, even though for example paper is in the list, it still sends me ".. is not a valid option". It only works with rock. So what I want here is that if you send anything other than the values inside the array, it returns.

To make it short, I have two questions:

  1. How can I fix this issue?
  2. If I capitalize the values in the list (Rock), will it still work if I send rock?

Here is the link to my problem: https://imgur.com/rhESIZM

about 4 years ago ยท Juan Pablo Isaza
1 answers
Answer question

0

You don't have to use a for loop. Instead of checking the whole message again, you only need to check the first argument (args[0]). You can simply use Array#includes and to make it case insensitive, convert this argument to lowercase. Your list already includes lowercase letters only, so the following will work:

async execute(message, args, cmd, client, Discord, profileData) {
  if (!args.length)
    return message.channel.send('To keep it fair, also send your pick!');

  const list = ['rock', 'paper', 'scissors'];
  const rps = ['Rock! - โ›ฐ', 'Paper! - ๐Ÿ“„', 'Scissors! - โœ‚'];
  const random = rps[Math.floor(Math.random() * rps.length)];

  if (!list.includes(args[0].toLowerCase())) {
    return message.channel.send(`\`${args[0]}\` is not a valid option.`);
  }
  // args[0] is valid
  message.channel.send(random);
},

enter image description here

about 4 years ago ยท Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
ยฉ 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!