diff options
Diffstat (limited to 'src/commands/utilities/highlight-matches.ts')
-rw-r--r-- | src/commands/utilities/highlight-matches.ts | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/commands/utilities/highlight-matches.ts b/src/commands/utilities/highlight-matches.ts index e69de29..aa8308c 100644 --- a/src/commands/utilities/highlight-matches.ts +++ b/src/commands/utilities/highlight-matches.ts @@ -0,0 +1,56 @@ +import { BushCommand, ButtonPaginator, type ArgType, type BushMessage, type BushSlashMessage } from '#lib'; +import assert from 'assert'; +import { ArgumentGeneratorReturn } from 'discord-akairo'; +import { APIEmbed } from 'discord-api-types/v9'; +import { highlightCommandArgs, highlightSubcommands } from './highlight-!.js'; + +export default class HighlightMatchesCommand extends BushCommand { + public constructor() { + super('highlight-matches', { + aliases: [], + category: 'utilities', + description: highlightSubcommands.matches, + usage: [], + examples: [], + clientPermissions: [], + userPermissions: [] + }); + } + + public override *args(): ArgumentGeneratorReturn { + const phrase: ArgType<'string'> = yield { + type: 'string', + match: 'rest', + prompt: { + start: highlightCommandArgs.matches[0].description, + retry: highlightCommandArgs.matches[0].retry, + optional: !highlightCommandArgs.matches[0].required + } + }; + + return { phrase }; + } + + public override async exec(message: BushMessage | BushSlashMessage, args: { phrase: ArgType<'string'> }) { + assert(message.inGuild()); + + const res = await client.highlightManager.checkPhrase(message.guild.id, message.author.id, args.phrase); + + if (!res.size) return await message.util.reply(`${util.emojis.error} You are not highlighting any words`); + + const lines = res.map( + (passed, hl) => `${passed ? util.emojis.check : util.emojis.cross} ${hl.regex ? `/${hl.word}/gi` : hl.word}` + ); + const chunked = util.chunk(lines, 10); + + const pages = chunked.map( + (chunk): APIEmbed => ({ + title: `Matches`, + description: chunk.join('\n'), + color: util.colors.default + }) + ); + + return pages.length > 1 ? await ButtonPaginator.send(message, pages) : message.util.send({ embeds: pages }); + } +} |