@@ -9,6 +9,20 @@ import * as legacyDelayedPoll from "#service/delayedPollLegacy.ts";
99import * as pollEmbedService from "#service/pollEmbed.ts" ;
1010import { defer } from "#utils/interactionUtils.ts" ;
1111
12+ const pollOptionsPresets = {
13+ likert : {
14+ preface : "Wie sehr stimmst du folgender Aussage zu?" ,
15+ permitsExtension : false ,
16+ options : [
17+ "Stimme überhaupt nicht zu" ,
18+ "Stimme eher nicht zu" ,
19+ "Weder noch" ,
20+ "Stimme eher zu" ,
21+ "Stimme voll und ganz zu" ,
22+ ] ,
23+ } ,
24+ } as const ;
25+
1226const argsConfig = {
1327 options : {
1428 channel : {
@@ -17,6 +31,11 @@ const argsConfig = {
1731 default : false ,
1832 multiple : false ,
1933 } ,
34+ preset : {
35+ type : "string" ,
36+ short : "p" ,
37+ multiple : false ,
38+ } ,
2039 extendable : {
2140 type : "boolean" ,
2241 short : "e" ,
@@ -45,6 +64,9 @@ Usage: $COMMAND_PREFIX$poll [Optionen?] [Hier die Frage] ; [Antwort 1] ; [Antwor
4564Optionen:
4665\t-c, --channel
4766\t\t\tSendet die Umfrage in den Umfragenchannel, um den Slowmode zu umgehen
67+ \t-p <preset>, --preset <preset>
68+ \t\t\tVerwendet ein vorgefertigtes Set an Antwortmöglichkeiten. Aktuelle Presets:
69+ \t\t\t- likert: Eine 5-Punkte Skala von "Stimme überhaupt nicht zu" bis "Stimme voll und ganz zu"
4870\t-e, --extendable
4971\t\t\tErlaubt die Erweiterung der Antwortmöglichkeiten durch jeden User mit .extend als Reply
5072\t-s, --straw
@@ -82,10 +104,29 @@ Optionen:
82104 }
83105
84106 const [ question , ...pollOptions ] = pollService . parsePollOptionString ( positionals . join ( " " ) ) ;
107+
85108 if ( question . length > pollEmbedService . TEXT_LIMIT ) {
86109 return "Bruder die Frage ist ja länger als mein Schwands :c" ;
87110 }
88111
112+ const preset = options . preset
113+ ? pollOptionsPresets [ options . preset as keyof typeof pollOptionsPresets ]
114+ : null ;
115+ if ( options . preset && ! preset ) {
116+ return `Bruder das preset ${ options . preset } gibt's nicht 🙄` ;
117+ }
118+ if ( preset && pollOptions . length > 0 ) {
119+ return "Bruder entweder preset oder eigene Antwortmöglichkeiten, aber nicht beides 🙄" ;
120+ }
121+
122+ if ( preset ) {
123+ pollOptions . push ( ...preset . options ) ;
124+ // Check with estimated length, does not need to be perfect. Otherwise discord will just error out later
125+ if ( preset . preface . length + question . length + 1 > pollEmbedService . TEXT_LIMIT ) {
126+ return "Bruder die vorgegebene Frage ist zu lang in Kombination mit dem preset :c" ;
127+ }
128+ }
129+
89130 let pollOptionsTextLength = 0 ;
90131 for ( const pollOption of pollOptions ) {
91132 pollOptionsTextLength += pollOption . length ;
@@ -115,6 +156,9 @@ Optionen:
115156 if ( extendable && options . delayed ) {
116157 return "Bruder du kannst -e nicht mit -d kombinieren. 🙄" ;
117158 }
159+ if ( extendable && preset && ! preset . permitsExtension ) {
160+ return `Bruder du kannst -e nicht mit dem preset ${ options . preset } kombinieren. 🙄` ;
161+ }
118162
119163 let finishTime : Date | undefined ;
120164 if ( options . delayed ) {
@@ -144,6 +188,7 @@ Optionen:
144188 channel ,
145189 {
146190 question,
191+ preface : preset ?. preface ?? undefined ,
147192 anonymous : ! ! finishTime ,
148193 author : message . author ,
149194 extendable,
0 commit comments