aboutsummaryrefslogtreecommitdiffstats
path: root/server/src/commands/core/help.js
blob: 8fd02a1ef4d64675ae26fff4a624e42e1ac24363 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/*
  Description: Outputs the current command module list or command categories
*/

const stripIndents = require('common-tags').stripIndents;

exports.run = async (core, server, socket, data) => {
  // TODO: this module needs to be clean up badly :(

  // verify passed arguments
  let typeDt = typeof data.type;
  let catDt = typeof data.category;
  let cmdDt = typeof data.command;
  if (typeDt !== 'undefined' && typeDt !== 'string' ) {
    return;
  } else if (catDt !== 'undefined' && catDt !== 'string' ) {
    return;
  } else if (cmdDt !== 'undefined' && cmdDt !== 'string' ) {
    return;
  }

  // set default reply
  let reply = stripIndents`Help usage:
    Show all categories -> { cmd: 'help', type: 'categories' }
    Show all commands in category -> { cmd: 'help', category: '<category name>' }
    Show specific command -> { cmd: 'help', command: '<command name>' }`;

  // change reply based on query
  if (typeDt !== 'undefined') {
    let categories = core.commands.categories().sort();
    reply = `Command Categories:\n${categories.map(c => `- ${c.replace('../src/commands/', '')}`).join('\n')}`;
  } else if (catDt !== 'undefined') {
    let catCommands = core.commands.all('../src/commands/' + data.category).sort((a, b) => a.info.name.localeCompare(b.info.name));
    reply = `${data.category} commands:\n${catCommands.map(c => `- ${c.info.name}`).join('\n')}`;
  } else if (cmdDt !== 'undefined') {
    let command = core.commands.get(data.command);
    reply = stripIndents`
      Usage: ${command.info.usage || command.info.name}
      Description: ${command.info.description || '¯\_(ツ)_/¯'}`;
  }

  // output reply
  server.reply({
    cmd: 'info',
    text: reply
  }, socket);
};

exports.info = {
  name: 'help',
  usage: 'help ([ type:categories] | [category:<category name> | command:<command name> ])',
  description: 'Outputs information about the servers current protocol'
};