From 09d069dec102b35b26fb75ccc943dcd46a0e581c Mon Sep 17 00:00:00 2001 From: Niels Simenon Date: Wed, 2 Nov 2022 01:20:19 +0100 Subject: [PATCH] Help module can give game-specific help. --- src/games/help.js | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/games/help.js b/src/games/help.js index 7ea950d..6cc0b3a 100755 --- a/src/games/help.js +++ b/src/games/help.js @@ -3,13 +3,41 @@ const config = require('config'); const { version } = require('../../package.json'); +const style = require('../utils/style'); + +function capitalize(string) { + if (typeof string !== 'string') { + return string; + } + + return `${string.slice(0, 1).toUpperCase()}${string.slice(1)}`; +} + function onCommand(args, context) { + if (context.subcommand) { + const game = context.games[context.subcommand]; + + if (game?.help) { + context.sendMessage(`${style.bold(`${capitalize(game.name || game.key)}:`)} ${game.help}`, context.room.id, { styleCommands: true }); + return; + } + + if (game) { + context.sendMessage(`No help available for '${capitalize(game.name || game.key)}'.`, context.room.id, { styleCommands: true }); + return; + } + + context.sendMessage(`No game '${capitalize(context.subcommand)}' known.`, context.room.id, { styleCommands: true }); + + return; + } + const commandsByGame = Object.entries(context.games) .filter(([command, game]) => !command.includes('-') && !game.restricted) .reduce((acc, [command, game]) => ({ ...acc, [game.name]: [...(acc[game.name] || []), command] }), {}); const commands = Object.entries(commandsByGame) - .map(([gameName, gameCommands]) => `${gameName.slice(0, 1).toUpperCase()}${gameName.slice(1)}: ${gameCommands.map((command) => `${config.prefix}${command}`).join(', ')}`) + .map(([gameName, gameCommands]) => `${capitalize(gameName)}: ${gameCommands.map((command) => `${config.prefix}${command}`).join(', ')}`) .join(' | '); context.sendMessage(`${commands}`, context.room.id, { styleCommands: true });