aboutsummaryrefslogtreecommitdiff
path: root/src/commands/utilities/poll.ts
diff options
context:
space:
mode:
authorIRONM00N <64110067+IRONM00N@users.noreply.github.com>2022-03-03 23:45:16 -0500
committerIRONM00N <64110067+IRONM00N@users.noreply.github.com>2022-03-03 23:45:16 -0500
commit3c56bbcf795725b65192409b3211d92c097f8c82 (patch)
tree472dafca0224e61aeaffcf59ea176c534b8c3930 /src/commands/utilities/poll.ts
parent2e02220de1d1de24375db11f22b4c6626c930a28 (diff)
downloadtanzanite-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.ts80
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) };
+ }
+ }
+}