@@ -8,7 +8,25 @@ import chalk from "chalk";
88import { ICommand } from "wokcommands" ;
99import { classModel , IClass } from "../../models/classModel" ;
1010import { checkForRoles } from "../../rolesOps" ;
11+ import { sleep } from "../../util" ;
1112
13+ // Splits any size list into lists of at most `max_list_len`
14+ function split_list < T > ( list : T [ ] , max_list_len : number ) : T [ ] [ ] {
15+ const class_chunks : T [ ] [ ] = [ ] ;
16+ for ( let i = 0 ; i < list . length ; i += max_list_len ) {
17+ class_chunks . push ( list . slice ( i , i + max_list_len ) ) ;
18+ }
19+ return class_chunks ;
20+ }
21+
22+ // consumes a Class and returns Message Selec tOption data
23+ function create_option_from_class ( _class : IClass ) : MessageSelectOptionData {
24+ return {
25+ label : _class . CODE ,
26+ value : _class . CODE ,
27+ description : _class . TITLE ,
28+ } ;
29+ }
1230export default {
1331 name : "csClassPoll" ,
1432 category : "owner" ,
@@ -20,7 +38,11 @@ export default {
2038 ownerOnly : true ,
2139
2240 callback : async ( { client, interaction : msgInt } ) => {
23- if ( ! checkForRoles ( msgInt . guild ! ) ) {
41+ if ( msgInt . guild === null ) {
42+ console . log ( chalk . red ( "No guild" ) ) ;
43+ return ;
44+ }
45+ if ( ! ( await checkForRoles ( msgInt . guild ) ) ) {
2446 msgInt . reply (
2547 "Please run the `/ createRoles` command in this server to create the necessary roles for this poll!"
2648 ) ;
@@ -30,7 +52,7 @@ export default {
3052 const classes = await classModel . find ( { } ) . sort ( { CODE : 1 } ) ;
3153 const class_chunks = split_list ( classes , 25 ) ;
3254
33- let rows : MessageActionRow [ ] = [ ] ;
55+ const rows : MessageActionRow [ ] = [ ] ;
3456 for ( let index = 0 ; index < class_chunks . length ; index ++ ) {
3557 const menu = new MessageSelectMenu ( ) ;
3658 menu . setCustomId ( `csClassPoll+${ index } ` ) ;
@@ -63,12 +85,10 @@ export default {
6385
6486 msgInt . reply ( { embeds : [ infoEmbed ] , components : row_chunks [ index ] } ) ;
6587 } else {
66- msgInt . channel ! . send ( { components : row_chunks [ index ] } ) ;
88+ msgInt . reply ( { components : row_chunks [ index ] } ) ;
6789 }
68- // await on a new promise that resolves itself after a delay of 200 ms
69- await new Promise ( ( resolve ) => {
70- setTimeout ( resolve , 200 ) ;
71- } ) ;
90+
91+ await sleep ( 200 ) ;
7292 }
7393
7494 // Log the command usage
@@ -83,21 +103,3 @@ export default {
83103 ) ;
84104 } ,
85105} as ICommand ;
86-
87- // Splits any size list into lists of at most `max_list_len`
88- function split_list ( list : Array < any > , max_list_len : number ) {
89- let class_chunks = [ ] ;
90- for ( let i = 0 ; i < list . length ; i += max_list_len ) {
91- class_chunks . push ( list . slice ( i , i + max_list_len ) ) ;
92- }
93- return class_chunks ;
94- }
95-
96- // consumes a Class and returns Message Selec tOption data
97- function create_option_from_class ( _class : IClass ) : MessageSelectOptionData {
98- return {
99- label : _class . CODE ,
100- value : _class . CODE ,
101- description : _class . TITLE ,
102- } ;
103- }
0 commit comments