import Chalk from 'chalk'; const log = console.log; import * as Discord from 'discord.js'; import { BotCommand, BotPlugin } from 'psyduck-contracts'; export const CommandRegistry = new Map(); export default class CommandHandler implements BotPlugin { constructor() { } onMessage(message: Discord.Message) { if (message.author.bot) { return; } if (message.content.length <= 1) { return; } const dupe = RegExp(/^(.)\1*$/gm); if (dupe.test(message.content)) { return; } const commandArgs = message.content.slice().split(' '); const commandCode = commandArgs.shift() || ''; const command = CommandRegistry.get(commandCode); if (command) { log(Chalk.black.bgGreen(`Executing command [${Chalk.white(commandCode)}]`)); const parameters = message.content.match(/ (?=\S)[^"\s]*(?:"[^\\"]*(?:\\[\s\S][^\\"]*)*"[^"\s]*)*/g) || []; command.executeCommand(message, parameters); } } registerCommand(command: BotCommand) { command.commandCodes.forEach(code => { const key = `${command.commandPrefix}${code}`; CommandRegistry.set(key, command); log(Chalk.black.bgCyan(`Command registered - Code ${Chalk.white(key)}`)); }); } }