From 9de5c73952aec88d452cd276902ad959f21e61d8 Mon Sep 17 00:00:00 2001 From: Evert Prants Date: Thu, 3 Dec 2020 19:44:53 +0200 Subject: [PATCH] list repositories and their plugins --- src/cli.ts | 26 ++++++++++++++++++++++++-- src/core.ts | 6 +++--- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/cli.ts b/src/cli.ts index 69fac5a..cdc7106 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -17,8 +17,8 @@ export class SqueebotCLI { } private async repositoryCommand(...args: any[]): Promise { - const help = 'repository add | update | remove '; - if (!args[0] || args[0] === 'help') { + const help = 'repository add | update | remove | plugins | list'; + if (!args[0] || (args[0] === 'help' && args[0] !== 'list')) { logger.log(help); return; } @@ -73,6 +73,28 @@ export class SqueebotCLI { await this.checkUpdate(repo); } break; + case 'list': + const repos = this.bot.repositoryManager.getAll(); + logger.log('List of installed repositories:'); + for (const repo of repos) { + logger.log('%s: (%s) with %d plugins | Date: %s', + repo.name, repo.url, repo.plugins.length, new Date(repo.created * 1000).toDateString()); + } + break; + case 'plugins': { + if (!args[1]) { + logger.error('Name is required'); + return; + } + const repo = this.bot.repositoryManager.getRepoByName(args[1]); + if (!repo) { + logger.error('No such repository "%s" found.', args[1]); + return; + } + logger.log('List of plugins in %s:', args[1], + repo.plugins.map(x => `${x.name}@${x.version}`).join(', ')); + break; + } default: logger.log(help); } diff --git a/src/core.ts b/src/core.ts index facf12e..f1cf336 100644 --- a/src/core.ts +++ b/src/core.ts @@ -12,7 +12,7 @@ import { Configuration, IEnvironment } from '@squeebot/core/lib/types'; import { ScopedEventEmitter } from '@squeebot/core/lib/util'; -import { logger } from '@squeebot/core/lib/core'; +import { ISqueebotCore, logger } from '@squeebot/core/lib/core'; const defaultConfiguration: {[key: string]: any} = { channels: [], @@ -20,9 +20,9 @@ const defaultConfiguration: {[key: string]: any} = { name: 'squeebot', }; -export class Squeebot { +export class Squeebot implements ISqueebotCore { // TODO: change core module after publishing to npm - private npm: NPMExecutor = new NPMExecutor(this.environment, '~/Squeebot/core'); + public npm: NPMExecutor = new NPMExecutor(this.environment, '~/Squeebot/core'); public stream: ScopedEventEmitter = new ScopedEventEmitter();