UNPKG

death-hangman

Version:

Un módulo dedicado a bots de discord para jugar ahorcado/hangman

155 lines (111 loc) 6.41 kB
# death-hangman > Un módulo dedicado a bots de discord para jugar ahorcado/hangman ### Support & suggestions > * [Deathh.#9943](https://www.youtube.com/watch?v=Aq5WXmQQooo) > * [Hotarubi#9126](https://www.youtube.com/watch?v=4BSJAAo1uNY) # Hangman class ## Constructor ```javascript new Hangman(text, {jugadores, lowerCase, lives, findWords, findWholeText}); ``` ### PARÁMETROS: * **text**: String con la frase del juego **OPCIONES:** * **jugadores**: Array con las ID's de los jugadores del juego actual * **lowerCase**: Boolean, true para que las letras maýusculas en la frase sean descubiertas con minúsculas y visceversa, false para restringir que las mayúsculas se encuentren con letras mayúsculas, y las minúsculas con minúsculas > *Default: true* * **lives**: Number, número de intentos antes de que el juego se pierda automáticamente > *Default: 7* * **findWords**: Boolean, true para poder encontrar palabras completas > *Default: false* * **findWholeText**: Boolean, true para poder encontrar todo el texto oculto > *Default: false* **EVENTOS:** * **end**: > **Retorna:** Objeto con la configuración del juego actual ```javascript //Configuración del juego actual: game: { word: String, //La frase definida en los parámetros del juego jugadores: Array, //El array con las ID's de los jugadores definidos en las opciones lowerCase: Boolean, //true si las letras mayusculas pueden ser descubiertas con las minúsculas y visceversa lives: Number, //Numero de intentos restantes turn: String, //String con la ID del jugador del turno actual, (las ID's se especifican en la opción jugadores) ascii: Array, //Array con el juego ascii: ['_','_','_'] chars: { used: Array, //Array con todas las letras que se han usado en el juego actual wrong: Array, //Array con las letras que ya estaban puestas o que no se encontraban en la frase (puede ser usado para evitar que repitan letras, dándole uso en el colector) }, step: Number, //Número de intentos de adivinanzas que se han ejecutado ended: Boolean, //true si el juego ya ha acabado, de lo contrario false winned: Boolean, //true si se descubrió la palabra por completo, de lo contrario false lastTurn: String, //String con la ID del jugador del último turno } ``` ### PROPIEDADES * **game**: Objeto con la configuración del juego actual (especificado arriba) * **players**: Lista de los siguientes turnos en la cola ### MÉTODOS * **find**: Busca la letra especificada como parámetro * **texto**: El texto a buscar en la frase * **nextTurn**: Salta al siguiente turno * **player**: Si un jugador es especificado, salta toda la cola hasta su turno * **removePlayer**: Elimina un jugador especificado en la partida actual * **ascii**: Retorna un array con el juego ascii ### EJEMPLO HANGMAN: ```javascript //Ejemplo usando el módulo discord.js v13 const Hangman = require('death-hangman') const menciones = message.mentions.users.map(x => x.id) if (!menciones.length) return message.channel.send('Tienes que mencionar mínimo a una persona!') if (menciones.includes(message.author.id)) return message.channel.send('No te puedes mencionar a ti mismo!') if (message.mentions.users.map(x => x.bot).some(x => x)) return message.channel.send('No puedes mencionar a un bot!') const jugadores = [message.author.id, ...menciones] //Array de jugadores donde el primer elemento es el autor del mensaje //*Nota:* El elemento 0 del array jugadores es el que elige la frase! const canal = await message.author.createDM() //Puedes definir un canal a donde se le preguntará la palabra al usuario canal.send('Elige tu palabra') let palabra; await canal.awaitMessages({ filter: m => m.author.id == message.author.id && m.content.replace(/[^A-Za-z0-9ñ ]/g, '').length, max: 1, time: 20000, errors: ['time'] }).then(collected => { palabra = collected.first().content.replace(/[^A-Za-z0-9ñ ]/g, '') //Reemplazamos carácteres diferentes a los de la expresión regular para evitar problemas (usamos solo números y letras) }).catch(() => canal.send('Tiempo agotado!')) if (!palabra) return; const ahorcado = new Hangman(palabra, { jugadores: jugadores, lowerCase: true, lives: 7 }) ahorcado.on('end', game => { if (game.winned) { //Si el juego ha terminado y se ha descubierto toda la frase return message.channel.send('El juego ha finalizado! La frase era: **' + game.text + '**\n' + 'Descubierto por: **' + client.users.cache.get(game.lastTurn).tag + '**\n\n```' + game.ascii.join(' ') + '```') } else { //Si ha terminado pero no han descubierto la frase return message.channel.send('Han perdido! La frase era: **' + game.text + '**\n' + 'Último error: **' + client.users.cache.get(game.lastTurn).tag + '**\n\n```\n' + game.ascii.join(' ') + '```') }; }); message.channel.send(message.author.toString() + ' ha elegido su palabra!\n\n' + '```\n' + ahorcado.game.ascii.join(' ') + '```**Empieza ' + client.users.cache.get(ahorcado.game.turn).tag + '**') const colector = message.channel.createMessageCollector({ filter: msg => msg.author.id == ahorcado.game.turn && /[A-Za-z0-9ñ]/.test(msg.content) && msg.content.length == 1 }) //hacemos un colector de letras y numeros de longitud 1 colector.on('collect', msg => { const encontrado = ahorcado.find(msg.content) //Usamos el método find() para encontrar una letra en la frase, éste retorna true si se encuentra, de lo contrario false if (ahorcado.game.ended) { colector.stop() //Si el juego ya ha terminado, detenemos el colector return } if (!encontrado) message.channel.send('- Vaya! Parece que la letra ' + msg.content + ' no se encontraba en la frase!\nLetras incorrectas: **[' + ahorcado.game.chars.wrong.join(', ') + ']**') message.channel.send('```\n' + ahorcado.game.ascii.join(' ') + '\n```**Turno de ' + client.users.cache.get(ahorcado.game.turn).tag + '**\nIntentos restantes: **' + ahorcado.game.lives + '**') }) ``` # Changelog ### v1.1.2 > * Añadidas opciones **findWord** y **findWholeText** > * Arreglos en las funciones **find**, **nextTurn** y **removePlayer** > * Arreglos en README.md > * Optimizado el código general