diff options
author | IRONM00N <64110067+IRONM00N@users.noreply.github.com> | 2022-03-03 23:45:16 -0500 |
---|---|---|
committer | IRONM00N <64110067+IRONM00N@users.noreply.github.com> | 2022-03-03 23:45:16 -0500 |
commit | 3c56bbcf795725b65192409b3211d92c097f8c82 (patch) | |
tree | 472dafca0224e61aeaffcf59ea176c534b8c3930 /src/commands/utilities/poll.ts | |
parent | 2e02220de1d1de24375db11f22b4c6626c930a28 (diff) | |
download | tanzanite-3c56bbcf795725b65192409b3211d92c097f8c82.tar.gz tanzanite-3c56bbcf795725b65192409b3211d92c097f8c82.tar.bz2 tanzanite-3c56bbcf795725b65192409b3211d92c097f8c82.zip |
refactor: preemptively switch addField to addFields
Diffstat (limited to 'src/commands/utilities/poll.ts')
-rw-r--r-- | src/commands/utilities/poll.ts | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/commands/utilities/poll.ts b/src/commands/utilities/poll.ts new file mode 100644 index 0000000..e53eb51 --- /dev/null +++ b/src/commands/utilities/poll.ts @@ -0,0 +1,80 @@ +import { BushCommand, type ArgType, type BushMessage, type BushSlashMessage } from '#lib'; +import { ApplicationCommandOptionType, ComponentType } from 'discord.js'; + +export default class PollCommand extends BushCommand { + public constructor() { + super('poll', { + aliases: ['poll', 'quick-poll'], + category: 'utilities', + description: 'Allows you to create a poll that other users can vote on. Separate options with "," or "|".', + usage: ['poll options'], + examples: ['poll 1 2'], + args: [ + { + id: 'question', + description: 'The question to be answered by a poll.', + type: 'string', + prompt: 'What question would you like to ask?', + retry: '{error} Choose a question.', + slashType: ApplicationCommandOptionType.String, + only: 'slash' + }, + { + id: 'options', + description: 'The options to include in the poll. Separate options with "," or "|".', + type: 'string', + prompt: 'What options you want to include in the poll? Separate options with "," or "|".', + retry: '{error} Choose options for the poll. Separate options with "," or "|".', + slashType: ApplicationCommandOptionType.String + } + ], + slash: true, + clientPermissions: (m) => util.clientSendAndPermCheck(m), + userPermissions: [] + }); + } + + public override async exec(message: BushMessage | BushSlashMessage, args: { question?: string; options: ArgType<'string'> }) { + const { question, options } = this.parseArgs(message, args); + if (!question || !options.length) return; + + if (question.length > 256) return await message.util.reply(`${util.emojis.error} Question must be 256 characters or less.`); + if (options.length > 10) return await message.util.reply(`${util.emojis.error} You can only have upto 10 options.`); + + return message.util.send({ + embeds: [ + { + author: { name: `asked by: ${message.author.tag}`, icon_url: message.author.displayAvatarURL() || undefined }, + title: question + } + ], + components: [ + { + type: ComponentType.ActionRow, + components: [] + } + ] + }); + } + + private parseArgs( + message: BushMessage | BushSlashMessage, + args: { question?: string; options: ArgType<'string'> } + ): { question: string; options: string[] } { + const split = args.options.split(/[,|]/).filter((s) => s.trim().length > 0); + if (message.util.isSlash) { + if (split.length < 2) { + void message.util.reply(`${util.emojis.error} You must provide at least two options.`); + return { question: '', options: [] }; + } + return { question: args.question!, options: split }; + } else { + if (split.length < 3) { + void message.util.reply(`${util.emojis.error} You must provide a question and at least two options.`); + return { question: '', options: [] }; + } + + return { question: split[0], options: split.slice(1) }; + } + } +} |