npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

death-hangman

v1.1.2

Published

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

Downloads

12

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