From 05ced99d1e4b17bced7e9efc81edf1f959ce1f57 Mon Sep 17 00:00:00 2001 From: twobiers <22715034+twobiers@users.noreply.github.com> Date: Sun, 1 Feb 2026 17:42:58 +0100 Subject: [PATCH 1/3] Add likert preset for poll options --- src/commands/poll.ts | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/src/commands/poll.ts b/src/commands/poll.ts index 7f2218b3..ad59fe7f 100644 --- a/src/commands/poll.ts +++ b/src/commands/poll.ts @@ -9,6 +9,20 @@ import * as legacyDelayedPoll from "#service/delayedPollLegacy.ts"; import * as pollEmbedService from "#service/pollEmbed.ts"; import { defer } from "#utils/interactionUtils.ts"; +const pollOptionsPresets = { + likert: { + questionPrefix: "Wie sehr stimmst du folgender Aussage zu?", + permitsExtension: false, + options: [ + "Stimme überhaupt nicht zu", + "Stimme eher nicht zu", + "Weder noch", + "Stimme eher zu", + "Stimme voll und ganz zu", + ], + }, +} as const; + const argsConfig = { options: { channel: { @@ -17,6 +31,11 @@ const argsConfig = { default: false, multiple: false, }, + preset: { + type: "string", + short: "p", + multiple: false, + }, extendable: { type: "boolean", short: "e", @@ -45,6 +64,9 @@ Usage: $COMMAND_PREFIX$poll [Optionen?] [Hier die Frage] ; [Antwort 1] ; [Antwor Optionen: \t-c, --channel \t\t\tSendet die Umfrage in den Umfragenchannel, um den Slowmode zu umgehen +\t-p , --preset +\t\t\tVerwendet ein vorgefertigtes Set an Antwortmöglichkeiten. Aktuelle Presets: +\t\t\t- likert: Eine 5-Punkte Skala von "Stimme überhaupt nicht zu" bis "Stimme voll und ganz zu" \t-e, --extendable \t\t\tErlaubt die Erweiterung der Antwortmöglichkeiten durch jeden User mit .extend als Reply \t-s, --straw @@ -81,11 +103,26 @@ Optionen: return "Bruder da ist keine Umfrage :c"; } - const [question, ...pollOptions] = pollService.parsePollOptionString(positionals.join(" ")); + let [question, ...pollOptions] = pollService.parsePollOptionString(positionals.join(" ")); if (question.length > pollEmbedService.TEXT_LIMIT) { return "Bruder die Frage ist ja länger als mein Schwands :c"; } + const preset = options.preset + ? pollOptionsPresets[options.preset as keyof typeof pollOptionsPresets] + : null; + if (options.preset && !preset) { + return `Bruder das preset ${options.preset} gibt's nicht 🙄`; + } + if (preset && pollOptions.length > 0) { + return "Bruder entweder preset oder eigene Antwortmöglichkeiten, aber nicht beides 🙄"; + } + + if (preset) { + pollOptions.push(...preset.options); + question = `${preset.questionPrefix}\n${question}`; + } + let pollOptionsTextLength = 0; for (const pollOption of pollOptions) { pollOptionsTextLength += pollOption.length; @@ -115,6 +152,9 @@ Optionen: if (extendable && options.delayed) { return "Bruder du kannst -e nicht mit -d kombinieren. 🙄"; } + if (extendable && preset && !preset.permitsExtension) { + return `Bruder du kannst -e nicht mit dem preset ${options.preset} kombinieren. 🙄`; + } let finishTime: Date | undefined; if (options.delayed) { From 3ad302f105078d1729f6494ed977c9bbc3faaf1c Mon Sep 17 00:00:00 2001 From: twobiers <22715034+twobiers@users.noreply.github.com> Date: Sun, 1 Feb 2026 17:54:58 +0100 Subject: [PATCH 2/3] Add preface option --- src/commands/poll.ts | 11 ++++++++--- src/service/pollEmbed.ts | 3 ++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/commands/poll.ts b/src/commands/poll.ts index ad59fe7f..049dcfb5 100644 --- a/src/commands/poll.ts +++ b/src/commands/poll.ts @@ -11,7 +11,7 @@ import { defer } from "#utils/interactionUtils.ts"; const pollOptionsPresets = { likert: { - questionPrefix: "Wie sehr stimmst du folgender Aussage zu?", + preface: "Wie sehr stimmst du folgender Aussage zu?", permitsExtension: false, options: [ "Stimme überhaupt nicht zu", @@ -103,7 +103,8 @@ Optionen: return "Bruder da ist keine Umfrage :c"; } - let [question, ...pollOptions] = pollService.parsePollOptionString(positionals.join(" ")); + const [question, ...pollOptions] = pollService.parsePollOptionString(positionals.join(" ")); + if (question.length > pollEmbedService.TEXT_LIMIT) { return "Bruder die Frage ist ja länger als mein Schwands :c"; } @@ -120,7 +121,10 @@ Optionen: if (preset) { pollOptions.push(...preset.options); - question = `${preset.questionPrefix}\n${question}`; + // Check with estimated length, does not need to be perfect. Otherwise discord will just error out later + if (preset.preface.length + question.length + 1 > pollEmbedService.TEXT_LIMIT) { + return "Bruder die vorgegebene Frage ist zu lang in Kombination mit dem preset :c"; + } } let pollOptionsTextLength = 0; @@ -184,6 +188,7 @@ Optionen: channel, { question, + preface: preset ? preset.preface : undefined, anonymous: !!finishTime, author: message.author, extendable, diff --git a/src/service/pollEmbed.ts b/src/service/pollEmbed.ts index cc0a53a3..cbbe64d4 100644 --- a/src/service/pollEmbed.ts +++ b/src/service/pollEmbed.ts @@ -69,6 +69,7 @@ export type AuthorSpec = { username: string; iconURL?: string }; export type PollEmbedParameters = { author: AuthorSpec; question: string; + preface?: string; multipleChoices: boolean; anonymous: boolean; extendable: boolean; @@ -89,7 +90,7 @@ export function buildPollEmbed( options: readonly PollEmbedOptionParameters[], ): APIEmbed { const embed = new EmbedBuilder({ - description: `**${cleanContent(poll.question, targetChannel)}**`, + description: `${poll.preface ? cleanContent(poll.preface, targetChannel) + "\n" : ""}**${cleanContent(poll.question, targetChannel)}**`, fields: options.map(o => createOptionField( o.option, From f6dfc63f7df59f4efc1f4745aaa6aaa9ed99e963 Mon Sep 17 00:00:00 2001 From: holzmaster <15527285+holzmaster@users.noreply.github.com> Date: Sun, 1 Feb 2026 18:37:13 +0100 Subject: [PATCH 3/3] Apply suggestion from @holzmaster --- src/commands/poll.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commands/poll.ts b/src/commands/poll.ts index 049dcfb5..3d8d7649 100644 --- a/src/commands/poll.ts +++ b/src/commands/poll.ts @@ -188,7 +188,7 @@ Optionen: channel, { question, - preface: preset ? preset.preface : undefined, + preface: preset?.preface ?? undefined, anonymous: !!finishTime, author: message.author, extendable,