Add !help
This commit is contained in:
parent
05dfff7d37
commit
9785e9fb89
2 changed files with 59 additions and 1 deletions
|
@ -1,8 +1,9 @@
|
||||||
import { decorators as d, IPluginOptions } from "knub";
|
import { decorators as d, getCommandSignature, IPluginOptions } from "knub";
|
||||||
import { CategoryChannel, Channel, EmbedOptions, Member, Message, Role, TextChannel, User, VoiceChannel } from "eris";
|
import { CategoryChannel, Channel, EmbedOptions, Member, Message, Role, TextChannel, User, VoiceChannel } from "eris";
|
||||||
import {
|
import {
|
||||||
channelMentionRegex,
|
channelMentionRegex,
|
||||||
chunkArray,
|
chunkArray,
|
||||||
|
createChunkedMessage,
|
||||||
embedPadding,
|
embedPadding,
|
||||||
errorMessage,
|
errorMessage,
|
||||||
isSnowflake,
|
isSnowflake,
|
||||||
|
@ -24,6 +25,7 @@ import { SavedMessage } from "../data/entities/SavedMessage";
|
||||||
import { GuildSavedMessages } from "../data/GuildSavedMessages";
|
import { GuildSavedMessages } from "../data/GuildSavedMessages";
|
||||||
import { GuildArchives } from "../data/GuildArchives";
|
import { GuildArchives } from "../data/GuildArchives";
|
||||||
import { ZeppelinPlugin } from "./ZeppelinPlugin";
|
import { ZeppelinPlugin } from "./ZeppelinPlugin";
|
||||||
|
import { ICommandDefinition } from "knub/dist/CommandManager";
|
||||||
|
|
||||||
const { performance } = require("perf_hooks");
|
const { performance } = require("perf_hooks");
|
||||||
|
|
||||||
|
@ -45,6 +47,7 @@ interface IUtilityPluginConfig {
|
||||||
can_ping: boolean;
|
can_ping: boolean;
|
||||||
can_source: boolean;
|
can_source: boolean;
|
||||||
can_vcmove: boolean;
|
can_vcmove: boolean;
|
||||||
|
can_help: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class UtilityPlugin extends ZeppelinPlugin<IUtilityPluginConfig> {
|
export class UtilityPlugin extends ZeppelinPlugin<IUtilityPluginConfig> {
|
||||||
|
@ -69,6 +72,7 @@ export class UtilityPlugin extends ZeppelinPlugin<IUtilityPluginConfig> {
|
||||||
can_ping: false,
|
can_ping: false,
|
||||||
can_source: false,
|
can_source: false,
|
||||||
can_vcmove: false,
|
can_vcmove: false,
|
||||||
|
can_help: false,
|
||||||
},
|
},
|
||||||
overrides: [
|
overrides: [
|
||||||
{
|
{
|
||||||
|
@ -82,6 +86,7 @@ export class UtilityPlugin extends ZeppelinPlugin<IUtilityPluginConfig> {
|
||||||
can_server: true,
|
can_server: true,
|
||||||
can_nickname: true,
|
can_nickname: true,
|
||||||
can_vcmove: true,
|
can_vcmove: true,
|
||||||
|
can_help: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -739,6 +744,55 @@ export class UtilityPlugin extends ZeppelinPlugin<IUtilityPluginConfig> {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@d.command("help", "<command:string$>")
|
||||||
|
@d.permission("can_help")
|
||||||
|
helpCmd(msg: Message, args: { command: string }) {
|
||||||
|
const searchStr = args.command.toLowerCase();
|
||||||
|
|
||||||
|
const matchingCommands: ICommandDefinition[] = [];
|
||||||
|
|
||||||
|
const guildData = this.knub.getGuildData(this.guildId);
|
||||||
|
for (const plugin of guildData.loadedPlugins.values()) {
|
||||||
|
if (!(plugin instanceof ZeppelinPlugin)) continue;
|
||||||
|
|
||||||
|
const commands = plugin.getRegisteredCommands();
|
||||||
|
for (const command of commands) {
|
||||||
|
const trigger = command.trigger.source.toLowerCase();
|
||||||
|
if (trigger.startsWith(searchStr)) {
|
||||||
|
matchingCommands.push(command);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const totalResults = matchingCommands.length;
|
||||||
|
const limitedResults = matchingCommands.slice(0, 15);
|
||||||
|
const signatures = limitedResults.map(command => {
|
||||||
|
return (
|
||||||
|
"`" +
|
||||||
|
getCommandSignature(
|
||||||
|
guildData.config.prefix,
|
||||||
|
command.trigger.source,
|
||||||
|
command.parameters,
|
||||||
|
command.config.options,
|
||||||
|
) +
|
||||||
|
"`"
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (totalResults === 0) {
|
||||||
|
msg.channel.createMessage("No matching commands found!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let message =
|
||||||
|
totalResults !== limitedResults.length
|
||||||
|
? `Results (${totalResults} total, showing first ${limitedResults.length}):`
|
||||||
|
: `Results:`;
|
||||||
|
|
||||||
|
message += `\n\n${signatures.join("\n")}`;
|
||||||
|
createChunkedMessage(msg.channel, message);
|
||||||
|
}
|
||||||
|
|
||||||
@d.command("reload_guild")
|
@d.command("reload_guild")
|
||||||
@d.permission("can_reload_guild")
|
@d.permission("can_reload_guild")
|
||||||
reloadGuildCmd(msg: Message) {
|
reloadGuildCmd(msg: Message) {
|
||||||
|
|
|
@ -69,4 +69,8 @@ export class ZeppelinPlugin<TConfig extends {} = IBasePluginConfig> extends Plug
|
||||||
throw new PluginRuntimeError(`Invalid emoji: ${snowflake}`, this.runtimePluginName, this.guildId);
|
throw new PluginRuntimeError(`Invalid emoji: ${snowflake}`, this.runtimePluginName, this.guildId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public getRegisteredCommands() {
|
||||||
|
return this.commands.commands;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue