mirror of
				https://github.com/keanuplayz/TravBot-v3.git
				synced 2024-08-15 02:33:12 +00:00 
			
		
		
		
	Turned the help command into a paginated embed
This commit is contained in:
		
							parent
							
								
									72ff144cc0
								
							
						
					
					
						commit
						653cc6f8a6
					
				
					 5 changed files with 75 additions and 27 deletions
				
			
		|  | @ -1,4 +1,4 @@ | ||||||
| # ??? | # 3.2.1 | ||||||
| - `vaporwave`: Transforms input into full-width text | - `vaporwave`: Transforms input into full-width text | ||||||
| - `eco post`: A play on `eco get` | - `eco post`: A play on `eco get` | ||||||
| - `admin set prefix <prefix> (<@bot>)`: Allows you to target a bot when setting a prefix if two bots have conflicting prefixes | - `admin set prefix <prefix> (<@bot>)`: Allows you to target a bot when setting a prefix if two bots have conflicting prefixes | ||||||
|  | @ -7,8 +7,10 @@ | ||||||
| - `thonk`: A result can now be discarded if the person who called the command reacts with ❌ | - `thonk`: A result can now be discarded if the person who called the command reacts with ❌ | ||||||
| - `scanemotes forcereset`: Removes the cooldown on `scanemotes`, only accessible by bot support and up | - `scanemotes forcereset`: Removes the cooldown on `scanemotes`, only accessible by bot support and up | ||||||
| - `urban`: Bug fixes | - `urban`: Bug fixes | ||||||
|  | - Changed `help` to display a paginated embed | ||||||
|  | - Various changes to core | ||||||
| 
 | 
 | ||||||
