He estado trabajando en un bot de Discord. Necesitaba una solución para preguntas como esta: Who are you o who are you
Las oraciones anteriores pueden parecer similares, pero distinguen entre mayúsculas y minúsculas, y quiero que mi bot responda la misma respuesta a algunas preguntas similares como las que mostré anteriormente. Esto es lo que probé:
import Discord from 'discord.js' import { Client, Intents } from 'discord.js' const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES] }); client.on("ready", () => { console.log("Log In Successful!!") }) client.on("message", msg => { if (msg.content === 'hello', 'hey') { msg.reply("hi"); } }) client.login(process.env.TOKEN)Pero cuando lo ejecuto y escribo el comando, repite la respuesta varias veces.
¿Algunas ideas para arreglar esto?
La línea que está causando las múltiples respuestas es esta:
if (msg.content === 'hello', 'hey'){ Su sintaxis está un poco mal y el 'hey' no es parte de la declaración como usted quiere que sea. El 'hey' se evalúa como true , lo que activa el código de la declaración if por segunda vez.
Para solucionarlo, es posible que desee tener una serie de respuestas y verificar si el mensaje del usuario está en la matriz (tenga en cuenta que .toLowerCase() significa que no tiene que preocuparse por las letras mayúsculas):
greetings = ['hello', 'hey', 'hi'] if (greentings.indexOf(msg.content.toLowerCase()) > -1) { // the message is in the array - run your code here }Puede agrupar preguntas similares en una matriz y usar Array#includes para verificar si la pregunta está en esa matriz. También puede hacer que no distinga entre mayúsculas y minúsculas usando toLowerCase . Algo como esto:
client.on("message", (msg) => { const group = [ 'how are you', 'how you doin', 'you alright', ] if (group.includes(msg.content.toLowerCase())) { msg.reply('hi'); } })