death-hangman
v1.1.2
Published
Un módulo dedicado a bots de discord para jugar ahorcado/hangman
Downloads
12
Maintainers
Readme
death-hangman
Un módulo dedicado a bots de discord para jugar ahorcado/hangman
Support & suggestions
Hangman class
Constructor
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
//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:
//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