@open-discord-bots/framework 0.2.10 → 0.2.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/api/main.js +1 -1
  2. package/dist/api/modules/action.d.ts +9 -9
  3. package/dist/api/modules/action.js +3 -3
  4. package/dist/api/modules/base.d.ts +5 -3
  5. package/dist/api/modules/base.js +8 -4
  6. package/dist/api/modules/builder.d.ts +41 -41
  7. package/dist/api/modules/builder.js +20 -20
  8. package/dist/api/modules/checker.d.ts +3 -3
  9. package/dist/api/modules/client.js +2 -2
  10. package/dist/api/modules/console.d.ts +15 -15
  11. package/dist/api/modules/console.js +31 -31
  12. package/dist/api/modules/event.js +2 -2
  13. package/dist/api/modules/helpmenu.js +1 -1
  14. package/dist/api/modules/progressbar.js +1 -0
  15. package/dist/api/modules/responder.d.ts +37 -37
  16. package/dist/api/modules/responder.js +13 -13
  17. package/dist/api/modules/statistic.js +0 -2
  18. package/dist/api/modules/worker.d.ts +14 -14
  19. package/dist/api/modules/worker.js +9 -9
  20. package/dist/cli/editConfig.js +6 -20
  21. package/dist/startup/pluginLauncher.js +6 -4
  22. package/dist/utilities/index.d.ts +2 -2
  23. package/package.json +4 -4
  24. package/src/api/main.ts +1 -1
  25. package/src/api/modules/action.ts +10 -10
  26. package/src/api/modules/base.ts +12 -8
  27. package/src/api/modules/builder.ts +53 -53
  28. package/src/api/modules/checker.ts +3 -3
  29. package/src/api/modules/client.ts +15 -15
  30. package/src/api/modules/component.txt +350 -0
  31. package/src/api/modules/config.ts +1 -1
  32. package/src/api/modules/console.ts +26 -26
  33. package/src/api/modules/database.ts +1 -1
  34. package/src/api/modules/event.ts +5 -5
  35. package/src/api/modules/helpmenu.ts +3 -3
  36. package/src/api/modules/language.ts +1 -1
  37. package/src/api/modules/plugin.ts +1 -1
  38. package/src/api/modules/progressbar.ts +3 -1
  39. package/src/api/modules/responder.ts +43 -43
  40. package/src/api/modules/statistic.ts +0 -1
  41. package/src/api/modules/worker.ts +25 -25
  42. package/src/cli/editConfig.ts +20 -34
  43. package/src/startup/compilation.ts +2 -2
  44. package/src/startup/pluginLauncher.ts +9 -6
  45. package/src/utilities/index.ts +3 -3
  46. package/tsconfig.json +1 -0
