@mostfeatured/dbi 0.0.8 → 0.0.11

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 (59) hide show
  1. package/dist/DBI.d.ts +40 -16
  2. package/dist/DBI.d.ts.map +1 -1
  3. package/dist/DBI.js +61 -17
  4. package/dist/DBI.js.map +1 -1
  5. package/dist/index.d.ts +2 -2
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/methods/hookInteractionListeners.d.ts.map +1 -1
  9. package/dist/methods/hookInteractionListeners.js +9 -5
  10. package/dist/methods/hookInteractionListeners.js.map +1 -1
  11. package/dist/methods/publishInteractions.d.ts +4 -1
  12. package/dist/methods/publishInteractions.d.ts.map +1 -1
  13. package/dist/methods/publishInteractions.js +83 -10
  14. package/dist/methods/publishInteractions.js.map +1 -1
  15. package/dist/test.d.ts +2 -0
  16. package/dist/test.d.ts.map +1 -0
  17. package/dist/test.js +46 -0
  18. package/dist/test.js.map +1 -0
  19. package/dist/types/Button.d.ts +2 -6
  20. package/dist/types/Button.d.ts.map +1 -1
  21. package/dist/types/Button.js.map +1 -1
  22. package/dist/types/Interaction.d.ts +5 -0
  23. package/dist/types/Interaction.d.ts.map +1 -1
  24. package/dist/types/Interaction.js.map +1 -1
  25. package/dist/types/InteractionLocale.d.ts +22 -0
  26. package/dist/types/InteractionLocale.d.ts.map +1 -0
  27. package/dist/types/InteractionLocale.js +15 -0
  28. package/dist/types/InteractionLocale.js.map +1 -0
  29. package/dist/types/Locale.d.ts +3 -2
  30. package/dist/types/Locale.d.ts.map +1 -1
  31. package/dist/types/Locale.js +6 -4
  32. package/dist/types/Locale.js.map +1 -1
  33. package/dist/types/Modal.d.ts +2 -6
  34. package/dist/types/Modal.d.ts.map +1 -1
  35. package/dist/types/Modal.js.map +1 -1
  36. package/dist/types/SelectMenu.d.ts +2 -6
  37. package/dist/types/SelectMenu.d.ts.map +1 -1
  38. package/dist/types/SelectMenu.js.map +1 -1
  39. package/dist/utils/MemoryStore.d.ts +1 -1
  40. package/dist/utils/MemoryStore.d.ts.map +1 -1
  41. package/dist/utils/MemoryStore.js +1 -1
  42. package/dist/utils/MemoryStore.js.map +1 -1
  43. package/dist/utils/recursiveImport.d.ts +4 -1
  44. package/dist/utils/recursiveImport.d.ts.map +1 -1
  45. package/dist/utils/recursiveImport.js +6 -3
  46. package/dist/utils/recursiveImport.js.map +1 -1
  47. package/package.json +2 -3
  48. package/src/DBI.ts +91 -36
  49. package/src/index.ts +3 -3
  50. package/src/methods/hookInteractionListeners.ts +9 -5
  51. package/src/methods/publishInteractions.ts +85 -8
  52. package/src/types/Button.ts +2 -2
  53. package/src/types/Interaction.ts +2 -0
  54. package/src/types/InteractionLocale.ts +28 -0
  55. package/src/types/Locale.ts +6 -5
  56. package/src/types/Modal.ts +2 -2
  57. package/src/types/SelectMenu.ts +2 -2
  58. package/src/utils/MemoryStore.ts +1 -1
  59. package/src/utils/recursiveImport.ts +6 -3
@@ -1 +1 @@
1
- {"version":3,"file":"SelectMenu.js","sourceRoot":"","sources":["../../src/types/SelectMenu.ts"],"names":[],"mappings":";;;;AAAA,oEAAiC;AAEjC,+CAAuE;AACvE,gDAAoD;AASpD,MAAa,aAAc,SAAQ,gCAAkB;IACnD,YAAY,GAAQ,EAAE,IAA2B;QAC/C,KAAK,CAAC,GAAG,EAAE;YACT,GAAI,IAAY;YAChB,IAAI,EAAE,YAAY;SACnB,CAAC,CAAC;IACL,CAAC;IAIQ,SAAS,CAAC,GAA6B,IAAwB,CAAC;IAAA,CAAC;IAE1E,MAAM,CAAC,GAAG,UAAwC;QAChD,OAAO;YACL,GAAG,IAAI,CAAC,OAAO;YACf,QAAQ,EAAE,IAAA,0BAAe,EAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC;YAC1D,IAAI,EAAE,oBAAO,CAAC,aAAa,CAAC,UAAU;SAChC,CAAA;IACV,CAAC;IAAA,CAAC;CACH;AAnBD,sCAmBC","sourcesContent":["import Discord from \"discord.js\";\r\nimport { DBI } from \"../DBI\";\r\nimport { DBIBaseInteraction, IDBIBaseExecuteCtx } from \"./Interaction\";\r\nimport { customIdBuilder } from \"../utils/customId\";\r\n\r\nexport interface IDBISelectMenuExecuteCtx extends IDBIBaseExecuteCtx {\r\n interaction: Discord.ButtonInteraction<Discord.CacheType>;\r\n data: (string | number | { [key: string]: any, $ref: string, $unRef(): boolean })[];\r\n}\r\n\r\nexport type TDBISelectMenuOmitted = Omit<DBIBaseInteraction, \"type\" | \"description\" | \"dbi\" | \"toJSON\">;\r\n\r\nexport class DBISelectMenu extends DBIBaseInteraction {\r\n constructor(dbi: DBI, args: TDBISelectMenuOmitted) {\r\n super(dbi, {\r\n ...(args as any),\r\n type: \"SelectMenu\",\r\n });\r\n }\r\n\r\n declare options: Omit<Discord.SelectMenuComponentData, \"customId\" | \"type\">;\r\n\r\n override onExecute(ctx: IDBISelectMenuExecuteCtx): Promise<any> | any { };\r\n\r\n toJSON(...customData: (string | number | object)[]): Discord.SelectMenuComponentData {\r\n return {\r\n ...this.options,\r\n customId: customIdBuilder(this.dbi, this.name, customData),\r\n type: Discord.ComponentType.SelectMenu\r\n } as any\r\n };\r\n}"]}
1
+ {"version":3,"file":"SelectMenu.js","sourceRoot":"","sources":["../../src/types/SelectMenu.ts"],"names":[],"mappings":";;;;AAAA,oEAAiC;AAEjC,+CAA2F;AAC3F,gDAAoD;AASpD,MAAa,aAAc,SAAQ,gCAAkB;IACnD,YAAY,GAAQ,EAAE,IAA2B;QAC/C,KAAK,CAAC,GAAG,EAAE;YACT,GAAI,IAAY;YAChB,IAAI,EAAE,YAAY;SACnB,CAAC,CAAC;IACL,CAAC;IAIQ,SAAS,CAAC,GAA6B,IAAwB,CAAC;IAAA,CAAC;IAE1E,MAAM,CAAC,GAAG,UAAwC;QAChD,OAAO;YACL,GAAG,IAAI,CAAC,OAAO;YACf,QAAQ,EAAE,IAAA,0BAAe,EAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC;YAC1D,IAAI,EAAE,oBAAO,CAAC,aAAa,CAAC,UAAU;SAChC,CAAA;IACV,CAAC;IAAA,CAAC;CACH;AAnBD,sCAmBC","sourcesContent":["import Discord from \"discord.js\";\r\nimport { DBI } from \"../DBI\";\r\nimport { DBIBaseInteraction, IDBIBaseExecuteCtx, TDBIReferencedData } from \"./Interaction\";\r\nimport { customIdBuilder } from \"../utils/customId\";\r\n\r\nexport interface IDBISelectMenuExecuteCtx extends IDBIBaseExecuteCtx {\r\n interaction: Discord.ButtonInteraction<Discord.CacheType>;\r\n data: TDBIReferencedData[];\r\n}\r\n\r\nexport type TDBISelectMenuOmitted = Omit<DBIBaseInteraction, \"type\" | \"description\" | \"dbi\" | \"toJSON\">;\r\n\r\nexport class DBISelectMenu extends DBIBaseInteraction {\r\n constructor(dbi: DBI, args: TDBISelectMenuOmitted) {\r\n super(dbi, {\r\n ...(args as any),\r\n type: \"SelectMenu\",\r\n });\r\n }\r\n\r\n declare options: Omit<Discord.SelectMenuComponentData, \"customId\" | \"type\">;\r\n\r\n override onExecute(ctx: IDBISelectMenuExecuteCtx): Promise<any> | any { };\r\n\r\n toJSON(...customData: (string | number | object)[]): Discord.SelectMenuComponentData {\r\n return {\r\n ...this.options,\r\n customId: customIdBuilder(this.dbi, this.name, customData),\r\n type: Discord.ComponentType.SelectMenu\r\n } as any\r\n };\r\n}"]}
@@ -3,7 +3,7 @@ export declare class MemoryStore {
3
3
  constructor();
4
4
  get(key: string, defaultValue?: any): Promise<any>;
5
5
  set(key: string, value: any): Promise<any>;
6
- del(key: string): Promise<boolean>;
6
+ delete(key: string): Promise<boolean>;
7
7
  has(key: string): Promise<boolean>;
8
8
  }
9
9
  //# sourceMappingURL=MemoryStore.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryStore.d.ts","sourceRoot":"","sources":["../../src/utils/MemoryStore.ts"],"names":[],"mappings":"AAEA,qBAAa,WAAW;IACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;;IAIrB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IASlD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAI1C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAGzC"}
1
+ {"version":3,"file":"MemoryStore.d.ts","sourceRoot":"","sources":["../../src/utils/MemoryStore.ts"],"names":[],"mappings":"AAEA,qBAAa,WAAW;IACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;;IAIrB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IASlD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAI1C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIrC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAGzC"}
@@ -19,7 +19,7 @@ class MemoryStore {
19
19
  async set(key, value) {
20
20
  return this.store = lodash_1.default.set(this.store, key, value);
21
21
  }
22
- async del(key) {
22
+ async delete(key) {
23
23
  return lodash_1.default.unset(this.store, key);
24
24
  }
25
25
  async has(key) {
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryStore.js","sourceRoot":"","sources":["../../src/utils/MemoryStore.ts"],"names":[],"mappings":";;;;AAAA,4DAAuB;AAEvB,MAAa,WAAW;IACtB,KAAK,CAAsB;IAC3B;QACE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAClB,CAAC;IACD,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,YAAkB;QACvC,IAAI,GAAG,GAAG,gBAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG,EAAE;YACR,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAC5B,OAAO,YAAY,CAAC;SACrB;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAU;QAC/B,OAAO,IAAI,CAAC,KAAK,GAAG,gBAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,gBAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,gBAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChC,CAAC;CACF;AAzBD,kCAyBC","sourcesContent":["import _ from \"lodash\";\r\n\r\nexport class MemoryStore {\r\n store: Record<string, any>;\r\n constructor() {\r\n this.store = {};\r\n }\r\n async get(key: string, defaultValue?: any): Promise<any> {\r\n let val = _.get(this.store, key);\r\n if (!val) {\r\n this.set(key, defaultValue);\r\n return defaultValue;\r\n }\r\n return val;\r\n }\r\n\r\n async set(key: string, value: any): Promise<any> {\r\n return this.store = _.set(this.store, key, value);\r\n }\r\n\r\n async del(key: string): Promise<boolean> {\r\n return _.unset(this.store, key);\r\n }\r\n\r\n async has(key: string): Promise<boolean> {\r\n return _.has(this.store, key);\r\n }\r\n}"]}
1
+ {"version":3,"file":"MemoryStore.js","sourceRoot":"","sources":["../../src/utils/MemoryStore.ts"],"names":[],"mappings":";;;;AAAA,4DAAuB;AAEvB,MAAa,WAAW;IACtB,KAAK,CAAsB;IAC3B;QACE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAClB,CAAC;IACD,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,YAAkB;QACvC,IAAI,GAAG,GAAG,gBAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG,EAAE;YACR,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAC5B,OAAO,YAAY,CAAC;SACrB;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAU;QAC/B,OAAO,IAAI,CAAC,KAAK,GAAG,gBAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,OAAO,gBAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,gBAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChC,CAAC;CACF;AAzBD,kCAyBC","sourcesContent":["import _ from \"lodash\";\r\n\r\nexport class MemoryStore {\r\n store: Record<string, any>;\r\n constructor() {\r\n this.store = {};\r\n }\r\n async get(key: string, defaultValue?: any): Promise<any> {\r\n let val = _.get(this.store, key);\r\n if (!val) {\r\n this.set(key, defaultValue);\r\n return defaultValue;\r\n }\r\n return val;\r\n }\r\n\r\n async set(key: string, value: any): Promise<any> {\r\n return this.store = _.set(this.store, key, value);\r\n }\r\n\r\n async delete(key: string): Promise<boolean> {\r\n return _.unset(this.store, key);\r\n }\r\n\r\n async has(key: string): Promise<boolean> {\r\n return _.has(this.store, key);\r\n }\r\n}"]}
@@ -1,2 +1,5 @@
1
- export declare function recursiveImport(folderPath: string): Promise<any>;
1
+ /**
2
+ * Usage: `await recursiveImport("./src", [".js", ".ts"])`
3
+ */
4
+ export declare function recursiveImport(folderPath: string, exts?: string[]): Promise<any>;
2
5
  //# sourceMappingURL=recursiveImport.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"recursiveImport.d.ts","sourceRoot":"","sources":["../../src/utils/recursiveImport.ts"],"names":[],"mappings":"AAGA,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAWtE"}
1
+ {"version":3,"file":"recursiveImport.d.ts","sourceRoot":"","sources":["../../src/utils/recursiveImport.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,CAWvG"}
@@ -4,14 +4,17 @@ exports.recursiveImport = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const fs_1 = tslib_1.__importDefault(require("fs"));
6
6
  const path_1 = tslib_1.__importDefault(require("path"));
7
- async function recursiveImport(folderPath) {
7
+ /**
8
+ * Usage: `await recursiveImport("./src", [".js", ".ts"])`
9
+ */
10
+ async function recursiveImport(folderPath, exts = [".js", ".ts"]) {
8
11
  let files = await fs_1.default.promises.readdir(folderPath, { withFileTypes: true });
9
12
  for (const file of files) {
10
13
  let filePath = path_1.default.resolve(folderPath, file.name);
11
14
  if (file.isDirectory()) {
12
- await recursiveImport(filePath);
15
+ await recursiveImport(filePath, exts);
13
16
  }
14
- else if (filePath.endsWith(".js")) {
17
+ else if (exts.some(i => filePath.endsWith(i))) {
15
18
  await Promise.resolve().then(() => tslib_1.__importStar(require(filePath)));
16
19
  }
17
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"recursiveImport.js","sourceRoot":"","sources":["../../src/utils/recursiveImport.ts"],"names":[],"mappings":";;;;AAAA,oDAAoB;AACpB,wDAAwB;AAEjB,KAAK,UAAU,eAAe,CAAC,UAAkB;IACtD,IAAI,KAAK,GAAG,MAAM,YAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,IAAI,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;YACtB,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAA;SAChC;aAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YACnC,gEAAa,QAAQ,GAAC,CAAA;SACvB;KACF;AACH,CAAC;AAXD,0CAWC","sourcesContent":["import fs from \"fs\";\r\nimport path from \"path\";\r\n\r\nexport async function recursiveImport(folderPath: string): Promise<any> {\r\n let files = await fs.promises.readdir(folderPath, { withFileTypes: true });\r\n\r\n for (const file of files) {\r\n let filePath = path.resolve(folderPath, file.name);\r\n if (file.isDirectory()) {\r\n await recursiveImport(filePath)\r\n } else if (filePath.endsWith(\".js\")) {\r\n await import(filePath)\r\n }\r\n }\r\n}"]}
1
+ {"version":3,"file":"recursiveImport.js","sourceRoot":"","sources":["../../src/utils/recursiveImport.ts"],"names":[],"mappings":";;;;AAAA,oDAAoB;AACpB,wDAAwB;AAExB;;GAEG;AACI,KAAK,UAAU,eAAe,CAAC,UAAkB,EAAE,OAAiB,CAAC,KAAK,EAAE,KAAK,CAAC;IACvF,IAAI,KAAK,GAAG,MAAM,YAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,IAAI,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;YACtB,MAAM,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;SACtC;aAAM,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;YAC/C,gEAAa,QAAQ,GAAC,CAAA;SACvB;KACF;AACH,CAAC;AAXD,0CAWC","sourcesContent":["import fs from \"fs\";\r\nimport path from \"path\";\r\n\r\n/**\r\n * Usage: `await recursiveImport(\"./src\", [\".js\", \".ts\"])`\r\n */\r\nexport async function recursiveImport(folderPath: string, exts: string[] = [\".js\", \".ts\"]): Promise<any> {\r\n let files = await fs.promises.readdir(folderPath, { withFileTypes: true });\r\n\r\n for (const file of files) {\r\n let filePath = path.resolve(folderPath, file.name);\r\n if (file.isDirectory()) {\r\n await recursiveImport(filePath, exts)\r\n } else if (exts.some(i => filePath.endsWith(i))) {\r\n await import(filePath)\r\n }\r\n }\r\n}"]}
package/package.json CHANGED
@@ -3,14 +3,13 @@
3
3
  "@discordjs/rest": "^1.0.1",
4
4
  "discord-api-types": "^0.37.0",
5
5
  "discord-hybrid-sharding": "^1.7.4",
6
- "discord.js": "^14.1.2",
7
- "eventemitter3": "^4.0.7",
6
+ "discord.js": "^14.3.0",
8
7
  "lodash": "^4.17.21",
9
8
  "snakecase-keys": "^5.4.2",
10
9
  "stuffs": "^0.1.17"
11
10
  },
12
11
  "name": "@mostfeatured/dbi",
13
- "version": "0.0.8",
12
+ "version": "0.0.11",
14
13
  "main": "dist/index.js",
15
14
  "type": "commonjs",
16
15
  "private": false,
package/src/DBI.ts CHANGED
@@ -15,28 +15,36 @@ import { hookEventListeners } from "./methods/hookEventListeners";
15
15
  import eventMap from "./data/eventMap.json";
16
16
  import { DBIModal, TDBIModalOmitted } from "./types/Modal";
17
17
  import * as Sharding from "discord-hybrid-sharding";
18
+ import _ from "lodash";
19
+ import { DBIInteractionLocale, TDBIInteractionLocaleOmitted } from "./types/InteractionLocale";
20
+
21
+ export interface DBIStore {
22
+ get(key: string, defaultValue?: any): Promise<any>;
23
+ set(key: string, value: any): Promise<void>;
24
+ delete(key: string): Promise<void>;
25
+ has(key: string): Promise<boolean>;
26
+ }
18
27
 
19
28
  export interface DBIConfig {
20
29
  discord: {
21
30
  token: string;
22
- options?: Discord.ClientOptions
31
+ options: Discord.ClientOptions
23
32
  }
24
- defaults?: {
25
- locale?: TDBILocaleString,
26
- directMessages?: boolean,
27
- defaultMemberPermissions?: Discord.PermissionsString[]
33
+ defaults: {
34
+ locale: TDBILocaleString,
35
+ directMessages: boolean,
36
+ defaultMemberPermissions: Discord.PermissionsString[]
28
37
  };
29
38
 
30
- sharding?: boolean;
31
-
32
- store?: {
33
- get(key: string, defaultValue?: any): Promise<any>;
34
- set(key: string, value: any): Promise<void>;
35
- del(key: string): Promise<void>;
36
- has(key: string): Promise<boolean>;
37
- }
39
+ sharding: boolean;
40
+ /**
41
+ * Persist store. (Default to MemoryStore thats not persis tho.)
42
+ */
43
+ store: DBIStore;
38
44
  }
39
45
 
46
+ export type TDBIConfigConstructor = Partial<DBIConfig>;
47
+
40
48
  export interface DBIRegisterAPI {
41
49
  ChatInput(cfg: TDBIChatInputOmitted): DBIChatInput;
42
50
  ChatInputOptions: typeof DBIChatInputOptions;
@@ -46,11 +54,12 @@ export interface DBIRegisterAPI {
46
54
  SelectMenu(cfg: TDBISelectMenuOmitted): DBISelectMenu;
47
55
  MessageContextMenu(cfg: TDBIMessageContextMenuOmitted): DBIMessageContextMenu;
48
56
  UserContextMenu(cfg: TDBIUserContextMenuOmitted): DBIUserContextMenu;
57
+ InteractionLocale(cfg: TDBIInteractionLocaleOmitted): DBIInteractionLocale;
49
58
  Modal(cfg: TDBIModalOmitted): DBIModal;
50
- onUnload(cb: ()=>Promise<any>);
59
+ onUnload(cb: () => Promise<any> | any): any;
51
60
  }
52
61
 
53
- export class DBI {
62
+ export class DBI<TOtherData = Record<string, any>> {
54
63
  namespace: string;
55
64
  config: DBIConfig;
56
65
  client: Discord.Client<true>;
@@ -59,7 +68,8 @@ export class DBI {
59
68
  events: Discord.Collection<string, DBIEvent>;
60
69
  plugins: Discord.Collection<string, any>;
61
70
  locales: Discord.Collection<string, DBILocale>;
62
- other: Record<string, any>;
71
+ interactionLocales: Discord.Collection<string, DBIInteractionLocale>;
72
+ other: TOtherData;
63
73
  eventMap: Record<string, string[]>;
64
74
  unloaders: Set<() => void>;
65
75
  registers: Set<(...args: any[]) => any>;
@@ -69,7 +79,7 @@ export class DBI {
69
79
  events: Events;
70
80
  cluster?: Sharding.Client;
71
81
  private _loaded: boolean;
72
- constructor(namespace: string, config: DBIConfig) {
82
+ constructor(namespace: string, config: TDBIConfigConstructor) {
73
83
  this.namespace = namespace;
74
84
 
75
85
  config.store = config.store as any || new MemoryStore();
@@ -79,7 +89,9 @@ export class DBI {
79
89
  directMessages: false,
80
90
  ...(config.defaults || {})
81
91
  };
92
+ config.sharding = config.sharding ?? false;
82
93
 
94
+ // @ts-ignore
83
95
  this.config = config;
84
96
 
85
97
  this.data = {
@@ -87,7 +99,8 @@ export class DBI {
87
99
  events: new Discord.Collection(),
88
100
  plugins: new Discord.Collection(),
89
101
  locales: new Discord.Collection(),
90
- other: {},
102
+ interactionLocales: new Discord.Collection(),
103
+ other: {} as TOtherData,
91
104
  eventMap,
92
105
  unloaders: new Set(),
93
106
  registers: new Set(),
@@ -103,7 +116,7 @@ export class DBI {
103
116
  shardCount: (Sharding as any).data.TOTAL_SHARDS
104
117
  } : {})
105
118
  });
106
- this.cluster = config.sharding ? new Sharding.Client(this.client) : null;
119
+ this.cluster = config.sharding ? new Sharding.Client(this.client) : undefined;
107
120
  this._hookListeners();
108
121
  this._loaded = false;
109
122
  }
@@ -128,11 +141,11 @@ export class DBI {
128
141
  for await (const cb of this.data.registers) {
129
142
  let ChatInput = function(cfg: DBIChatInput) {
130
143
  let dbiChatInput = new DBIChatInput(self, cfg);
131
- if (self.data.interactions.has(dbiChatInput.name)) throw new Error(`DBIChatInput "${dbiChatInput.name}" already loaded as "${self.data.interactions.get(dbiChatInput.name).type}"!`);
144
+ if (self.data.interactions.has(dbiChatInput.name)) throw new Error(`DBIChatInput "${dbiChatInput.name}" already loaded as "${self.data.interactions.get(dbiChatInput.name)?.type}"!`);
132
145
  self.data.interactions.set(dbiChatInput.name, dbiChatInput);
133
146
  return dbiChatInput;
134
147
  };
135
- ChatInput = Object.assign(ChatInput, class { constructor(...args) { return ChatInput.call(this, ...args); } });
148
+ ChatInput = Object.assign(ChatInput, class { constructor(...args: any[]) { return ChatInput.apply(this, args as any); } });
136
149
 
137
150
  let Event = function(cfg: TDBIEventOmitted) {
138
151
  let dbiEvent = new DBIEvent(self, cfg);
@@ -140,48 +153,47 @@ export class DBI {
140
153
  self.data.events.set(dbiEvent.name, dbiEvent);
141
154
  return dbiEvent;
142
155
  };
143
- Event = Object.assign(Event, class { constructor(...args) { return Event.call(this, ...args); } });
156
+ Event = Object.assign(Event, class { constructor(...args: any[]) { return Event.apply(this, args as any); } });
144
157
 
145
158
  let Button = function(cfg: TDBIButtonOmitted) {
146
159
  let dbiButton = new DBIButton(self, cfg);
147
- if (self.data.interactions.has(dbiButton.name)) throw new Error(`DBIButton "${dbiButton.name}" already loaded as "${self.data.interactions.get(dbiButton.name).type}"!`);
160
+ if (self.data.interactions.has(dbiButton.name)) throw new Error(`DBIButton "${dbiButton.name}" already loaded as "${self.data.interactions.get(dbiButton.name)?.type}"!`);
148
161
  self.data.interactions.set(dbiButton.name, dbiButton);
149
162
  return dbiButton;
150
163
  };
151
- Button = Object.assign(Button, class { constructor(...args) { return Button.call(this, ...args); } });
164
+ Button = Object.assign(Button, class { constructor(...args: any[]) { return Button.apply(this, args as any); } });
152
165
 
153
166
  let SelectMenu = function(cfg: TDBISelectMenuOmitted) {
154
167
  let dbiSelectMenu = new DBISelectMenu(self, cfg);
155
- if (self.data.interactions.has(dbiSelectMenu.name)) throw new Error(`DBISelectMenu "${dbiSelectMenu.name}" already loaded as "${self.data.interactions.get(dbiSelectMenu.name).type}"!`);
168
+ if (self.data.interactions.has(dbiSelectMenu.name)) throw new Error(`DBISelectMenu "${dbiSelectMenu.name}" already loaded as "${self.data.interactions.get(dbiSelectMenu.name)?.type}"!`);
156
169
  self.data.interactions.set(dbiSelectMenu.name, dbiSelectMenu);
157
170
  return dbiSelectMenu;
158
171
  };
159
- SelectMenu = Object.assign(SelectMenu, class { constructor(...args) { return SelectMenu.call(this, ...args); } });
172
+ SelectMenu = Object.assign(SelectMenu, class { constructor(...args: any[]) { return SelectMenu.apply(this, args as any); } });
160
173
 
161
174
  let MessageContextMenu = function(cfg: TDBIMessageContextMenuOmitted) {
162
175
  let dbiMessageContextMenu = new DBIMessageContextMenu(self, cfg);
163
- if (self.data.interactions.has(dbiMessageContextMenu.name)) throw new Error(`DBIMessageContextMenu "${dbiMessageContextMenu.name}" already loaded as "${self.data.interactions.get(dbiMessageContextMenu.name).type}"!`);
176
+ if (self.data.interactions.has(dbiMessageContextMenu.name)) throw new Error(`DBIMessageContextMenu "${dbiMessageContextMenu.name}" already loaded as "${self.data.interactions.get(dbiMessageContextMenu.name)?.type}"!`);
164
177
  self.data.interactions.set(dbiMessageContextMenu.name, dbiMessageContextMenu);
165
178
  return dbiMessageContextMenu;
166
179
  };
167
- MessageContextMenu = Object.assign(MessageContextMenu, class { constructor(...args) { return MessageContextMenu.call(this, ...args); } });
180
+ MessageContextMenu = Object.assign(MessageContextMenu, class { constructor(...args: any[]) { return MessageContextMenu.apply(this, args as any); } });
168
181
 
169
182
  let UserContextMenu = function(cfg: TDBIUserContextMenuOmitted) {
170
183
  let dbiUserContextMenu = new DBIUserContextMenu(self, cfg);
171
- if (self.data.interactions.has(dbiUserContextMenu.name)) throw new Error(`DBIUserContextMenu "${dbiUserContextMenu.name}" already loaded as "${self.data.interactions.get(dbiUserContextMenu.name).type}"!`);
184
+ if (self.data.interactions.has(dbiUserContextMenu.name)) throw new Error(`DBIUserContextMenu "${dbiUserContextMenu.name}" already loaded as "${self.data.interactions.get(dbiUserContextMenu.name)?.type}"!`);
172
185
  self.data.interactions.set(dbiUserContextMenu.name, dbiUserContextMenu);
173
186
  return dbiUserContextMenu;
174
187
  };
175
- UserContextMenu = Object.assign(UserContextMenu, class { constructor(...args) { return UserContextMenu.call(this, ...args); } });
188
+ UserContextMenu = Object.assign(UserContextMenu, class { constructor(...args: any[]) { return UserContextMenu.apply(this, args as any); } });
176
189
 
177
190
  let Modal = function(cfg: TDBIModalOmitted) {
178
191
  let dbiModal = new DBIModal(self, cfg);
179
- if (self.data.interactions.has(dbiModal.name)) throw new Error(`DBIModal "${dbiModal.name}" already loaded as "${self.data.interactions.get(dbiModal.name).type}"!`);
192
+ if (self.data.interactions.has(dbiModal.name)) throw new Error(`DBIModal "${dbiModal.name}" already loaded as "${self.data.interactions.get(dbiModal.name)?.type}"!`);
180
193
  self.data.interactions.set(dbiModal.name, dbiModal);
181
194
  return dbiModal;
182
195
  };
183
- Modal = Object.assign(Modal, class { constructor(...args) { return Modal.call(this, ...args); } });
184
-
196
+ Modal = Object.assign(Modal, class { constructor(...args: any[]) { return Modal.apply(this, args as any); } });
185
197
 
186
198
  let Locale = function(cfg: TDBILocaleConstructor) {
187
199
  let dbiLocale = new DBILocale(self, cfg);
@@ -189,7 +201,15 @@ export class DBI {
189
201
  self.data.locales.set(dbiLocale.name, dbiLocale);
190
202
  return dbiLocale;
191
203
  };
192
- Locale = Object.assign(Locale, class { constructor(...args) { return Locale.call(this, ...args); } });
204
+ Locale = Object.assign(Locale, class { constructor(...args: any[]) { return Locale.apply(this, args as any); } });
205
+
206
+ let InteractionLocale = function(cfg: TDBIInteractionLocaleOmitted) {
207
+ let dbiInteractionLocale = new DBIInteractionLocale(self, cfg);
208
+ if (self.data.interactionLocales.has(dbiInteractionLocale.name)) throw new Error(`DBIInteractionLocale "${dbiInteractionLocale.name}" already loaded!`);
209
+ self.data.interactionLocales.set(dbiInteractionLocale.name, dbiInteractionLocale);
210
+ return dbiInteractionLocale;
211
+ };
212
+ InteractionLocale = Object.assign(InteractionLocale, class { constructor(...args: any[]) { return InteractionLocale.apply(this, args as any); } });
193
213
 
194
214
  await cb({
195
215
  ChatInput,
@@ -201,13 +221,46 @@ export class DBI {
201
221
  MessageContextMenu,
202
222
  UserContextMenu,
203
223
  Modal,
204
- onUnload(cb) {
224
+ InteractionLocale,
225
+ onUnload(cb: ()=> Promise<any> | any) {
205
226
  self.data.registerUnloaders.add(cb);
206
227
  },
207
228
  });
208
229
  }
209
230
  }
210
231
 
232
+ /**
233
+ * Shorthands for modifying `dbi.data.other`
234
+ */
235
+ get<K extends keyof TOtherData>(k: K, defaultValue?: TOtherData[K]): TOtherData[K] {
236
+ if (this.has(k as any)) {
237
+ this.set(k, defaultValue);
238
+ return defaultValue;
239
+ }
240
+ return _.get(this.data.other, k);
241
+ }
242
+
243
+ /**
244
+ * Shorthands for modifying `dbi.data.other`
245
+ */
246
+ set<K extends keyof TOtherData>(k: K, v: TOtherData[K]): any {
247
+ this.data.other = _.set(this.data.other as any, k, v);
248
+ }
249
+
250
+ /**
251
+ * Shorthands for modifying `dbi.data.other`
252
+ */
253
+ has(k: string): boolean {
254
+ return _.has(this.data.other, k as any);
255
+ }
256
+
257
+ /**
258
+ * Shorthands for modifying `dbi.data.other`
259
+ */
260
+ delete(k: string): boolean {
261
+ return _.unset(this.data.other, k);
262
+ }
263
+
211
264
  async login(): Promise<any> {
212
265
  await this.client.login(this.config.discord.token);
213
266
  }
@@ -237,13 +290,14 @@ export class DBI {
237
290
  async publish(type: "Global", clear?: boolean): Promise<any>;
238
291
  async publish(type: "Guild", guildId: string, clear?: boolean): Promise<any>;
239
292
 
240
- async publish(...args) {
293
+ async publish(...args: any[]) {
241
294
  let interactions = this.data.interactions.filter(i => i.type == "ChatInput" || i.type == "MessageContextMenu" || i.type == "UserContextMenu") as any;
242
295
  switch (args[0]) {
243
296
  case "Global": {
244
297
  return await publishInteractions(
245
298
  this.config.discord.token,
246
299
  args[1] ? new Discord.Collection() : interactions,
300
+ this.data.interactionLocales,
247
301
  args[0]
248
302
  );
249
303
  }
@@ -251,6 +305,7 @@ export class DBI {
251
305
  return await publishInteractions(
252
306
  this.config.discord.token,
253
307
  args[2] ? new Discord.Collection() : interactions,
308
+ this.data.interactionLocales,
254
309
  args[0],
255
310
  args[1]
256
311
  );
package/src/index.ts CHANGED
@@ -1,7 +1,7 @@
1
- import { DBI, DBIConfig } from "./DBI";
1
+ import { DBI, TDBIConfigConstructor } from "./DBI";
2
2
  export { recursiveImport } from "./utils/recursiveImport";
3
3
  export { MemoryStore } from "./utils/MemoryStore";
4
4
 
5
- export function createDBI(namespace: string, cfg: DBIConfig): DBI {
6
- return new DBI(namespace, cfg);
5
+ export function createDBI<TOtherType = Record<string, any>>(namespace: string, cfg: TDBIConfigConstructor): DBI<TOtherType> {
6
+ return new DBI<TOtherType>(namespace, cfg);
7
7
  }
@@ -25,7 +25,7 @@ export function hookInteractionListeners(dbi: DBI): () => any {
25
25
  (
26
26
  (i.type == "Button" || i.type == "SelectMenu" || i.type == "Modal")
27
27
  && isUsesCustomId
28
- && parsedId.name == i.name
28
+ && parsedId?.name == i.name
29
29
  )
30
30
  )
31
31
  });
@@ -47,7 +47,7 @@ export function hookInteractionListeners(dbi: DBI): () => any {
47
47
  }
48
48
 
49
49
  let userLocaleName = inter.locale.split("-")[0];
50
- let userLocale = dbi.data.locales.has(userLocaleName) ? dbi.data.locales.get(userLocaleName) : dbi.data.locales.get(dbi.config.defaults.locale);
50
+ let userLocale = userLocaleName ? dbi.data.locales.get(userLocaleName) : dbi.data.locales.get(dbi.config.defaults.locale);
51
51
 
52
52
  let guildLocaleName = inter.guild ? inter.guild.preferredLocale.split("-")[0] : null;
53
53
  let guildLocale = guildLocaleName ? (dbi.data.locales.has(guildLocaleName) ? dbi.data.locales.get(guildLocaleName) : dbi.data.locales.get(dbi.config.defaults.locale)) : null;
@@ -68,10 +68,11 @@ export function hookInteractionListeners(dbi: DBI): () => any {
68
68
  }
69
69
 
70
70
  for (const type in rateLimitKeyMap) {
71
- let key = `RateLimit:${rateLimitKeyMap[type]}`;
71
+ // @ts-ignore
72
+ let key = `RateLimit["${rateLimitKeyMap[type]}"]`;
72
73
  let val = await dbi.config.store.get(key);
73
74
  if (val && Date.now() > val.at + val.duration) {
74
- await dbi.config.store.del(key);
75
+ await dbi.config.store.delete(key);
75
76
  val = null;
76
77
  }
77
78
  if (val) {
@@ -90,7 +91,8 @@ export function hookInteractionListeners(dbi: DBI): () => any {
90
91
  }
91
92
 
92
93
  async function setRateLimit(type: string, duration: number) {
93
- await dbi.config.store.set(`RateLimit:${rateLimitKeyMap[type]}`, { at: Date.now(), duration });
94
+ // @ts-ignore
95
+ await dbi.config.store.set(`RateLimit["${rateLimitKeyMap[type]}"]`, { at: Date.now(), duration });
94
96
  }
95
97
 
96
98
  let other = {};
@@ -101,8 +103,10 @@ export function hookInteractionListeners(dbi: DBI): () => any {
101
103
  dbi,
102
104
  // @ts-ignore
103
105
  interaction: inter as any,
106
+ // @ts-ignore
104
107
  locale,
105
108
  setRateLimit,
109
+ // @ts-ignore
106
110
  data,
107
111
  other
108
112
  });