/[sudobot]/trunk/src/commands/settings/HelpCommand.ts
ViewVC logotype

Annotation of /trunk/src/commands/settings/HelpCommand.ts

Parent Directory Parent Directory | Revision Log Revision Log


Revision 549 - (hide annotations)
Mon Jul 29 17:30:46 2024 UTC (8 months, 2 weeks ago) by rakin
File MIME type: application/typescript
File size: 5366 byte(s)
feat: show the number of total commands in help
1 rakin 393 /**
2     * This file is part of SudoBot.
3     *
4     * Copyright (C) 2021-2022 OSN Inc.
5     *
6     * SudoBot is free software; you can redistribute it and/or modify it
7     * under the terms of the GNU Affero General Public License as published by
8     * the Free Software Foundation, either version 3 of the License, or
9     * (at your option) any later version.
10     *
11     * SudoBot is distributed in the hope that it will be useful, but
12     * WITHOUT ANY WARRANTY; without even the implied warranty of
13     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14     * GNU Affero General Public License for more details.
15     *
16     * You should have received a copy of the GNU Affero General Public License
17     * along with SudoBot. If not, see <https://www.gnu.org/licenses/>.
18     */
19    
20 rakin 344 import { CommandInteraction, Message } from 'discord.js';
21 rakin 51 import BaseCommand from '../../utils/structures/BaseCommand';
22     import DiscordClient from '../../client/Client';
23 rakin 72 import Help from '../../utils/Help';
24 rakin 51 import CommandOptions from '../../types/CommandOptions';
25     import InteractionOptions from '../../types/InteractionOptions';
26     import MessageEmbed from '../../client/MessageEmbed';
27 rakin 486 import { getAllCommandData, renderCommandMeta } from '../../services/CommandMetaDataManager';
28     import Pagination from '../../utils/Pagination';
29 rakin 51
30     export default class HelpCommand extends BaseCommand {
31     constructor() {
32     super('help', 'settings', ['?']);
33     this.supportsInteractions = true;
34     }
35    
36     async render() {
37     let string = '';
38    
39 rakin 72 for (let cmd of Help) {
40 rakin 51 string += `\n\n**${cmd.name}**\n${cmd.shortBrief}`;
41     }
42    
43     return string;
44     }
45    
46     async run(client: DiscordClient, message: Message | CommandInteraction, options: CommandOptions | InteractionOptions) {
47     if ((options.isInteraction && !options.options.getString('command')) || (!options.isInteraction && options.args[0] === undefined)) {
48 rakin 549 const commandData = getAllCommandData();
49     const pagination = new Pagination(commandData, {
50 rakin 486 channel_id: message.channel!.id,
51     guild_id: message.guild!.id,
52     limit: 10,
53     user_id: message.member!.user.id,
54     timeout: 120_000,
55     embedBuilder({ data, maxPages, currentPage }) {
56     let description = `\`<...>\` means required argument and \`[...]\` means optional argument.\nRun \`${client.config.get('prefix')}help <CommandName>\` for more information about a specific command.\n\n`;
57    
58     for (const { name, shortBrief } of data) {
59     description += `**${name}**\n`;
60     description += `${shortBrief}\n\n`;
61     }
62    
63     return new MessageEmbed({
64     author: {
65     iconURL: client.user?.displayAvatarURL(),
66     name: "Help"
67     },
68     description,
69     footer: {
70 rakin 549 text: `Page ${currentPage} of ${maxPages} • ${commandData.length} commands total`
71 rakin 486 }
72     });
73     },
74 rakin 51 });
75    
76 rakin 486 let reply = await message.reply(pagination.getMessageOptions(1));
77    
78     if (message instanceof CommandInteraction) {
79     reply = <Message> await message.fetchReply();
80     }
81    
82     await pagination.start(reply!);
83    
84 rakin 51 return;
85     }
86    
87     const commandName = options.isInteraction ? options.options.getString('command') : options.args[0];
88 rakin 72 const cmd = Help.find(c => c.name === commandName);
89 rakin 51
90     if (!cmd) {
91     await message.reply({
92     embeds: [
93     new MessageEmbed()
94     .setColor('#f14a60')
95     .setDescription(`Invalid command \`${commandName}\`.`)
96     ]
97     });
98    
99     return;
100     }
101    
102 rakin 72 await message.reply({
103     embeds: [renderCommandMeta(cmd)]
104     });
105 rakin 51
106 rakin 72 // let fields = [
107     // {
108     // name: "Usage",
109     // value: `\`${client.config.get('prefix')}${cmd.name}\`` + (cmd.structure.trim() !== '' ? ` \`${cmd.structure}\`` : '')
110     // },
111     // {
112     // name: 'Examples',
113     // value: cmd.example.replace(/\%\%/g, client.config.get('prefix'))
114     // }
115     // ];
116 rakin 51
117 rakin 72 // if (cmd.options !== undefined) {
118     // let str = '';
119 rakin 51
120 rakin 72 // for (let opt in cmd.options)
121     // str += `\`${opt}\` - ${cmd.options[opt]}\n`;
122 rakin 51
123 rakin 72 // str = str.substring(0, str.length - 1);
124 rakin 51
125 rakin 72 // fields.push({
126     // name: 'Options',
127     // value: str
128     // });
129     // }
130 rakin 51
131 rakin 72 // if (cmd.notes !== null) {
132     // fields.push({
133     // name: "Notes",
134     // value: cmd.notes
135     // });
136     // }
137    
138     // await message.reply({
139     // embeds: [
140     // new MessageEmbed()
141     // .setTitle(`${client.config.get('prefix')}${cmd.name}`)
142     // .setDescription("`<...>` means required argument, `[...]` means optional argument.\n\n" + (cmd.description !== null ? cmd.description : cmd.shortBrief))
143     // .addFields(fields)
144     // ]
145     // });
146 rakin 51 }
147 rakin 549 }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26