@@ -15,20 +15,20 @@ import { ODDropdownData, ODMessageBuildResult, ODMessageBuildSentResult, ODModal
15
15
  *
16
16
  * This class can't be used stand-alone & needs to be extended from!
17
17
  */
18
- export class ODResponderImplementation<Instance,Source extends string,Params,WorkerIds extends string = string> extends ODManagerData {
18
+ export class ODResponderImplementation<Instance,Origin extends string,Params,WorkerIds extends string = string> extends ODManagerData {
19
19
  /**The manager that has all workers of this implementation */
20
- workers: ODWorkerManager<Instance,Source,Params,WorkerIds>
20
+ workers: ODWorkerManager<Instance,Origin,Params,WorkerIds>
21
21
  /**The `commandName` or `customId` needs to match this string or regex for this responder to be executed. */
22
22
  match: string|RegExp
23
23
 
24
- constructor(id:ODValidId, match:string|RegExp, callback?:ODWorkerCallback<Instance,Source,Params>, priority?:number, callbackId?:ODValidId){
24
+ constructor(id:ODValidId, match:string|RegExp, callback?:ODWorkerCallback<Instance,Origin,Params>, priority?:number, callbackId?:ODValidId){
25
25
  super(id)
26
26
  this.match = match
27
27
  this.workers = new ODWorkerManager("descending")
28
28
  if (callback) this.workers.add(new ODWorker(callbackId ? callbackId : id,priority ?? 0,callback))
29
29
  }
30
30
  /**Execute all workers & return the result. */
31
- async respond(instance:Instance, source:Source, params:Params): Promise<void> {
31
+ async respond(instance:Instance, origin:Origin, params:Params): Promise<void> {
32
32
  throw new ODSystemError("Tried to build an unimplemented ODResponderImplementation")
33
33
  }
34
34
  }
@@ -36,7 +36,7 @@ export class ODResponderImplementation<Instance,Source extends string,Params,Wor
36
36
  /**## ODResponderTimeoutErrorCallback `type`
37
37
  * This is the callback for the responder timeout function. It will be executed when something went wrong or the action takes too much time.
38
38
  */
39
- export type ODResponderTimeoutErrorCallback<Instance, Source extends "slash"|"text"|"button"|"dropdown"|"modal"|"other"|"context-menu"|"autocomplete"> = (instance:Instance, source:Source) => void|Promise<void>
39
+ export type ODResponderTimeoutErrorCallback<Instance, Origin extends "slash"|"text"|"button"|"dropdown"|"modal"|"other"|"context-menu"|"autocomplete"> = (instance:Instance, origin:Origin) => void|Promise<void>
40
40
 
41
41
  /**## ODResponderManager `class`
42
42
  * This is an Open Discord responder manager.
@@ -86,7 +86,7 @@ export class ODResponderManager<
86
86
  /**## ODCommandResponderManagerIdConstraint `type`
87
87
  * The constraint/layout for id mappings/interfaces of the `ODCommandResponderManager` class.
88
88
  */
89
- export type ODCommandResponderManagerIdConstraint = Record<string,{source:"slash"|"text",params:object,workers:string}>
89
+ export type ODCommandResponderManagerIdConstraint = Record<string,{origin:"slash"|"text",params:object,workers:string}>
90
90
 
91
91
  /**## ODCommandResponderManager `class`
92
92
  * This is an Open Discord command responder manager.
@@ -141,14 +141,14 @@ export class ODCommandResponderManager<IdList extends ODCommandResponderManagerI
141
141
  return res
142
142
  }
143
143
 
144
- get<CommandResponderId extends keyof ODNoGeneric<IdList>>(id:CommandResponderId): ODCommandResponder<IdList[CommandResponderId]["source"],IdList[CommandResponderId]["params"],IdList[CommandResponderId]["workers"]>
144
+ get<CommandResponderId extends keyof ODNoGeneric<IdList>>(id:CommandResponderId): ODCommandResponder<IdList[CommandResponderId]["origin"],IdList[CommandResponderId]["params"],IdList[CommandResponderId]["workers"]>
145
145
  get(id:ODValidId): ODCommandResponder<"slash"|"text",any>|null
146
146
 
147
147
  get(id:ODValidId): ODCommandResponder<"slash"|"text",any>|null {
148
148
  return super.get(id)
149
149
  }
150
150
 
151
- remove<CommandResponderId extends keyof ODNoGeneric<IdList>>(id:CommandResponderId): ODCommandResponder<IdList[CommandResponderId]["source"],IdList[CommandResponderId]["params"],IdList[CommandResponderId]["workers"]>
151
+ remove<CommandResponderId extends keyof ODNoGeneric<IdList>>(id:CommandResponderId): ODCommandResponder<IdList[CommandResponderId]["origin"],IdList[CommandResponderId]["params"],IdList[CommandResponderId]["workers"]>
152
152
  remove(id:ODValidId): ODCommandResponder<"slash"|"text",any>|null
153
153
 
154
154
  remove(id:ODValidId): ODCommandResponder<"slash"|"text",any>|null {
@@ -471,26 +471,26 @@ export class ODCommandResponderInstance {
471
471
  *
472
472
  * This class manages all workers which are executed when the related command is triggered.
473
473
  */
474
- export class ODCommandResponder<Source extends "slash"|"text",Params,WorkerIds extends string = string> extends ODResponderImplementation<ODCommandResponderInstance,Source,Params,WorkerIds> {
474
+ export class ODCommandResponder<Origin extends "slash"|"text",Params,WorkerIds extends string = string> extends ODResponderImplementation<ODCommandResponderInstance,Origin,Params,WorkerIds> {
475
475
  /**The prefix of the text command needs to match this */
476
476
  prefix: string
477
477
 
478
- constructor(id:ODValidId, prefix:string, match:string|RegExp, callback?:ODWorkerCallback<ODCommandResponderInstance,Source,Params>, priority?:number, callbackId?:ODValidId){
478
+ constructor(id:ODValidId, prefix:string, match:string|RegExp, callback?:ODWorkerCallback<ODCommandResponderInstance,Origin,Params>, priority?:number, callbackId?:ODValidId){
479
479
  super(id,match,callback,priority,callbackId)
480
480
  this.prefix = prefix
481
481
  }
482
482
 
483
483
  /**Respond to this command */
484
- async respond(instance:ODCommandResponderInstance, source:Source, params:Params){
484
+ async respond(instance:ODCommandResponderInstance, origin:Origin, params:Params){
485
485
  //wait for workers to finish
486
- await this.workers.executeWorkers(instance,source,params)
486
+ await this.workers.executeWorkers(instance,origin,params)
487
487
  }
488
488
  }
489
489
 
490
490
  /**## ODButtonResponderManagerIdConstraint `type`
491
491
  * The constraint/layout for id mappings/interfaces of the `ODButtonResponderManager` class.
492
492
  */
493
- export type ODButtonResponderManagerIdConstraint = Record<string,{source:"button",params:object,workers:string}>
493
+ export type ODButtonResponderManagerIdConstraint = Record<string,{origin:"button",params:object,workers:string}>
494
494
 
495
495
  /**## ODButtonResponderManager `class`
496
496
  * This is an Open Discord button responder manager.
@@ -543,14 +543,14 @@ export class ODButtonResponderManager<IdList extends ODButtonResponderManagerIdC
543
543
  return res
544
544
  }
545
545
 
546
- get<ButtonResponderId extends keyof ODNoGeneric<IdList>>(id:ButtonResponderId): ODButtonResponder<IdList[ButtonResponderId]["source"],IdList[ButtonResponderId]["params"],IdList[ButtonResponderId]["workers"]>
546
+ get<ButtonResponderId extends keyof ODNoGeneric<IdList>>(id:ButtonResponderId): ODButtonResponder<IdList[ButtonResponderId]["origin"],IdList[ButtonResponderId]["params"],IdList[ButtonResponderId]["workers"]>
547
547
  get(id:ODValidId): ODButtonResponder<"button",any>|null
548
548
 
549
549
  get(id:ODValidId): ODButtonResponder<"button",any>|null {
550
550
  return super.get(id)
551
551
  }
552
552
 
553
- remove<ButtonResponderId extends keyof ODNoGeneric<IdList>>(id:ButtonResponderId): ODButtonResponder<IdList[ButtonResponderId]["source"],IdList[ButtonResponderId]["params"],IdList[ButtonResponderId]["workers"]>
553
+ remove<ButtonResponderId extends keyof ODNoGeneric<IdList>>(id:ButtonResponderId): ODButtonResponder<IdList[ButtonResponderId]["origin"],IdList[ButtonResponderId]["params"],IdList[ButtonResponderId]["workers"]>
554
554
  remove(id:ODValidId): ODButtonResponder<"button",any>|null
555
555
 
556
556
  remove(id:ODValidId): ODButtonResponder<"button",any>|null {
@@ -703,18 +703,18 @@ export class ODButtonResponderInstance {
703
703
  *
704
704
  * This class manages all workers which are executed when the related button is triggered.
705
705
  */
706
- export class ODButtonResponder<Source extends string,Params,WorkerIds extends string = string> extends ODResponderImplementation<ODButtonResponderInstance,Source,Params,WorkerIds> {
706
+ export class ODButtonResponder<Origin extends string,Params,WorkerIds extends string = string> extends ODResponderImplementation<ODButtonResponderInstance,Origin,Params,WorkerIds> {
707
707
  /**Respond to this button */
708
- async respond(instance:ODButtonResponderInstance, source:Source, params:Params){
708
+ async respond(instance:ODButtonResponderInstance, origin:Origin, params:Params){
709
709
  //wait for workers to finish
710
- await this.workers.executeWorkers(instance,source,params)
710
+ await this.workers.executeWorkers(instance,origin,params)
711
711
  }
712
712
  }
713
713
 
714
714
  /**## ODDropdownResponderManagerIdConstraint `type`
715
715
  * The constraint/layout for id mappings/interfaces of the `ODDropdownResponderManager` class.
716
716
  */
717
- export type ODDropdownResponderManagerIdConstraint = Record<string,{source:"dropdown",params:object,workers:string}>
717
+ export type ODDropdownResponderManagerIdConstraint = Record<string,{origin:"dropdown",params:object,workers:string}>
718
718
 
719
719
  /**## ODDropdownResponderManager `class`
720
720
  * This is an Open Discord dropdown responder manager.
@@ -767,14 +767,14 @@ export class ODDropdownResponderManager<IdList extends ODDropdownResponderManage
767
767
  return res
768
768
  }
769
769
 
770
- get<DropdownResponderId extends keyof ODNoGeneric<IdList>>(id:DropdownResponderId): ODDropdownResponder<IdList[DropdownResponderId]["source"],IdList[DropdownResponderId]["params"],IdList[DropdownResponderId]["workers"]>
770
+ get<DropdownResponderId extends keyof ODNoGeneric<IdList>>(id:DropdownResponderId): ODDropdownResponder<IdList[DropdownResponderId]["origin"],IdList[DropdownResponderId]["params"],IdList[DropdownResponderId]["workers"]>
771
771
  get(id:ODValidId): ODDropdownResponder<"dropdown",any>|null
772
772
 
773
773
  get(id:ODValidId): ODDropdownResponder<"dropdown",any>|null {
774
774
  return super.get(id)
775
775
  }
776
776
 
777
- remove<DropdownResponderId extends keyof ODNoGeneric<IdList>>(id:DropdownResponderId): ODDropdownResponder<IdList[DropdownResponderId]["source"],IdList[DropdownResponderId]["params"],IdList[DropdownResponderId]["workers"]>
777
+ remove<DropdownResponderId extends keyof ODNoGeneric<IdList>>(id:DropdownResponderId): ODDropdownResponder<IdList[DropdownResponderId]["origin"],IdList[DropdownResponderId]["params"],IdList[DropdownResponderId]["workers"]>
778
778
  remove(id:ODValidId): ODDropdownResponder<"dropdown",any>|null
779
779
 
780
780
  remove(id:ODValidId): ODDropdownResponder<"dropdown",any>|null {
@@ -1018,18 +1018,18 @@ export class ODDropdownResponderInstance {
1018
1018
  *
1019
1019
  * This class manages all workers which are executed when the related dropdown is triggered.
1020
1020
  */
1021
- export class ODDropdownResponder<Source extends string,Params,WorkerIds extends string = string> extends ODResponderImplementation<ODDropdownResponderInstance,Source,Params,WorkerIds> {
1021
+ export class ODDropdownResponder<Origin extends string,Params,WorkerIds extends string = string> extends ODResponderImplementation<ODDropdownResponderInstance,Origin,Params,WorkerIds> {
1022
1022
  /**Respond to this dropdown */
1023
- async respond(instance:ODDropdownResponderInstance, source:Source, params:Params){
1023
+ async respond(instance:ODDropdownResponderInstance, origin:Origin, params:Params){
1024
1024
  //wait for workers to finish
1025
- await this.workers.executeWorkers(instance,source,params)
1025
+ await this.workers.executeWorkers(instance,origin,params)
1026
1026
  }
1027
1027
  }
1028
1028
 
1029
1029
  /**## ODModalResponderManagerIdConstraint `type`
1030
1030
  * The constraint/layout for id mappings/interfaces of the `ODModalResponderManager` class.
1031
1031
  */
1032
- export type ODModalResponderManagerIdConstraint = Record<string,{source:"modal",params:object,workers:string}>
1032
+ export type ODModalResponderManagerIdConstraint = Record<string,{origin:"modal",params:object,workers:string}>
1033
1033
 
1034
1034
  /**## ODModalResponderManager `class`
1035
1035
  * This is an Open Discord modal responder manager.
@@ -1082,14 +1082,14 @@ export class ODModalResponderManager<IdList extends ODModalResponderManagerIdCon
1082
1082
  return res
1083
1083
  }
1084
1084
 
1085
- get<ModalResponderId extends keyof ODNoGeneric<IdList>>(id:ModalResponderId): ODModalResponder<IdList[ModalResponderId]["source"],IdList[ModalResponderId]["params"],IdList[ModalResponderId]["workers"]>
1085
+ get<ModalResponderId extends keyof ODNoGeneric<IdList>>(id:ModalResponderId): ODModalResponder<IdList[ModalResponderId]["origin"],IdList[ModalResponderId]["params"],IdList[ModalResponderId]["workers"]>
1086
1086
  get(id:ODValidId): ODModalResponder<"modal",any>|null
1087
1087
 
1088
1088
  get(id:ODValidId): ODModalResponder<"modal",any>|null {
1089
1089
  return super.get(id)
1090
1090
  }
1091
1091
 
1092
- remove<ModalResponderId extends keyof ODNoGeneric<IdList>>(id:ModalResponderId): ODModalResponder<IdList[ModalResponderId]["source"],IdList[ModalResponderId]["params"],IdList[ModalResponderId]["workers"]>
1092
+ remove<ModalResponderId extends keyof ODNoGeneric<IdList>>(id:ModalResponderId): ODModalResponder<IdList[ModalResponderId]["origin"],IdList[ModalResponderId]["params"],IdList[ModalResponderId]["workers"]>
1093
1093
  remove(id:ODValidId): ODModalResponder<"modal",any>|null
1094
1094
 
1095
1095
  remove(id:ODValidId): ODModalResponder<"modal",any>|null {
@@ -1225,18 +1225,18 @@ export class ODModalResponderInstance {
1225
1225
  *
1226
1226
  * This class manages all workers which are executed when the related modal is triggered.
1227
1227
  */
1228
- export class ODModalResponder<Source extends string,Params,WorkerIds extends string = string> extends ODResponderImplementation<ODModalResponderInstance,Source,Params,WorkerIds> {
1228
+ export class ODModalResponder<Origin extends string,Params,WorkerIds extends string = string> extends ODResponderImplementation<ODModalResponderInstance,Origin,Params,WorkerIds> {
1229
1229
  /**Respond to this modal */
1230
- async respond(instance:ODModalResponderInstance, source:Source, params:Params){
1230
+ async respond(instance:ODModalResponderInstance, origin:Origin, params:Params){
1231
1231
  //wait for workers to finish
1232
- await this.workers.executeWorkers(instance,source,params)
1232
+ await this.workers.executeWorkers(instance,origin,params)
1233
1233
  }
1234
1234
  }
1235
1235
 
1236
1236
  /**## ODContextMenuResponderManagerIdConstraint `type`
1237
1237
  * The constraint/layout for id mappings/interfaces of the `ODContextMenuResponderManager` class.
1238
1238
  */
1239
- export type ODContextMenuResponderManagerIdConstraint = Record<string,{source:"context-menu",params:object,workers:string}>
1239
+ export type ODContextMenuResponderManagerIdConstraint = Record<string,{origin:"context-menu",params:object,workers:string}>
1240
1240
 
1241
1241
  /**## ODContextMenuResponderManager `class`
1242
1242
  * This is an Open Discord context menu responder manager.
@@ -1282,14 +1282,14 @@ export class ODContextMenuResponderManager<IdList extends ODContextMenuResponder
1282
1282
  return res
1283
1283
  }
1284
1284
 
1285
- get<ModalResponderId extends keyof ODNoGeneric<IdList>>(id:ModalResponderId): ODContextMenuResponder<IdList[ModalResponderId]["source"],IdList[ModalResponderId]["params"],IdList[ModalResponderId]["workers"]>
1285
+ get<ModalResponderId extends keyof ODNoGeneric<IdList>>(id:ModalResponderId): ODContextMenuResponder<IdList[ModalResponderId]["origin"],IdList[ModalResponderId]["params"],IdList[ModalResponderId]["workers"]>
1286
1286
  get(id:ODValidId): ODContextMenuResponder<"context-menu",any>|null
1287
1287
 
1288
1288
  get(id:ODValidId): ODContextMenuResponder<"context-menu",any>|null {
1289
1289
  return super.get(id)
1290
1290
  }
1291
1291
 
1292
- remove<ModalResponderId extends keyof ODNoGeneric<IdList>>(id:ModalResponderId): ODContextMenuResponder<IdList[ModalResponderId]["source"],IdList[ModalResponderId]["params"],IdList[ModalResponderId]["workers"]>
1292
+ remove<ModalResponderId extends keyof ODNoGeneric<IdList>>(id:ModalResponderId): ODContextMenuResponder<IdList[ModalResponderId]["origin"],IdList[ModalResponderId]["params"],IdList[ModalResponderId]["workers"]>
1293
1293
  remove(id:ODValidId): ODContextMenuResponder<"context-menu",any>|null
1294
1294
 
1295
1295
  remove(id:ODValidId): ODContextMenuResponder<"context-menu",any>|null {
@@ -1411,18 +1411,18 @@ export class ODContextMenuResponderInstance {
1411
1411
  *
1412
1412
  * This class manages all workers which are executed when the related context menu is triggered.
1413
1413
  */
1414
- export class ODContextMenuResponder<Source extends string,Params,WorkerIds extends string = string> extends ODResponderImplementation<ODContextMenuResponderInstance,Source,Params,WorkerIds> {
1414
+ export class ODContextMenuResponder<Origin extends string,Params,WorkerIds extends string = string> extends ODResponderImplementation<ODContextMenuResponderInstance,Origin,Params,WorkerIds> {
1415
1415
  /**Respond to this button */
1416
- async respond(instance:ODContextMenuResponderInstance, source:Source, params:Params){
1416
+ async respond(instance:ODContextMenuResponderInstance, origin:Origin, params:Params){
1417
1417
  //wait for workers to finish
1418
- await this.workers.executeWorkers(instance,source,params)
1418
+ await this.workers.executeWorkers(instance,origin,params)
1419
1419
  }
1420
1420
  }
1421
1421
 
1422
1422
  /**## ODAutocompleteResponderManagerIdConstraint `type`
1423
1423
  * The constraint/layout for id mappings/interfaces of the `ODAutocompleteResponderManager` class.
1424
1424
  */
1425
- export type ODAutocompleteResponderManagerIdConstraint = Record<string,{source:"autocomplete",params:object,workers:string}>
1425
+ export type ODAutocompleteResponderManagerIdConstraint = Record<string,{origin:"autocomplete",params:object,workers:string}>
1426
1426
 
1427
1427
  /**## ODAutocompleteResponderManager `class`
1428
1428
  * This is an Open Discord autocomplete responder manager.
@@ -1468,14 +1468,14 @@ export class ODAutocompleteResponderManager<IdList extends ODAutocompleteRespond
1468
1468
  return res
1469
1469
  }
1470
1470
 
1471
- get<AutocompleteResponderId extends keyof ODNoGeneric<IdList>>(id:AutocompleteResponderId): ODAutocompleteResponder<IdList[AutocompleteResponderId]["source"],IdList[AutocompleteResponderId]["params"],IdList[AutocompleteResponderId]["workers"]>
1471
+ get<AutocompleteResponderId extends keyof ODNoGeneric<IdList>>(id:AutocompleteResponderId): ODAutocompleteResponder<IdList[AutocompleteResponderId]["origin"],IdList[AutocompleteResponderId]["params"],IdList[AutocompleteResponderId]["workers"]>
1472
1472
  get(id:ODValidId): ODAutocompleteResponder<"autocomplete",any>|null
1473
1473
 
1474
1474
  get(id:ODValidId): ODAutocompleteResponder<"autocomplete",any>|null {
1475
1475
  return super.get(id)
1476
1476
  }
1477
1477
 
1478
- remove<AutocompleteResponderId extends keyof ODNoGeneric<IdList>>(id:AutocompleteResponderId): ODAutocompleteResponder<IdList[AutocompleteResponderId]["source"],IdList[AutocompleteResponderId]["params"],IdList[AutocompleteResponderId]["workers"]>
1478
+ remove<AutocompleteResponderId extends keyof ODNoGeneric<IdList>>(id:AutocompleteResponderId): ODAutocompleteResponder<IdList[AutocompleteResponderId]["origin"],IdList[AutocompleteResponderId]["params"],IdList[AutocompleteResponderId]["workers"]>
1479
1479
  remove(id:ODValidId): ODAutocompleteResponder<"autocomplete",any>|null
1480
1480
 
1481
1481
  remove(id:ODValidId): ODAutocompleteResponder<"autocomplete",any>|null {
@@ -1564,18 +1564,18 @@ export class ODAutocompleteResponderInstance {
1564
1564
  *
1565
1565
  * This class manages all workers which are executed when the related autocomplete is triggered.
1566
1566
  */
1567
- export class ODAutocompleteResponder<Source extends string,Params,WorkerIds extends string = string> extends ODResponderImplementation<ODAutocompleteResponderInstance,Source,Params,WorkerIds> {
1567
+ export class ODAutocompleteResponder<Origin extends string,Params,WorkerIds extends string = string> extends ODResponderImplementation<ODAutocompleteResponderInstance,Origin,Params,WorkerIds> {
1568
1568
  /**The slash command of the autocomplete should match the following regex. */
1569
1569
  cmdMatch: string|RegExp
1570
1570
 
1571
- constructor(id:ODValidId,cmdMatch:string|RegExp,match:string|RegExp,callback?:ODWorkerCallback<ODAutocompleteResponderInstance,Source,Params>,priority?:number,callbackId?:ODValidId){
1571
+ constructor(id:ODValidId,cmdMatch:string|RegExp,match:string|RegExp,callback?:ODWorkerCallback<ODAutocompleteResponderInstance,Origin,Params>,priority?:number,callbackId?:ODValidId){
1572
1572
  super(id,match,callback,priority,callbackId)
1573
1573
  this.cmdMatch = cmdMatch
1574
1574
  }
1575
1575
 
1576
1576
  /**Respond to this autocomplete interaction. */
1577
- async respond(instance:ODAutocompleteResponderInstance, source:Source, params:Params){
1577
+ async respond(instance:ODAutocompleteResponderInstance, origin:Origin, params:Params){
1578
1578
  //wait for workers to finish
1579
- await this.workers.executeWorkers(instance,source,params)
1579
+ await this.workers.executeWorkers(instance,origin,params)
1580
1580
  }
1581
1581
  }
@@ -91,7 +91,6 @@ export class ODStatisticManager<IdList extends ODStatisticManagerIdConstraint =
91
91
  if (!this.database) return
92
92
  const data = await this.database.getAll()
93
93
  for (const d of data){
94
- if (!this.database) return
95
94
  await this.database.delete(d.category,d.key)
96
95
  }
97
96
  }
@@ -1,12 +1,12 @@
1
1
  ///////////////////////////////////////
2
2
  //WORKER MODULE
3
3
  ///////////////////////////////////////
4
- import { ODId, ODManager, ODManagerData, ODValidId } from "./base"
4
+ import { ODId, ODManager, ODManagerData, ODSystemError, ODValidId } from "./base"
5
5
 
6
6
  /**## ODWorkerCallback `type`
7
7
  * This is the callback used in `ODWorker`!
8
8
  */
9
- export type ODWorkerCallback<Instance, Source extends string, Params> = (instance:Instance, params:Params, source:Source, cancel:() => void) => void|Promise<void>
9
+ export type ODWorkerCallback<Instance, Origin extends string, Params> = (instance:Instance, params:Params, origin:Origin, cancel:() => void) => void|Promise<void>
10
10
 
11
11
  /**## ODWorker `class`
12
12
  * This is an Open Discord worker.
@@ -15,16 +15,16 @@ export type ODWorkerCallback<Instance, Source extends string, Params> = (instanc
15
15
  *
16
16
  * - It has an `id` for identification of the function
17
17
  * - A `priority` to know when to execute this callback (related to others)
18
- * - It knows who called this callback (`source`)
18
+ * - It knows who called this callback (`origin`)
19
19
  * - And much more!
20
20
  */
21
- export class ODWorker<Instance, Source extends string, Params> extends ODManagerData {
21
+ export class ODWorker<Instance, Origin extends string, Params> extends ODManagerData {
22
22
  /**The priority of this worker */
23
23
  priority: number
24
24
  /**The main callback of this worker */
25
- callback: ODWorkerCallback<Instance,Source,Params>
25
+ callback: ODWorkerCallback<Instance,Origin,Params>
26
26
 
27
- constructor(id:ODValidId, priority:number, callback:ODWorkerCallback<Instance,Source,Params>){
27
+ constructor(id:ODValidId, priority:number, callback:ODWorkerCallback<Instance,Origin,Params>){
28
28
  super(id)
29
29
  this.priority = priority
30
30
  this.callback = callback
@@ -38,11 +38,11 @@ export class ODWorker<Instance, Source extends string, Params> extends ODManager
38
38
  *
39
39
  * You can register a custom worker in this class to create a message or button.
40
40
  */
41
- export class ODWorkerManager<Instance, Source extends string, Params,WorkerIds extends string = string> extends ODManager<ODWorker<Instance,Source,Params>> {
41
+ export class ODWorkerManager<Instance, Origin extends string, Params,WorkerIds extends string = string> extends ODManager<ODWorker<Instance,Origin,Params>> {
42
42
  /**The order of execution for workers inside this manager. */
43
43
  #priorityOrder: "ascending"|"descending"
44
44
  /**The backup worker will be executed when one of the workers fails or cancels execution. */
45
- backupWorker: ODWorker<{reason:"error"|"cancel"},Source,Params>|null = null
45
+ backupWorker: ODWorker<{reason:"error"|"cancel"},Origin,Params>|null = null
46
46
 
47
47
  constructor(priorityOrder:"ascending"|"descending"){
48
48
  super()
@@ -58,8 +58,8 @@ export class ODWorkerManager<Instance, Source extends string, Params,WorkerIds e
58
58
  else return b.priority-a.priority
59
59
  })
60
60
  }
61
- /**Execute all workers on an instance using the given source & parameters. */
62
- async executeWorkers(instance:Instance, source:Source, params:Params){
61
+ /**Execute all workers on an instance using the given origin & parameters. */
62
+ async executeWorkers(instance:Instance, origin:Origin, params:Params){
63
63
  const derefParams = {...params}
64
64
  const workers = this.getSortedWorkers(this.#priorityOrder)
65
65
  let didCancel = false
@@ -68,40 +68,40 @@ export class ODWorkerManager<Instance, Source extends string, Params,WorkerIds e
68
68
  for (const worker of workers){
69
69
  if (didCancel) break
70
70
  try {
71
- await worker.callback(instance,derefParams,source,() => {
71
+ await worker.callback(instance,derefParams,origin,() => {
72
72
  didCancel = true
73
73
  })
74
- }catch(err){
75
- process.emit("uncaughtException",err)
74
+ }catch(err:any){
75
+ process.emit("uncaughtException",new ODSystemError(err))
76
76
  didCrash = true
77
77
  }
78
78
  }
79
79
  if (didCancel && this.backupWorker){
80
80
  try{
81
- await this.backupWorker.callback({reason:"cancel"},derefParams,source,() => {})
82
- }catch(err){
83
- process.emit("uncaughtException",err)
81
+ await this.backupWorker.callback({reason:"cancel"},derefParams,origin,() => {})
82
+ }catch(err:any){
83
+ process.emit("uncaughtException",new ODSystemError(err))
84
84
  }
85
85
  }else if (didCrash && this.backupWorker){
86
86
  try{
87
- await this.backupWorker.callback({reason:"error"},derefParams,source,() => {})
88
- }catch(err){
89
- process.emit("uncaughtException",err)
87
+ await this.backupWorker.callback({reason:"error"},derefParams,origin,() => {})
88
+ }catch(err:any){
89
+ process.emit("uncaughtException",new ODSystemError(err))
90
90
  }
91
91
  }
92
92
  }
93
93
 
94
- get(id:WorkerIds): ODWorker<Instance,Source,Params>
95
- get(id:ODValidId): ODWorker<Instance,Source,Params>|null
94
+ get(id:WorkerIds): ODWorker<Instance,Origin,Params>
95
+ get(id:ODValidId): ODWorker<Instance,Origin,Params>|null
96
96
 
97
- get(id:ODValidId): ODWorker<Instance,Source,Params>|null {
97
+ get(id:ODValidId): ODWorker<Instance,Origin,Params>|null {
98
98
  return super.get(id)
99
99
  }
100
100
 
101
- remove(id:WorkerIds): ODWorker<Instance,Source,Params>
102
- remove(id:ODValidId): ODWorker<Instance,Source,Params>|null
101
+ remove(id:WorkerIds): ODWorker<Instance,Origin,Params>
102
+ remove(id:ODValidId): ODWorker<Instance,Origin,Params>|null
103
103
 
104
- remove(id:ODValidId): ODWorker<Instance,Source,Params>|null {
104
+ remove(id:ODValidId): ODWorker<Instance,Origin,Params>|null {
105
105
  return super.remove(id)
106
106
  }
107
107
 
@@ -37,7 +37,7 @@ export class ODCliEditConfigInstance {
37
37
  await this.chooseConfigStructure(checker,async () => {await this.renderEditConfig(backFn)},checker.structure,configData,{},NaN,["("+checker.config.path+")"])
38
38
  }
39
39
 
40
- private async chooseConfigStructure(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerStructure,data:api.ODValidJsonType,parent:object|any[],parentIndex:string|number,path:(string|number)[]){
40
+ private async chooseConfigStructure(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerStructure,data:api.ODValidJsonType,parent:Record<string,any>|any[],parentIndex:string|number,path:(string|number)[]){
41
41
  if (structure instanceof api.ODCheckerObjectStructure && typeof data == "object" && !Array.isArray(data) && data) await this.renderConfigObjectStructureSelector(checker,backFn,structure,data,parent,parentIndex,path)
42
42
  else if (structure instanceof api.ODCheckerEnabledObjectStructure && typeof data == "object" && !Array.isArray(data) && data) await this.renderConfigEnabledObjectStructureSelector(checker,backFn,structure,data,parent,parentIndex,path)
43
43
  else if (structure instanceof api.ODCheckerObjectSwitchStructure && typeof data == "object" && !Array.isArray(data) && data) await this.renderConfigObjectSwitchStructureSelector(checker,backFn,structure,data,parent,parentIndex,path)
@@ -50,7 +50,7 @@ export class ODCliEditConfigInstance {
50
50
  else terminal.red.bold("❌ Unable to detect type of variable! Please try to edit this property in the JSON file itself!")
51
51
  }
52
52
 
53
- private async renderConfigObjectStructureSelector(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerObjectStructure,data:object,parent:object,parentIndex:string|number,path:(string|number)[]){
53
+ private async renderConfigObjectStructureSelector(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerObjectStructure,data:Record<string,any>,parent:Record<string,any>,parentIndex:string|number,path:(string|number)[]){
54
54
  if (typeof data != "object" || Array.isArray(data)) throw new api.ODSystemError("OD CLI => Property is not of the type 'object'. Please check your config for possible errors. (index: "+parentIndex+", path: "+path.join(".")+")")
55
55
  renderHeader(this.opts,path)
56
56
  terminal(ansis.bold.green("Please select which variable you would like to edit.\n")+ansis.italic.gray("(use arrow keys to navigate, go back using escape)\n"))
@@ -81,7 +81,7 @@ export class ODCliEditConfigInstance {
81
81
  await this.chooseConfigStructure(checker,async () => {await this.renderConfigObjectStructureSelector(checker,backFn,structure,data,parent,parentIndex,path)},subStructure.checker,subData,data,subStructure.key,[...path,subStructure.key])
82
82
  }
83
83
 
84
- private async renderConfigEnabledObjectStructureSelector(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerEnabledObjectStructure,data:object,parent:object,parentIndex:string|number,path:(string|number)[]){
84
+ private async renderConfigEnabledObjectStructureSelector(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerEnabledObjectStructure,data:Record<string,any>,parent:Record<string,any>,parentIndex:string|number,path:(string|number)[]){
85
85
  if (typeof data != "object" || Array.isArray(data)) throw new api.ODSystemError("OD CLI => Property is not of the type 'object'. Please check your config for possible errors. (index: "+parentIndex+", path: "+path.join(".")+")")
86
86
  const enabledProperty = structure.options.property
87
87
  const subStructure = structure.options.checker
@@ -96,7 +96,7 @@ export class ODCliEditConfigInstance {
96
96
  await this.chooseConfigStructure(checker,backFn,subStructure,data,parent,parentIndex,path)
97
97
  }
98
98
 
99
- private async renderConfigObjectSwitchStructureSelector(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerObjectSwitchStructure,data:object,parent:object,parentIndex:string|number,path:(string|number)[]){
99
+ private async renderConfigObjectSwitchStructureSelector(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerObjectSwitchStructure,data:Record<string,any>,parent:Record<string,any>,parentIndex:string|number,path:(string|number)[]){
100
100
  if (typeof data != "object" || Array.isArray(data)) throw new api.ODSystemError("OD CLI => Property is not of the type 'object'. Please check your config for possible errors. (index: "+parentIndex+", path: "+path.join(".")+")")
101
101
  if (!structure.options.objects) return await backFn()
102
102
 
@@ -174,7 +174,7 @@ export class ODCliEditConfigInstance {
174
174
  await this.chooseConfigStructure(checker,async () => {await this.renderConfigArrayStructureEditSelector(checker,backFn,arrayStructure,structure,data,parent,parentIndex,path)},structure,subData,data,dataAnswer.selectedIndex,[...path,dataAnswer.selectedIndex])
175
175
  }
176
176
 
177
- private async renderConfigArrayStructureMoveSelector(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),arrayStructure:api.ODCheckerArrayStructure,structure:api.ODCheckerStructure,data:any[],parent:object,parentIndex:string|number,path:(string|number)[]){
177
+ private async renderConfigArrayStructureMoveSelector(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),arrayStructure:api.ODCheckerArrayStructure,structure:api.ODCheckerStructure,data:any[],parent:Record<string,any>,parentIndex:string|number,path:(string|number)[]): Promise<void> {
178
178
  const propertyName = arrayStructure.options.cliDisplayPropertyName ?? "index"
179
179
  renderHeader(this.opts,path)
180
180
  terminal(ansis.bold.green("Please select the "+propertyName+" you would like to move.\n")+ansis.italic.gray("(use arrow keys to navigate, go back using escape)\n"))
@@ -267,7 +267,7 @@ export class ODCliEditConfigInstance {
267
267
  await backFn()
268
268
  }
269
269
 
270
- private async renderConfigBooleanStructureEditor(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerBooleanStructure,data:boolean,parent:object,parentIndex:string|number,path:(string|number)[]){
270
+ private async renderConfigBooleanStructureEditor(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerBooleanStructure,data:boolean,parent:Record<string,any>,parentIndex:string|number,path:(string|number)[]){
271
271
  if (typeof data != "boolean") throw new api.ODSystemError("OD CLI => Property is not of the type 'boolean'. Please check your config for possible errors. (index: "+parentIndex+", path: "+path.join(".")+")")
272
272
  renderHeader(this.opts,path)
273
273
  terminal(ansis.bold.green("You are now editing "+(typeof parentIndex == "string" ? "the boolean property "+ansis.blue("\""+parentIndex+"\"") : "boolean property "+ansis.blue("#"+(parentIndex+1)))+".\n")+ansis.italic.gray("(use arrow keys to navigate, go back using escape)\n"))
@@ -309,7 +309,7 @@ export class ODCliEditConfigInstance {
309
309
  }
310
310
  }
311
311
 
312
- private async renderConfigNumberStructureEditor(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerNumberStructure,data:number,parent:object,parentIndex:string|number,path:(string|number)[],prefillValue?:string){
312
+ private async renderConfigNumberStructureEditor(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerNumberStructure,data:number,parent:Record<string,any>,parentIndex:string|number,path:(string|number)[],prefillValue?:string){
313
313
  if (typeof data != "number") throw new api.ODSystemError("OD CLI => Property is not of the type 'number'. Please check your config for possible errors. (index: "+parentIndex+", path: "+path.join(".")+")")
314
314
  renderHeader(this.opts,path)
315
315
  terminal(ansis.bold.green("You are now editing "+(typeof parentIndex == "string" ? "the number property "+ansis.blue("\""+parentIndex+"\"") : "number property "+ansis.blue("#"+(parentIndex+1)))+".\n")+ansis.italic.gray("(insert a new value and press enter, go back using escape)\n"))
@@ -348,7 +348,7 @@ export class ODCliEditConfigInstance {
348
348
  }
349
349
  }
350
350
 
351
- private async renderConfigStringStructureEditor(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerStringStructure,data:string,parent:object,parentIndex:string|number,path:(string|number)[],prefillValue?:string){
351
+ private async renderConfigStringStructureEditor(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerStringStructure,data:string,parent:Record<string,any>,parentIndex:string|number,path:(string|number)[],prefillValue?:string){
352
352
  if (typeof data != "string") throw new api.ODSystemError("OD CLI => Property is not of the type 'string'. Please check your config for possible errors. (index: "+parentIndex+", path: "+path.join(".")+")")
353
353
  renderHeader(this.opts,path)
354
354
  terminal(ansis.bold.green("You are now editing "+(typeof parentIndex == "string" ? "the string property "+ansis.blue("\""+parentIndex+"\"") : "string property "+ansis.blue("#"+(parentIndex+1)))+".\n")+ansis.italic.gray("(insert a new value and press enter, go back using escape)\n"))
@@ -409,7 +409,7 @@ export class ODCliEditConfigInstance {
409
409
  }
410
410
  }
411
411
 
412
- private async renderConfigNullStructureEditor(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerNullStructure,data:null,parent:object,parentIndex:string|number,path:(string|number)[]){
412
+ private async renderConfigNullStructureEditor(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerNullStructure,data:null,parent:Record<string,any>,parentIndex:string|number,path:(string|number)[]){
413
413
  if (data !== null) throw new api.ODSystemError("OD CLI => Property is not of the type 'null'. Please check your config for possible errors. (index: "+parentIndex+", path: "+path.join(".")+")")
414
414
  renderHeader(this.opts,path)
415
415
  terminal(ansis.bold.green("You are now editing "+(typeof parentIndex == "string" ? "the null property "+ansis.blue("\""+parentIndex+"\"") : "null property "+ansis.blue("#"+(parentIndex+1)))+".\n")+ansis.italic.gray("(use arrow keys to navigate, go back using escape)\n"))
@@ -486,7 +486,7 @@ export class ODCliEditConfigInstance {
486
486
  else if (answer.selectedText.startsWith("Edit as null") && structure.options.null) await this.renderConfigNullStructureEditor(checker,async () => {await this.renderConfigTypeSwitchStructureEditor(checker,backFn,structure,data,parent,parentIndex,path)},structure.options.null,null,parent,parentIndex,path)
487
487
  }
488
488
 
489
- private getArrayPreviewStructureNameLength(structure:api.ODCheckerStructure,data:api.ODValidJsonType,parent:object,parentIndex:string|number): number {
489
+ private getArrayPreviewStructureNameLength(structure:api.ODCheckerStructure,data:api.ODValidJsonType,parent:Record<string,any>,parentIndex:string|number): number {
490
490
  if (structure instanceof api.ODCheckerBooleanStructure && typeof data == "boolean") return data.toString().length
491
491
  else if (structure instanceof api.ODCheckerNumberStructure && typeof data == "number") return data.toString().length
492
492
  else if (structure instanceof api.ODCheckerStringStructure && typeof data == "string") return data.length
@@ -494,7 +494,7 @@ export class ODCliEditConfigInstance {
494
494
  else if (structure instanceof api.ODCheckerArrayStructure && Array.isArray(data)) return "Array".length
495
495
  else if (structure instanceof api.ODCheckerObjectStructure && typeof data == "object" && !Array.isArray(data) && data){
496
496
  if (!structure.options.cliDisplayKeyInParentArray) return "Object".length
497
- else return data[structure.options.cliDisplayKeyInParentArray].toString().length
497
+ else return data[structure.options.cliDisplayKeyInParentArray]?.toString().length ?? 0
498
498
 
499
499
  }else if (structure instanceof api.ODCheckerEnabledObjectStructure && typeof data == "object" && !Array.isArray(data) && data){
500
500
  const subStructure = structure.options.checker
@@ -522,16 +522,16 @@ export class ODCliEditConfigInstance {
522
522
  }else return "<unknown-property>".length
523
523
  }
524
524
 
525
- private getArrayPreviewFromStructure(structure:api.ODCheckerStructure,data:api.ODValidJsonType,parent:object,parentIndex:string|number,nameLength:number): string {
525
+ private getArrayPreviewFromStructure(structure:api.ODCheckerStructure,data:api.ODValidJsonType,parent:Record<string,any>,parentIndex:string|number,nameLength:number): string {
526
526
  if (structure instanceof api.ODCheckerBooleanStructure && typeof data == "boolean") return data.toString()
527
527
  else if (structure instanceof api.ODCheckerNumberStructure && typeof data == "number") return data.toString()
528
528
  else if (structure instanceof api.ODCheckerStringStructure && typeof data == "string") return data
529
529
  else if (structure instanceof api.ODCheckerNullStructure && data === null) return "Null"
530
530
  else if (structure instanceof api.ODCheckerArrayStructure && Array.isArray(data)) return "Array"
531
531
  else if (structure instanceof api.ODCheckerObjectStructure && typeof data == "object" && !Array.isArray(data) && data){
532
- const additionalKeys = (structure.options.cliDisplayAdditionalKeysInParentArray ?? []).map((key) => key+": "+data[key].toString()).join(", ")
532
+ const additionalKeys = (structure.options.cliDisplayAdditionalKeysInParentArray ?? []).map((key) => key+": "+data[key]?.toString()).join(", ")
533
533
  if (!structure.options.cliDisplayKeyInParentArray) return "Object"
534
- else return data[structure.options.cliDisplayKeyInParentArray].toString().padEnd(nameLength+5," ")+ansis.gray(additionalKeys.length > 0 ? "("+additionalKeys+")" : "")
534
+ else return data[structure.options.cliDisplayKeyInParentArray]?.toString().padEnd(nameLength+5," ")+ansis.gray(additionalKeys.length > 0 ? "("+additionalKeys+")" : "")
535
535
 
536
536
  }else if (structure instanceof api.ODCheckerEnabledObjectStructure && typeof data == "object" && !Array.isArray(data) && data){
537
537
  const subStructure = structure.options.checker
@@ -572,7 +572,7 @@ export class ODCliEditConfigInstance {
572
572
  else await backFn()
573
573
  }
574
574
 
575
- private async renderAdditionConfigObjectStructure(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),nextFn:((data:any) => api.ODPromiseVoid),structure:api.ODCheckerObjectStructure,parent:object|any[],parentIndex:string|number,path:(string|number)[],localPath:(string|number)[],localData:object={}){
575
+ private async renderAdditionConfigObjectStructure(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),nextFn:((data:any) => api.ODPromiseVoid),structure:api.ODCheckerObjectStructure,parent:object|any[],parentIndex:string|number,path:(string|number)[],localPath:(string|number)[],localData:Record<string,any>={}){
576
576
  const children = structure.options.children ?? []
577
577
  const skipKeys = (structure.options.cliInitSkipKeys ?? [])
578
578
  //add skipped properties
@@ -606,7 +606,7 @@ export class ODCliEditConfigInstance {
606
606
  })
607
607
  }
608
608
 
609
- private async configureAdditionObjectProperties(checker:api.ODChecker,children:{key:string,checker:api.ODCheckerStructure}[],currentIndex:number,localData:object,path:(string|number)[],localPath:(string|number)[],backFn:(() => api.ODPromiseVoid),nextFn:(() => api.ODPromiseVoid)){
609
+ private async configureAdditionObjectProperties(checker:api.ODChecker,children:{key:string,checker:api.ODCheckerStructure}[],currentIndex:number,localData:Record<string,any>,path:(string|number)[],localPath:(string|number)[],backFn:(() => api.ODPromiseVoid),nextFn:(() => api.ODPromiseVoid)){
610
610
  if (children.length < 1) return await nextFn()
611
611
 
612
612
  const child = children[currentIndex]
@@ -632,22 +632,15 @@ export class ODCliEditConfigInstance {
632
632
  else if (typeof enabledValue == "boolean") propertyStructure = new api.ODCheckerBooleanStructure("opendiscord:CLI-checker-enabled-object-structure",{})
633
633
  else throw new Error("OD CLI => enabled object structure has an invalid type of enabledProperty. It must be a primitive boolean/number/string.")
634
634
 
635
- const localData = {}
635
+ const localData: Record<string,any> = {}
636
636
  await this.chooseAdditionConfigStructure(checker,backFn,async (data) => {
637
637
  if (data === enabledValue) await this.renderAdditionConfigObjectStructure(checker,async () => {await this.renderAdditionConfigEnabledObjectStructure(checker,backFn,nextFn,structure,parent,parentIndex,path,localPath)},nextFn,subStructure,parent,parentIndex,path,localPath,localData)
638
638
  else{
639
639
  localData[enabledProperty] = data
640
640
  //copy old object checker to new object checker => all options get de-referenced (this is needed for the new object skip keys are temporary)
641
- const newStructure = new api.ODCheckerObjectStructure(subStructure.id,{children:[]})
641
+ const newStructure = new api.ODCheckerObjectStructure(subStructure.id,structuredClone(subStructure.options))
642
642
 
643
- //copy all options over to the new checker
644
- newStructure.options.children = [...subStructure.options.children]
645
- newStructure.options.cliInitSkipKeys = subStructure.options.children.map((child) => child.key)
646
- for (const key of Object.keys(subStructure.options)){
647
- if (key != "children" && key != "cliInitSkipKeys") newStructure.options[key] = subStructure.options[key]
648
- }
649
-
650
- //adds all properties to object as "skipKeys", then continues to next function
643
+ //continues to next function
651
644
  await this.renderAdditionConfigObjectStructure(checker,async () => {await this.renderAdditionConfigEnabledObjectStructure(checker,backFn,nextFn,structure,parent,parentIndex,path,localPath)},nextFn,newStructure,parent,parentIndex,path,localPath,localData)
652
645
  await nextFn(localData)
653
646
  }
@@ -672,14 +665,7 @@ export class ODCliEditConfigInstance {
672
665
 
673
666
  //copy old object checker to new object checker => all options get de-referenced (this is needed for the new object switch properties which are temporary)
674
667
  const oldStructure = objectTemplate.checker
675
- const newStructure = new api.ODCheckerObjectStructure(oldStructure.id,{children:[]})
676
-
677
- //copy all options over to the new checker
678
- newStructure.options.children = [...oldStructure.options.children]
679
- newStructure.options.cliInitSkipKeys = [...(oldStructure.options.cliInitSkipKeys ?? [])]
680
- for (const key of Object.keys(oldStructure.options)){
681
- if (key != "children" && key != "cliInitSkipKeys") newStructure.options[key] = oldStructure.options[key]
682
- }
668
+ const newStructure = new api.ODCheckerObjectStructure(oldStructure.id,structuredClone(oldStructure.options))
683
669
 
684
670
  //add the keys of the object switch properties to the 'cliInitSkipKeys' because they need to be skipped.
685
671
  objectTemplate.properties.map((p) => p.key).forEach((p) => {
@@ -3,7 +3,7 @@ import ts from "typescript"
3
3
  import { createHash, Hash } from "crypto"
4
4
  import nodepath from "path"
5
5
  import ansis from "ansis"
6
- import type { ODProjectType } from "../api"
6
+ import type { ODPluginData, ODProjectType } from "../api"
7
7
 
8
8
  /** ## What is this?
9
9
  * This is a function which compares `./src/` with a hash stored in `./dist/hash.txt`.
@@ -117,7 +117,7 @@ export function frameworkStartup(startupFlags:string[],project:ODProjectType,sta
117
117
  const pluginJsonPath = nodepath.join(pluginPath, "plugin.json")
118
118
  if (fs.existsSync(pluginJsonPath)){
119
119
  try{
120
- const pluginData = JSON.parse(fs.readFileSync(pluginJsonPath).toString())
120
+ const pluginData: ODPluginData = JSON.parse(fs.readFileSync(pluginJsonPath).toString())
121
121
  if (pluginData.npmDependencies && Array.isArray(pluginData.npmDependencies)){
122
122
  pluginData.npmDependencies.forEach((dep) => {
123
123
  if (typeof dep === "string" && dep.trim()){