| # 3.2.0 - Internal refactor, more subcommand types, and more command type guards (2021-??-??) | # 3.2.0 - Internal refactor, more subcommand types, and more command type guards (2021-04-09) | ||||||
| - The custom logger changed: `$.log` no longer exists, it's just `console.log`. Now you don't have to do `import $ from "../core/lib"` at the top of every file that uses the custom logger. | - The custom logger changed: `$.log` no longer exists, it's just `console.log`. Now you don't have to do `import $ from "../core/lib"` at the top of every file that uses the custom logger. | ||||||
| - Utility functions are no longer attached to the command menu. Stuff like `$.paginate()` and `$(5).pluralise()` instead need to be imported and used as regular functions. | - Utility functions are no longer attached to the command menu. Stuff like `$.paginate()` and `$(5).pluralise()` instead need to be imported and used as regular functions. | ||||||
| - The `paginate` function was reworked to reduce the amount of repetition you had to do. | - The `paginate` function was reworked to reduce the amount of repetition you had to do. | ||||||
|  |  | ||||||
|  | @ -65,6 +65,7 @@ Because versions are assigned to batches of changes rather than single changes ( | ||||||
| 
 | 
 | ||||||
| - `%author%` - A user mention of the person who called the command. | - `%author%` - A user mention of the person who called the command. | ||||||
| - `%prefix%` - The prefix of the current guild. | - `%prefix%` - The prefix of the current guild. | ||||||
|  | - `%command%` - The command's execution path up to the current subcommand. | ||||||
| 
 | 
 | ||||||
| # Utility Functions | # Utility Functions | ||||||
| 
 | 
 | ||||||
|  | @ -72,11 +73,12 @@ Because versions are assigned to batches of changes rather than single changes ( | ||||||
| 
 | 
 | ||||||
| `paginate()` | `paginate()` | ||||||
| ```ts | ```ts | ||||||
| const pages = ['one', 'two', 'three']; | const pages = ["one", "two", "three"]; | ||||||
| const msg = await channel.send(pages[0]); |  | ||||||
| 
 | 
 | ||||||
| paginate(msg, author.id, pages.length, (page) => { | paginate(channel, author.id, pages.length, (page) => { | ||||||
| 	msg.edit(pages[page]); | 	return { | ||||||
|  | 		content: pages[page] | ||||||
|  | 	}; | ||||||
| }); | }); | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										4
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							|  | @ -1,12 +1,12 @@ | ||||||
| { | { | ||||||
|     "name": "travebot", |     "name": "travebot", | ||||||
|     "version": "3.2.0", |     "version": "3.2.1", | ||||||
|     "lockfileVersion": 2, |     "lockfileVersion": 2, | ||||||
|     "requires": true, |     "requires": true, | ||||||
|     "packages": { |     "packages": { | ||||||
|         "": { |         "": { | ||||||
|             "name": "travebot", |             "name": "travebot", | ||||||
|             "version": "3.2.0", |             "version": "3.2.1", | ||||||
|             "hasInstallScript": true, |             "hasInstallScript": true, | ||||||
|             "license": "MIT", |             "license": "MIT", | ||||||
|             "dependencies": { |             "dependencies": { | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| { | { | ||||||
|     "name": "travebot", |     "name": "travebot", | ||||||
|     "version": "3.2.0", |     "version": "3.2.1", | ||||||
|     "description": "TravBot Discord bot.", |     "description": "TravBot Discord bot.", | ||||||
|     "main": "dist/index.js", |     "main": "dist/index.js", | ||||||
|     "scripts": { |     "scripts": { | ||||||
|  |  | ||||||
|  | @ -1,5 +1,16 @@ | ||||||
| import {Command, NamedCommand, CHANNEL_TYPE, getPermissionName, getCommandList, getCommandInfo} from "../../core"; | import { | ||||||
|  |     Command, | ||||||
|  |     NamedCommand, | ||||||
|  |     CHANNEL_TYPE, | ||||||
|  |     getPermissionName, | ||||||
|  |     getCommandList, | ||||||
|  |     getCommandInfo, | ||||||
|  |     paginate | ||||||
|  | } from "../../core"; | ||||||
| import {requireAllCasesHandledFor} from "../../lib"; | import {requireAllCasesHandledFor} from "../../lib"; | ||||||
|  | import {MessageEmbed} from "discord.js"; | ||||||
|  | 
 | ||||||
|  | const EMBED_COLOR = "#158a28"; | ||||||
| 
 | 
 | ||||||
| export default new NamedCommand({ | export default new NamedCommand({ | ||||||
|     description: "Lists all commands. If a command is specified, their arguments are listed as well.", |     description: "Lists all commands. If a command is specified, their arguments are listed as well.", | ||||||
|  | @ -7,14 +18,18 @@ export default new NamedCommand({ | ||||||
|     aliases: ["h"], |     aliases: ["h"], | ||||||
|     async run({message, channel, guild, author, member, client, args}) { |     async run({message, channel, guild, author, member, client, args}) { | ||||||
|         const commands = await getCommandList(); |         const commands = await getCommandList(); | ||||||
|         let output = `Legend: \`<type>\`, \`[list/of/stuff]\`, \`(optional)\`, \`(<optional type>)\`, \`([optional/list/...])\``; |         const categoryArray = commands.keyArray(); | ||||||
| 
 | 
 | ||||||
|         for (const [category, commandList] of commands) { |         paginate(channel, author.id, categoryArray.length, (page, hasMultiplePages) => { | ||||||
|             output += `\n\n===[ ${category} ]===`; |             const category = categoryArray[page]; | ||||||
|             for (const command of commandList) output += `\n- \`${command.name}\`: ${command.description}`; |             const commandList = commands.get(category)!; | ||||||
|         } |             let output = `Legend: \`<type>\`, \`[list/of/stuff]\`, \`(optional)\`, \`(<optional type>)\`, \`([optional/list/...])\`\n`; | ||||||
| 
 |             for (const command of commandList) output += `\n❯ \`${command.name}\`: ${command.description}`; | ||||||
|         channel.send(output, {split: true}); |             return new MessageEmbed() | ||||||
|  |                 .setTitle(hasMultiplePages ? `${category} (Page ${page + 1} of ${categoryArray.length})` : category) | ||||||
|  |                 .setDescription(output) | ||||||
|  |                 .setColor(EMBED_COLOR); | ||||||
|  |         }); | ||||||
|     }, |     }, | ||||||
|     any: new Command({ |     any: new Command({ | ||||||
|         async run({message, channel, guild, author, member, client, args}) { |         async run({message, channel, guild, author, member, client, args}) { | ||||||
|  | @ -29,17 +44,17 @@ export default new NamedCommand({ | ||||||
| 
 | 
 | ||||||
|                 for (const [tag, subcommand] of result.keyedSubcommandInfo) { |                 for (const [tag, subcommand] of result.keyedSubcommandInfo) { | ||||||
|                     const customUsage = subcommand.usage ? ` ${subcommand.usage}` : ""; |                     const customUsage = subcommand.usage ? ` ${subcommand.usage}` : ""; | ||||||
|                     list.push(`- \`${header} ${tag}${customUsage}\` - ${subcommand.description}`); |                     list.push(`❯ \`${header} ${tag}${customUsage}\` - ${subcommand.description}`); | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 for (const [type, subcommand] of result.subcommandInfo) { |                 for (const [type, subcommand] of result.subcommandInfo) { | ||||||
|                     const customUsage = subcommand.usage ? ` ${subcommand.usage}` : ""; |                     const customUsage = subcommand.usage ? ` ${subcommand.usage}` : ""; | ||||||
|                     list.push(`- \`${header} ${type}${customUsage}\` - ${subcommand.description}`); |                     list.push(`❯ \`${header} ${type}${customUsage}\` - ${subcommand.description}`); | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 append = "Usages:" + (list.length > 0 ? `\n${list.join("\n")}` : " None."); |                 append = list.length > 0 ? list.join("\n") : "None"; | ||||||
|             } else { |             } else { | ||||||
|                 append = `Usage: \`${header} ${command.usage}\``; |                 append = `\`${header} ${command.usage}\``; | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             let aliases = "N/A"; |             let aliases = "N/A"; | ||||||
|  | @ -52,12 +67,41 @@ export default new NamedCommand({ | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             return channel.send( |             return channel.send( | ||||||
|                 `Command: \`${header}\`\nAliases: ${aliases}\nCategory: \`${category}\`\nPermission Required: \`${getPermissionName( |                 new MessageEmbed() | ||||||
|                     result.permission |                     .setTitle(header) | ||||||
|                 )}\` (${result.permission})\nChannel Type: ${getChannelTypeName(result.channelType)}\nNSFW Only: ${ |                     .setDescription(command.description) | ||||||
|                     result.nsfw ? "Yes" : "No" |                     .setColor(EMBED_COLOR) | ||||||
|                 }\nDescription: ${command.description}\n${append}`,
 |                     .addFields( | ||||||
|                 {split: true} |                         { | ||||||
|  |                             name: "Aliases", | ||||||
|  |                             value: aliases, | ||||||
|  |                             inline: true | ||||||
|  |                         }, | ||||||
|  |                         { | ||||||
|  |                             name: "Category", | ||||||
|  |                             value: category, | ||||||
|  |                             inline: true | ||||||
|  |                         }, | ||||||
|  |                         { | ||||||
|  |                             name: "Permission Required", | ||||||
|  |                             value: `\`${getPermissionName(result.permission)}\` (Level ${result.permission})`, | ||||||
|  |                             inline: true | ||||||
|  |                         }, | ||||||
|  |                         { | ||||||
|  |                             name: "Channel Type", | ||||||
|  |                             value: getChannelTypeName(result.channelType), | ||||||
|  |                             inline: true | ||||||
|  |                         }, | ||||||
|  |                         { | ||||||
|  |                             name: "NSFW Only?", | ||||||
|  |                             value: result.nsfw ? "Yes" : "No", | ||||||
|  |                             inline: true | ||||||
|  |                         }, | ||||||
|  |                         { | ||||||
|  |                             name: "Usages", | ||||||
|  |                             value: append | ||||||
|  |                         } | ||||||
|  |                     ) | ||||||
|             ); |             ); | ||||||
|         } |         } | ||||||
|     }) |     }) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue