Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

157
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda