aliases command
This commit is contained in:
parent
f1d9d4b0fb
commit
d83b7a5b02
@ -215,13 +215,12 @@ class SqueebotCommandsAPIPlugin extends Plugin {
|
|||||||
|
|
||||||
// Start executing
|
// Start executing
|
||||||
for (const spec of permitted) {
|
for (const spec of permitted) {
|
||||||
// Help command needs access to plugin list in the channel
|
const argv: any[] = separate.slice(1);
|
||||||
// Very dirty
|
if (spec.plugin === this.name) {
|
||||||
if (spec.name === 'help') {
|
argv.unshift(plugins);
|
||||||
spec.tempargv = plugins;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const success = await spec.execute(msg, spec, prefix, ...separate.slice(1));
|
const success = await spec.execute(msg, spec, prefix, ...argv);
|
||||||
if (success) {
|
if (success) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -416,8 +415,7 @@ class SqueebotCommandsAPIPlugin extends Plugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private helpCommand(msg: IMessage, prefix: string, plugins: string[]): void {
|
private withAliases(msg: IMessage, plugins: string[]): CommandSpec[] {
|
||||||
// Iteration 1: Resolve commands by name and by aliases
|
|
||||||
const withAliases = [];
|
const withAliases = [];
|
||||||
for (const spec of this.commands) {
|
for (const spec of this.commands) {
|
||||||
if (plugins.length && plugins.indexOf(spec.plugin) === -1) {
|
if (plugins.length && plugins.indexOf(spec.plugin) === -1) {
|
||||||
@ -435,6 +433,20 @@ class SqueebotCommandsAPIPlugin extends Plugin {
|
|||||||
|
|
||||||
withAliases.push(spec);
|
withAliases.push(spec);
|
||||||
}
|
}
|
||||||
|
return withAliases;
|
||||||
|
}
|
||||||
|
|
||||||
|
private aliasesCommand(msg: IMessage, prefix: string, args: any[]): void {
|
||||||
|
// First argument could be a passed plugin array within this plugin
|
||||||
|
let plugins: string[] = [];
|
||||||
|
let cmdarg = 0;
|
||||||
|
if (args && args.length && Array.isArray(args[0])) {
|
||||||
|
plugins = args[0];
|
||||||
|
cmdarg += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Iteration 1: Resolve commands (with aliases)
|
||||||
|
const withAliases = this.withAliases(msg, plugins);
|
||||||
|
|
||||||
// Iteration 2: Match rooms for message
|
// Iteration 2: Match rooms for message
|
||||||
let matching = this.roomMatcher(msg, withAliases);
|
let matching = this.roomMatcher(msg, withAliases);
|
||||||
@ -442,23 +454,76 @@ class SqueebotCommandsAPIPlugin extends Plugin {
|
|||||||
// Iteration 3: Match permissions for user
|
// Iteration 3: Match permissions for user
|
||||||
matching = this.permissionMatcher(msg, matching);
|
matching = this.permissionMatcher(msg, matching);
|
||||||
|
|
||||||
const text = msg.text;
|
|
||||||
const argv = text.toLowerCase().split(' ');
|
|
||||||
const b = (t: string) => {
|
const b = (t: string) => {
|
||||||
return msg.source.format.format('bold', t);
|
return msg.source.format.format('bold', t);
|
||||||
};
|
};
|
||||||
|
|
||||||
if (argv[1]) {
|
if (!args[cmdarg]) {
|
||||||
|
msg.resolve('A command name is required.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let found: CommandSpec | null = null;
|
||||||
|
for (const spec of matching) {
|
||||||
|
if (spec.name === args[cmdarg]) {
|
||||||
|
found = spec;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!found) {
|
||||||
|
msg.resolve('aliases: No such command "%s"!', args[cmdarg]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!found.aliases || found.aliases.length === 0) {
|
||||||
|
msg.resolve('%s - No aliases found.', b(prefix + found.name));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let list = found.aliases;
|
||||||
|
let aliasText = '';
|
||||||
|
if (found.alias) {
|
||||||
|
aliasText = b(`[alias of ${found.alias}]`);
|
||||||
|
list = list.filter((x) => x !== found?.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
msg.resolve(b('Aliases of %s:'), prefix + found.name, list.join(', '), aliasText);
|
||||||
|
}
|
||||||
|
|
||||||
|
private helpCommand(msg: IMessage, prefix: string, args: any[]): void {
|
||||||
|
// First argument could be a passed plugin array within this plugin
|
||||||
|
let plugins: string[] = [];
|
||||||
|
let cmdarg = 0;
|
||||||
|
if (args && args.length && Array.isArray(args[0])) {
|
||||||
|
plugins = args[0];
|
||||||
|
cmdarg += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Iteration 1: Resolve commands (with aliases)
|
||||||
|
const withAliases = this.withAliases(msg, plugins);
|
||||||
|
|
||||||
|
// Iteration 2: Match rooms for message
|
||||||
|
let matching = this.roomMatcher(msg, withAliases);
|
||||||
|
|
||||||
|
// Iteration 3: Match permissions for user
|
||||||
|
matching = this.permissionMatcher(msg, matching);
|
||||||
|
|
||||||
|
const b = (t: string) => {
|
||||||
|
return msg.source.format.format('bold', t);
|
||||||
|
};
|
||||||
|
|
||||||
|
if (args[cmdarg]) {
|
||||||
let found: CommandSpec | null = null;
|
let found: CommandSpec | null = null;
|
||||||
for (const spec of matching) {
|
for (const spec of matching) {
|
||||||
if (spec.name === argv[1]) {
|
if (spec.name === args[cmdarg]) {
|
||||||
found = spec;
|
found = spec;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!found) {
|
if (!found) {
|
||||||
msg.resolve('help: No such command "%s"!', argv[1]);
|
msg.resolve('help: No such command "%s"!', args[cmdarg]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -491,9 +556,21 @@ class SqueebotCommandsAPIPlugin extends Plugin {
|
|||||||
name: 'help',
|
name: 'help',
|
||||||
aliases: ['commands'],
|
aliases: ['commands'],
|
||||||
usage: '[<command>]',
|
usage: '[<command>]',
|
||||||
description: 'Show command usage or list all commands',
|
description: 'Show command usage or list all available commands',
|
||||||
execute: async (msg: IMessage, spec: CommandSpec, prefix: string): Promise<boolean> => {
|
execute: async (msg: IMessage, spec: CommandSpec, prefix: string, ...args: any[]): Promise<boolean> => {
|
||||||
this.helpCommand(msg, prefix, spec.tempargv as string[]);
|
this.helpCommand(msg, prefix, args);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this.registerCommand({
|
||||||
|
plugin: this.name,
|
||||||
|
name: 'aliases',
|
||||||
|
aliases: ['alias'],
|
||||||
|
usage: '<command>',
|
||||||
|
description: 'Show the list of aliases for command',
|
||||||
|
execute: async (msg: IMessage, spec: CommandSpec, prefix: string, ...args: any[]): Promise<boolean> => {
|
||||||
|
this.aliasesCommand(msg, prefix, args);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user