Update help

This commit is contained in:
Declan Chidlow 2024-07-12 19:09:54 +08:00
parent 0cd5a4e21c
commit 4bc049064b

View file

@ -3,115 +3,108 @@ import { commands, DEFAULT_PREFIX, ownerIDs } from "../../modules/command_handle
import MessageCommandContext from "../../../struct/MessageCommandContext";
import CommandCategory from "../../../struct/commands/CommandCategory";
const categories: { [key in CommandCategory]: {
friendlyName: string,
description: string,
aliases: string[],
} } = {
[CommandCategory.Moderation]: {
friendlyName: 'Moderation',
description: 'Moderation-focused commands',
aliases: [ 'mod' ],
},
[CommandCategory.Config]: {
friendlyName: 'Configuration',
description: 'Configure AutoMod',
aliases: [ 'conf', 'config' ],
},
[CommandCategory.Owner]: {
friendlyName: 'Owner',
description: 'Owner-only commands for managing AutoMod',
aliases: [],
},
[CommandCategory.Miscellaneous]: {
friendlyName: 'Miscellaneous',
description: 'Assorted extras',
aliases: [ 'misc' ],
},
[CommandCategory.None]: {
friendlyName: 'Uncategorized',
description: 'Uncategorized commands',
aliases: [],
},
const categories: {
[key in CommandCategory]: {
friendlyName: string;
description: string;
aliases: string[];
};
} = {
[CommandCategory.Moderation]: {
friendlyName: "Moderation",
description: "Moderation-focused commands",
aliases: ["moderation", "mod"],
},
[CommandCategory.Config]: {
friendlyName: "Configuration",
description: "Configure AutoMod",
aliases: ["configuration", "config", "conf"],
},
[CommandCategory.Owner]: {
friendlyName: "Owner",
description: "Owner-only commands for managing AutoMod",
aliases: [ "owner" ],
},
[CommandCategory.Miscellaneous]: {
friendlyName: "Miscellaneous",
description: "Assorted extras",
aliases: ["miscellaneous", "misc"],
},
[CommandCategory.None]: {
friendlyName: "Uncategorized",
description: "Uncategorized commands",
aliases: [],
},
};
export default {
name: 'help',
aliases: null,
description: 'Help command.',
removeEmptyArgs: true,
category: CommandCategory.Miscellaneous,
run: async (message: MessageCommandContext, args: string[]) => {
const isBotOwner = ownerIDs.includes(message.authorId!);
const prefix = DEFAULT_PREFIX; // TODO: fetch prefix from server config
name: "help",
aliases: null,
description: "Help command.",
removeEmptyArgs: true,
category: CommandCategory.Miscellaneous,
run: async (message: MessageCommandContext, args: string[]) => {
const isBotOwner = ownerIDs.includes(message.authorId!);
const prefix = DEFAULT_PREFIX; // TODO: fetch prefix from server config
let searchInput = args.shift()?.toLowerCase();
if (!searchInput) {
let msg = `## AutoMod Help\n` +
`Type **${prefix}help [category]** to view see all commands or **${prefix}help [command]** to learn more about a command.\n\n`
+ `### [Open Server Settings]`
+ `(<${process.env.WEB_UI_URL || 'https://automod.vale.rocks'}/dashboard/${message.channel?.serverId}>)\n\n`;
let searchInput = args.shift()?.toLowerCase();
if (!searchInput) {
let msg =
`## AutoMod Help\n` +
`Type **${prefix}help [category]** to view see all commands or **${prefix}help [command]** to learn more about a command.\n\n` +
`### [Open Server Settings]` +
`(<${process.env.WEB_UI_URL || "https://automod.vale.rocks"}/dashboard/${message.channel?.serverId}>)\n\n`;
let total = 0;
let total = 0;
for (const categoryName in CommandCategory) {
let cmdCount = commands.filter(
cmd => (cmd.category == categoryName) &&
(cmd.restrict == 'BOTOWNER' ? isBotOwner : true) // Ensure owner commands are only shown to bot owner
).length;
for (const categoryName in CommandCategory) {
let cmdCount = commands.filter((cmd) => cmd.category == categoryName && (cmd.restrict == "BOTOWNER" ? isBotOwner : true)).length;
if (cmdCount > 0) {
total++;
const category = (categories as any)[categoryName];
msg += `**${category.friendlyName}**\n` +
` \u200b \u200b ↳ ${(category.description)} \u200b $\\big |$ \u200b **${cmdCount}** command${cmdCount == 1 ? '' : 's'}\n`;
}
}
if (cmdCount > 0) {
total++;
const category = (categories as any)[categoryName];
msg += `**${category.friendlyName}**\n` + ` \u200b \u200b ↳ ${category.description} \u200b $\\big |$ \u200b **${cmdCount}** command${cmdCount == 1 ? "" : "s"}\n`;
}
}
msg += `\n##### Categories: ${total}`;
msg += `\n##### Categories: ${total}`;
await message.reply(msg);
} else {
let [ categoryName, category ] = Object.entries(categories).find(
c => c[1].friendlyName.toLowerCase() == searchInput
|| c[0].toLowerCase() == searchInput
) || Object.entries(categories).find(
c => c[1].aliases.find(k => k.toLowerCase() == searchInput)
) || [];
if (category && !searchInput.startsWith(prefix)) {
let msg = `**AutoMod Help** - Category: ${category.friendlyName}\n`
+ `${category.description}\n\n`
+ `Type **${prefix}help [command]** to learn more about a command.\n\n`;
await message.reply(msg);
} else {
let [categoryName, category] =
Object.entries(categories).find((c) => c[1].friendlyName.toLowerCase() == searchInput || c[0].toLowerCase() == searchInput) ||
Object.entries(categories).find((c) => c[1].aliases.find((k) => k.toLowerCase() == searchInput)) ||
[];
if (category && !searchInput.startsWith(prefix)) {
let msg = `**AutoMod Help** - Category: ${category.friendlyName}\n` + `${category.description}\n\n` + `Type **${prefix}help [command]** to learn more about a command.\n\n`;
let cmdList = commands.filter(c => (c.category || 'uncategorized') == categoryName);
if (cmdList.length > 0) {
for (const cmd of cmdList) {
msg += `**${prefix}${cmd.name}** \u200b $\\big |$ \u200b ${cmd.description}\n`;
let cmdList = commands.filter((c) => (c.category || "uncategorized") == categoryName);
if (cmdList.length > 0) {
for (const cmd of cmdList) {
msg += `**${prefix}${cmd.name}** \u200b $\\big |$ \u200b ${cmd.description}\n`;
msg += '\n';
}
msg += "\n";
}
msg += `##### Total: ${cmdList.length}`;
} else msg += `### This category is empty.`;
msg += `##### Total: ${cmdList.length}`;
} else msg += `### This category is empty.`;
await message.reply(msg);
} else {
if (searchInput.startsWith(prefix)) searchInput = searchInput.substring(prefix.length);
let cmd = commands.find(c => c.name.toLowerCase() == searchInput)
|| commands.find(c => c.aliases && c.aliases.find(k => k.toLowerCase() == searchInput));
await message.reply(msg);
} else {
if (searchInput.startsWith(prefix)) searchInput = searchInput.substring(prefix.length);
let cmd = commands.find((c) => c.name.toLowerCase() == searchInput) || commands.find((c) => c.aliases && c.aliases.find((k) => k.toLowerCase() == searchInput));
if (!cmd) {
return message.reply(`I can't find any command or category matching \`${searchInput}\`.`);
} else {
let msg = `**AutoMod Help** - Command: ${cmd.name}\n`
+ `${cmd.description}\n\n`;
if (!cmd) {
return message.reply(`I can't find any command or category matching \`${searchInput}\`.`);
} else {
let msg = `**AutoMod Help** - Command: ${cmd.name}\n` + `${cmd.description}\n\n`;
if (cmd.syntax) msg += `Syntax: \`${cmd.syntax}\`\n`;
msg += 'Aliases: ' + (cmd.aliases ? `\`${cmd.aliases.join(`\`, \``)}\`` : 'None') + '\n';
if (cmd.syntax) msg += `Syntax: \`${cmd.syntax}\`\n`;
msg += "Aliases: " + (cmd.aliases ? `\`${cmd.aliases.join(`\`, \``)}\`` : "None") + "\n";
message.reply(msg);
}
}
}
}
message.reply(msg);
}
}
}
},
} as Command;