Added stub for letters game.

This commit is contained in:
ThePendulum 2022-10-20 05:38:47 +02:00
parent 78b7d95d3f
commit 6701f5e5a1
3 changed files with 100 additions and 1 deletions

View File

@ -33,4 +33,7 @@ module.exports = {
interval: [10, 3600], // seconds interval: [10, 3600], // seconds
duck: ':duck:', duck: ':duck:',
}, },
letters: {
length: 9,
},
}; };

96
src/games/letters.js Normal file
View File

@ -0,0 +1,96 @@
'use strict';
const config = require('config');
const shuffle = require('../utils/shuffle');
const style = require('../utils/style');
const availableVowels = ['a', 'e', 'i', 'o', 'u'];
const availableConsonants = ['b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z']; // Countdown regards y as a consonant
const games = new Map();
function getBoard(context) {
const game = games.get(context.room.id);
return `${game.word.split('').map((letter) => `${style.grey('[')}${letter.toUpperCase()}${style.grey(']')}`).join('')}${`${style.silver('[')} ${style.silver(']')}`.repeat(config.letters.length - game.word.length)}`;
}
function shuffleLetters(letters, acc = []) {
const shuffled = shuffle(letters, config.letters.length);
if (acc.length + shuffled.length < config.letters.length) {
return shuffleLetters(letters, [...acc, ...shuffled, ...letters]);
}
return [...acc, ...shuffled].slice(0, config.letters.length);
}
function playRound(context) {
context.sendMessage(`${getBoard(context)} Let's start!`, context.room.id);
}
function pickLetter(type, context) {
const game = games.get(context.room.id);
if (!game || game.word.length === config.letters.length) {
return;
}
game.word = `${game.word}${game[type].pop()}`;
if (game.word.length === config.letters.length) {
playRound(context);
return;
}
context.sendMessage(`${getBoard(context)} Would you like a consonant or a vowel?`, context.room.id);
}
function start(context) {
if (games.has(context.room.id)) {
context.sendMessage(`${getBoard(context)} This is the current board. Use ${config.prefix}letters:stop to reset.`, context.room.id);
return;
}
games.set(context.room.id, {
word: '',
vowels: shuffleLetters(availableVowels),
consonants: shuffleLetters(availableConsonants),
});
context.sendMessage('Let\'s play the letters! Would you like a consonant or a vowel?', context.room.id);
}
function stop(context) {
games.delete(context.room.id);
context.sendMessage('The game is stopped and reset', context.room.id);
}
function onCommand(args, context) {
if (args.subcommand === 'stop') {
stop(context);
return;
}
if (!args.subcommand) {
start(context);
}
}
function onMessage(message, context) {
if (/(^|\b)cons?(onant)?($|\b)/i.test(message.body)) {
pickLetter('consonants', context);
return;
}
if (/(^|\b)vow(el)?($|\b)/i.test(message.body)) {
pickLetter('vowels', context);
}
}
module.exports = {
onCommand,
onMessage,
};

View File

@ -73,7 +73,7 @@ function play(rawWord, context, shouted) {
} }
if (word === mash.anagram) { if (word === mash.anagram) {
context.sendMessage(`${config.usernamePrefix}${context.user.username}... :expressionless:`, context.room.id); context.sendMessage(`${config.usernamePrefix}${context.user.username}... ${config.platform === 'schat' ? ':expressionless:' : '😑'}`, context.room.id);
return; return;
} }
} }