@mostfeatured/dbi 0.0.1

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 (126) hide show
  1. package/.gitattributes +2 -0
  2. package/LICENSE +674 -0
  3. package/dist/src/DBI.d.ts +78 -0
  4. package/dist/src/DBI.d.ts.map +1 -0
  5. package/dist/src/DBI.js +202 -0
  6. package/dist/src/DBI.js.map +1 -0
  7. package/dist/src/Events.d.ts +29 -0
  8. package/dist/src/Events.d.ts.map +1 -0
  9. package/dist/src/Events.js +51 -0
  10. package/dist/src/Events.js.map +1 -0
  11. package/dist/src/data/eventMap.json +234 -0
  12. package/dist/src/index.d.ts +4 -0
  13. package/dist/src/index.d.ts.map +1 -0
  14. package/dist/src/index.js +11 -0
  15. package/dist/src/index.js.map +1 -0
  16. package/dist/src/methods/hookEventListeners.d.ts +3 -0
  17. package/dist/src/methods/hookEventListeners.d.ts.map +1 -0
  18. package/dist/src/methods/hookEventListeners.js +34 -0
  19. package/dist/src/methods/hookEventListeners.js.map +1 -0
  20. package/dist/src/methods/hookInteractionListeners.d.ts +3 -0
  21. package/dist/src/methods/hookInteractionListeners.d.ts.map +1 -0
  22. package/dist/src/methods/hookInteractionListeners.js +97 -0
  23. package/dist/src/methods/hookInteractionListeners.js.map +1 -0
  24. package/dist/src/methods/publishInteractions.d.ts +4 -0
  25. package/dist/src/methods/publishInteractions.d.ts.map +1 -0
  26. package/dist/src/methods/publishInteractions.js +150 -0
  27. package/dist/src/methods/publishInteractions.js.map +1 -0
  28. package/dist/src/types/Button.d.ts +19 -0
  29. package/dist/src/types/Button.d.ts.map +1 -0
  30. package/dist/src/types/Button.js +27 -0
  31. package/dist/src/types/Button.js.map +1 -0
  32. package/dist/src/types/ChatInput/ChatInput.d.ts +15 -0
  33. package/dist/src/types/ChatInput/ChatInput.d.ts.map +1 -0
  34. package/dist/src/types/ChatInput/ChatInput.js +19 -0
  35. package/dist/src/types/ChatInput/ChatInput.js.map +1 -0
  36. package/dist/src/types/ChatInput/ChatInputOptions.d.ts +153 -0
  37. package/dist/src/types/ChatInput/ChatInputOptions.d.ts.map +1 -0
  38. package/dist/src/types/ChatInput/ChatInputOptions.js +149 -0
  39. package/dist/src/types/ChatInput/ChatInputOptions.js.map +1 -0
  40. package/dist/src/types/Event.d.ts +257 -0
  41. package/dist/src/types/Event.d.ts.map +1 -0
  42. package/dist/src/types/Event.js +21 -0
  43. package/dist/src/types/Event.js.map +1 -0
  44. package/dist/src/types/Interaction.d.ts +34 -0
  45. package/dist/src/types/Interaction.d.ts.map +1 -0
  46. package/dist/src/types/Interaction.js +25 -0
  47. package/dist/src/types/Interaction.js.map +1 -0
  48. package/dist/src/types/Locale.d.ts +19 -0
  49. package/dist/src/types/Locale.d.ts.map +1 -0
  50. package/dist/src/types/Locale.js +31 -0
  51. package/dist/src/types/Locale.js.map +1 -0
  52. package/dist/src/types/MessageContextMenu.d.ts +14 -0
  53. package/dist/src/types/MessageContextMenu.d.ts.map +1 -0
  54. package/dist/src/types/MessageContextMenu.js +17 -0
  55. package/dist/src/types/MessageContextMenu.js.map +1 -0
  56. package/dist/src/types/Modal.d.ts +19 -0
  57. package/dist/src/types/Modal.d.ts.map +1 -0
  58. package/dist/src/types/Modal.js +24 -0
  59. package/dist/src/types/Modal.js.map +1 -0
  60. package/dist/src/types/SelectMenu.d.ts +19 -0
  61. package/dist/src/types/SelectMenu.d.ts.map +1 -0
  62. package/dist/src/types/SelectMenu.js +27 -0
  63. package/dist/src/types/SelectMenu.js.map +1 -0
  64. package/dist/src/types/UserContextMenu.d.ts +14 -0
  65. package/dist/src/types/UserContextMenu.d.ts.map +1 -0
  66. package/dist/src/types/UserContextMenu.js +17 -0
  67. package/dist/src/types/UserContextMenu.js.map +1 -0
  68. package/dist/src/utils/MemoryStore.d.ts +9 -0
  69. package/dist/src/utils/MemoryStore.d.ts.map +1 -0
  70. package/dist/src/utils/MemoryStore.js +30 -0
  71. package/dist/src/utils/MemoryStore.js.map +1 -0
  72. package/dist/src/utils/customId.d.ts +7 -0
  73. package/dist/src/utils/customId.d.ts.map +1 -0
  74. package/dist/src/utils/customId.js +44 -0
  75. package/dist/src/utils/customId.js.map +1 -0
  76. package/dist/src/utils/permissions.d.ts +3 -0
  77. package/dist/src/utils/permissions.d.ts.map +1 -0
  78. package/dist/src/utils/permissions.js +9 -0
  79. package/dist/src/utils/permissions.js.map +1 -0
  80. package/dist/src/utils/recursiveImport.d.ts +2 -0
  81. package/dist/src/utils/recursiveImport.d.ts.map +1 -0
  82. package/dist/src/utils/recursiveImport.js +20 -0
  83. package/dist/src/utils/recursiveImport.js.map +1 -0
  84. package/dist/test/commands/hello world.d.ts +2 -0
  85. package/dist/test/commands/hello world.d.ts.map +1 -0
  86. package/dist/test/commands/hello world.js +46 -0
  87. package/dist/test/commands/hello world.js.map +1 -0
  88. package/dist/test/commands/stuff.d.ts +2 -0
  89. package/dist/test/commands/stuff.d.ts.map +1 -0
  90. package/dist/test/commands/stuff.js +22 -0
  91. package/dist/test/commands/stuff.js.map +1 -0
  92. package/dist/test/index.d.ts +2 -0
  93. package/dist/test/index.d.ts.map +1 -0
  94. package/dist/test/index.js +33 -0
  95. package/dist/test/index.js.map +1 -0
  96. package/dist/test/publish.d.ts +2 -0
  97. package/dist/test/publish.d.ts.map +1 -0
  98. package/dist/test/publish.js +5 -0
  99. package/dist/test/publish.js.map +1 -0
  100. package/dist/test/things/test.d.ts +2 -0
  101. package/dist/test/things/test.d.ts.map +1 -0
  102. package/dist/test/things/test.js +84 -0
  103. package/dist/test/things/test.js.map +1 -0
  104. package/package.json +40 -0
  105. package/src/DBI.ts +262 -0
  106. package/src/Events.ts +72 -0
  107. package/src/data/eventMap.json +234 -0
  108. package/src/index.ts +7 -0
  109. package/src/methods/hookEventListeners.ts +38 -0
  110. package/src/methods/hookInteractionListeners.ts +118 -0
  111. package/src/methods/publishInteractions.ts +158 -0
  112. package/src/types/Button.ts +32 -0
  113. package/src/types/ChatInput/ChatInput.ts +24 -0
  114. package/src/types/ChatInput/ChatInputOptions.ts +168 -0
  115. package/src/types/Event.ts +115 -0
  116. package/src/types/Interaction.ts +69 -0
  117. package/src/types/Locale.ts +39 -0
  118. package/src/types/MessageContextMenu.ts +23 -0
  119. package/src/types/Modal.ts +32 -0
  120. package/src/types/SelectMenu.ts +32 -0
  121. package/src/types/UserContextMenu.ts +21 -0
  122. package/src/utils/MemoryStore.ts +28 -0
  123. package/src/utils/customId.ts +35 -0
  124. package/src/utils/permissions.ts +5 -0
  125. package/src/utils/recursiveImport.ts +15 -0
  126. package/tsconfig.json +39 -0
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createDBI = exports.recursiveImport = void 0;
4
+ const DBI_1 = require("./DBI");
5
+ var recursiveImport_1 = require("./utils/recursiveImport");
6
+ Object.defineProperty(exports, "recursiveImport", { enumerable: true, get: function () { return recursiveImport_1.recursiveImport; } });
7
+ function createDBI(namespace, cfg) {
8
+ return new DBI_1.DBI(namespace, cfg);
9
+ }
10
+ exports.createDBI = createDBI;
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,+BAAuC;AACvC,2DAA0D;AAAjD,kHAAA,eAAe,OAAA;AAExB,SAAgB,SAAS,CAAC,SAAiB,EAAE,GAAc;IACzD,OAAO,IAAI,SAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AACjC,CAAC;AAFD,8BAEC","sourcesContent":["import { DBI, DBIConfig } from \"./DBI\";\r\nexport { recursiveImport } from \"./utils/recursiveImport\";\r\n\r\nexport function createDBI(namespace: string, cfg: DBIConfig): DBI {\r\n return new DBI(namespace, cfg);\r\n}"]}
@@ -0,0 +1,3 @@
1
+ import { DBI } from "../DBI";
2
+ export declare function hookEventListeners(dbi: DBI): () => any;
3
+ //# sourceMappingURL=hookEventListeners.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hookEventListeners.d.ts","sourceRoot":"","sources":["../../../src/methods/hookEventListeners.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAE7B,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,GAAG,CAmCtD"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hookEventListeners = void 0;
4
+ function hookEventListeners(dbi) {
5
+ async function handle(eventName, ...args) {
6
+ if (!dbi.data.eventMap[eventName])
7
+ return;
8
+ let ctxArgs = dbi.data.eventMap[eventName]
9
+ .reduce((all, current, index) => {
10
+ all[current] = args[index];
11
+ return all;
12
+ }, {});
13
+ let other = {};
14
+ if (!await dbi.events.trigger("beforeEvent", { eventName, ...ctxArgs, other }))
15
+ return;
16
+ for (let i = 0; i < dbi.data.events.size; i++) {
17
+ const value = dbi.data.events.at(i);
18
+ if (value.name == eventName) {
19
+ await value.onExecute({ eventName, ...ctxArgs, other });
20
+ }
21
+ }
22
+ dbi.events.trigger("afterEvent", { eventName, ...ctxArgs, other });
23
+ }
24
+ let originalEmit = dbi.client.emit;
25
+ dbi.client.emit = function (eventName, ...args) {
26
+ handle(eventName, ...args);
27
+ return originalEmit.call(this, eventName, ...args);
28
+ };
29
+ return () => {
30
+ dbi.client.emit = originalEmit;
31
+ };
32
+ }
33
+ exports.hookEventListeners = hookEventListeners;
34
+ //# sourceMappingURL=hookEventListeners.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hookEventListeners.js","sourceRoot":"","sources":["../../../src/methods/hookEventListeners.ts"],"names":[],"mappings":";;;AAEA,SAAgB,kBAAkB,CAAC,GAAQ;IACzC,KAAK,UAAU,MAAM,CAAC,SAAiB,EAAE,GAAG,IAAW;QACrD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,OAAO;QAE1C,IAAI,OAAO,GACT,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;aACzB,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAC9B,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3B,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAE,CAAC,CAAC;QAEX,IAAI,KAAK,GAAG,EAAE,CAAC;QAEf,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC;YAAE,OAAO;QAEvF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YAC7C,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,KAAK,CAAC,IAAI,IAAI,SAAS,EAAE;gBAC3B,MAAM,KAAK,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;aACzD;SACF;QAED,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;IACpE,CAAC;IAED,IAAI,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;IAEnC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,UAAS,SAAS,EAAE,GAAG,IAAI;QAC3C,MAAM,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;QAC3B,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;IACrD,CAAC,CAAA;IAED,OAAO,GAAG,EAAE;QACV,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,YAAY,CAAC;IACjC,CAAC,CAAA;AACH,CAAC;AAnCD,gDAmCC","sourcesContent":["import { DBI } from \"../DBI\";\r\n\r\nexport function hookEventListeners(dbi: DBI): () => any {\r\n async function handle(eventName: string, ...args: any[]) {\r\n if (!dbi.data.eventMap[eventName]) return;\r\n\r\n let ctxArgs =\r\n dbi.data.eventMap[eventName]\r\n .reduce((all, current, index) => {\r\n all[current] = args[index];\r\n return all;\r\n }, {});\r\n\r\n let other = {};\r\n\r\n if (!await dbi.events.trigger(\"beforeEvent\", { eventName, ...ctxArgs, other })) return;\r\n\r\n for (let i = 0; i < dbi.data.events.size; i++) {\r\n const value = dbi.data.events.at(i);\r\n if (value.name == eventName) {\r\n await value.onExecute({ eventName, ...ctxArgs, other });\r\n }\r\n }\r\n\r\n dbi.events.trigger(\"afterEvent\", { eventName, ...ctxArgs, other })\r\n }\r\n\r\n let originalEmit = dbi.client.emit;\r\n\r\n dbi.client.emit = function(eventName, ...args) {\r\n handle(eventName, ...args);\r\n return originalEmit.call(this, eventName, ...args);\r\n }\r\n\r\n return () => {\r\n dbi.client.emit = originalEmit;\r\n }\r\n}"]}
@@ -0,0 +1,3 @@
1
+ import { DBI } from "../DBI";
2
+ export declare function hookInteractionListeners(dbi: DBI): () => any;
3
+ //# sourceMappingURL=hookInteractionListeners.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hookInteractionListeners.d.ts","sourceRoot":"","sources":["../../../src/methods/hookInteractionListeners.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAI7B,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,GAAG,CAiH5D"}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hookInteractionListeners = void 0;
4
+ const customId_1 = require("../utils/customId");
5
+ function hookInteractionListeners(dbi) {
6
+ async function handle(inter) {
7
+ const dbiInter = dbi.data.interactions.find(i => {
8
+ let isUsesCustomId = (inter.isButton() || inter.isSelectMenu() || inter.isModalSubmit());
9
+ let parsedId = isUsesCustomId ? (0, customId_1.parseCustomId)(dbi, inter.customId) : null;
10
+ return ((i.type == "ChatInput"
11
+ && (inter.isChatInputCommand() || inter.isAutocomplete())
12
+ && i.name == [inter.commandName, inter.options.getSubcommandGroup(false), inter.options.getSubcommand(false)].filter(i => !!i).join(" "))
13
+ ||
14
+ ((i.type == "MessageContextMenu" || i.type == "UserContextMenu")
15
+ && (inter.isMessageContextMenuCommand() || inter.isUserContextMenuCommand())
16
+ && inter.commandName == i.name)
17
+ ||
18
+ ((i.type == "Button" || i.type == "SelectMenu" || i.type == "Modal")
19
+ && isUsesCustomId
20
+ && parsedId.name == i.name));
21
+ });
22
+ if (!dbiInter)
23
+ return;
24
+ if (inter.isAutocomplete()) {
25
+ let focussed = inter.options.getFocused(true);
26
+ let option = dbiInter.options.find(i => i.name == focussed.name);
27
+ if (option?.onComplete) {
28
+ let response = await option.onComplete({
29
+ value: focussed.value,
30
+ interaction: inter,
31
+ dbi
32
+ });
33
+ await inter.respond(response);
34
+ }
35
+ return;
36
+ }
37
+ let userLocaleName = inter.locale.split("-")[0];
38
+ let userLocale = dbi.data.locales.has(userLocaleName) ? dbi.data.locales.get(userLocaleName) : dbi.data.locales.get(dbi.config.defaults.locale);
39
+ let guildLocaleName = inter.guild ? inter.guild.preferredLocale.split("-")[0] : null;
40
+ let guildLocale = guildLocaleName ? (dbi.data.locales.has(guildLocaleName) ? dbi.data.locales.get(guildLocaleName) : dbi.data.locales.get(dbi.config.defaults.locale)) : null;
41
+ let locale = {
42
+ user: userLocale,
43
+ guild: guildLocale
44
+ };
45
+ let data = (inter.isButton() || inter.isSelectMenu() || inter.isModalSubmit()) ? (0, customId_1.parseCustomId)(dbi, inter.customId).data : undefined;
46
+ let rateLimitKeyMap = {
47
+ "User": `${inter.user.id}`,
48
+ "Channel": `${inter.channelId || "Channel"}`,
49
+ "Guild": `${inter.guildId || "Guild"}`,
50
+ "Member": `${inter.user.id}_${inter.guildId || "Guild"}`,
51
+ "Message": `${inter?.message?.id}`
52
+ };
53
+ for (const type in rateLimitKeyMap) {
54
+ let key = `RateLimit:${rateLimitKeyMap[type]}`;
55
+ let val = await dbi.config.store.get(key);
56
+ if (val && Date.now() > val.at + val.duration) {
57
+ await dbi.config.store.del(key);
58
+ val = null;
59
+ }
60
+ if (val) {
61
+ dbi.events.trigger("interactionRateLimit", {
62
+ dbi,
63
+ interaction: inter,
64
+ locale,
65
+ data,
66
+ rateLimit: {
67
+ type: key,
68
+ ...val
69
+ }
70
+ });
71
+ return;
72
+ }
73
+ }
74
+ async function setRateLimit(type, duration) {
75
+ await dbi.config.store.set(`RateLimit:${rateLimitKeyMap[type]}`, { at: Date.now(), duration });
76
+ }
77
+ let other = {};
78
+ if (!(await dbi.events.trigger("beforeInteraction", { dbi, interaction: inter, locale, setRateLimit, data, other })))
79
+ return;
80
+ await dbiInter.onExecute({
81
+ dbi,
82
+ // @ts-ignore
83
+ interaction: inter,
84
+ locale,
85
+ setRateLimit,
86
+ data,
87
+ other
88
+ });
89
+ dbi.events.trigger("afterInteraction", { dbi, interaction: inter, locale, setRateLimit, data, other });
90
+ }
91
+ dbi.client.on("interactionCreate", handle);
92
+ return () => {
93
+ dbi.client.off("interactionCreate", handle);
94
+ };
95
+ }
96
+ exports.hookInteractionListeners = hookInteractionListeners;
97
+ //# sourceMappingURL=hookInteractionListeners.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hookInteractionListeners.js","sourceRoot":"","sources":["../../../src/methods/hookInteractionListeners.ts"],"names":[],"mappings":"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","sourcesContent":["import { DBI } from \"../DBI\";\r\nimport Discord from \"discord.js\";\r\nimport { parseCustomId } from \"../utils/customId\";\r\n\r\nexport function hookInteractionListeners(dbi: DBI): () => any {\r\n async function handle(inter: Discord.Interaction<Discord.CacheType>) {\r\n\r\n const dbiInter =\r\n dbi.data.interactions.find(i => {\r\n let isUsesCustomId = (inter.isButton() || inter.isSelectMenu() || inter.isModalSubmit());\r\n let parsedId = isUsesCustomId ? parseCustomId(dbi, (inter as any).customId) : null;\r\n return (\r\n (\r\n i.type == \"ChatInput\"\r\n && (inter.isChatInputCommand() || inter.isAutocomplete())\r\n && i.name == [inter.commandName, inter.options.getSubcommandGroup(false), inter.options.getSubcommand(false)].filter(i => !!i).join(\" \")\r\n )\r\n ||\r\n (\r\n (i.type == \"MessageContextMenu\" || i.type == \"UserContextMenu\")\r\n && (inter.isMessageContextMenuCommand() || inter.isUserContextMenuCommand())\r\n && inter.commandName == i.name\r\n )\r\n ||\r\n (\r\n (i.type == \"Button\" || i.type == \"SelectMenu\" || i.type == \"Modal\")\r\n && isUsesCustomId\r\n && parsedId.name == i.name\r\n )\r\n )\r\n });\r\n \r\n if (!dbiInter) return;\r\n \r\n if (inter.isAutocomplete()) {\r\n let focussed = inter.options.getFocused(true);\r\n let option = (dbiInter.options as any[]).find(i => i.name == focussed.name);\r\n if (option?.onComplete) {\r\n let response = await option.onComplete({\r\n value: focussed.value,\r\n interaction: inter,\r\n dbi\r\n });\r\n await inter.respond(response);\r\n }\r\n return;\r\n }\r\n\r\n let userLocaleName = inter.locale.split(\"-\")[0];\r\n let userLocale = dbi.data.locales.has(userLocaleName) ? dbi.data.locales.get(userLocaleName) : dbi.data.locales.get(dbi.config.defaults.locale);\r\n\r\n let guildLocaleName = inter.guild ? inter.guild.preferredLocale.split(\"-\")[0] : null;\r\n let guildLocale = guildLocaleName ? (dbi.data.locales.has(guildLocaleName) ? dbi.data.locales.get(guildLocaleName) : dbi.data.locales.get(dbi.config.defaults.locale)) : null;\r\n\r\n let locale = {\r\n user: userLocale,\r\n guild: guildLocale\r\n };\r\n\r\n let data = (inter.isButton() || inter.isSelectMenu() || inter.isModalSubmit()) ? parseCustomId(dbi, inter.customId).data : undefined;\r\n\r\n let rateLimitKeyMap = {\r\n \"User\": `${inter.user.id}`,\r\n \"Channel\": `${inter.channelId || \"Channel\"}`,\r\n \"Guild\": `${inter.guildId || \"Guild\"}`,\r\n \"Member\": `${inter.user.id}_${inter.guildId || \"Guild\"}`,\r\n \"Message\": `${(inter as any)?.message?.id}`\r\n }\r\n\r\n for (const type in rateLimitKeyMap) {\r\n let key = `RateLimit:${rateLimitKeyMap[type]}`;\r\n let val = await dbi.config.store.get(key);\r\n if (val && Date.now() > val.at + val.duration) {\r\n await dbi.config.store.del(key);\r\n val = null;\r\n }\r\n if (val) {\r\n dbi.events.trigger(\"interactionRateLimit\", {\r\n dbi,\r\n interaction: inter,\r\n locale,\r\n data,\r\n rateLimit: {\r\n type: key,\r\n ...val\r\n }\r\n })\r\n return;\r\n }\r\n }\r\n\r\n async function setRateLimit(type: string, duration: number) {\r\n await dbi.config.store.set(`RateLimit:${rateLimitKeyMap[type]}`, { at: Date.now(), duration });\r\n }\r\n\r\n let other = {};\r\n\r\n if (!(await dbi.events.trigger(\"beforeInteraction\", { dbi, interaction: inter, locale, setRateLimit, data, other }))) return;\r\n\r\n await dbiInter.onExecute({\r\n dbi,\r\n // @ts-ignore\r\n interaction: inter as any,\r\n locale,\r\n setRateLimit,\r\n data,\r\n other\r\n });\r\n \r\n dbi.events.trigger(\"afterInteraction\", { dbi, interaction: inter, locale, setRateLimit, data, other });\r\n }\r\n\r\n dbi.client.on(\"interactionCreate\", handle);\r\n\r\n return () => { \r\n dbi.client.off(\"interactionCreate\", handle);\r\n };\r\n}"]}
@@ -0,0 +1,4 @@
1
+ import Discord from "discord.js";
2
+ import { DBIChatInput } from "../types/ChatInput/ChatInput";
3
+ export declare function publishInteractions(clientToken: string, interactions: Discord.Collection<string, DBIChatInput>, publishType: "Guild" | "Global", guildId?: string): Promise<void>;
4
+ //# sourceMappingURL=publishInteractions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publishInteractions.d.ts","sourceRoot":"","sources":["../../../src/methods/publishInteractions.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAQ5D,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,EACtD,WAAW,EAAE,OAAO,GAAG,QAAQ,EAC/B,OAAO,CAAC,EAAE,MAAM,iBAgJjB"}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.publishInteractions = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const rest_1 = require("@discordjs/rest");
6
+ const v9_1 = require("discord-api-types/v9");
7
+ const permissions_1 = require("../utils/permissions");
8
+ const snakecase_keys_1 = tslib_1.__importDefault(require("snakecase-keys"));
9
+ const PUBLISHABLE_TYPES = ["ChatInput", "UserContextMenu", "MessageContextMenu"];
10
+ async function publishInteractions(clientToken, interactions, publishType, guildId) {
11
+ interactions = interactions.filter(i => PUBLISHABLE_TYPES.includes(i.type));
12
+ const rest = new rest_1.REST({ version: "9" });
13
+ rest.setToken(clientToken);
14
+ const me = await rest.get(v9_1.Routes.user());
15
+ const body = interactions.reduce((all, current) => {
16
+ switch (current.type) {
17
+ case "ChatInput": {
18
+ let nameSplitted = current.name.split(" ");
19
+ switch (nameSplitted.length) {
20
+ case 1: {
21
+ all.push({
22
+ type: v9_1.ApplicationCommandType.ChatInput,
23
+ description: current.description,
24
+ name: nameSplitted[0],
25
+ default_member_permissions: (0, permissions_1.reducePermissions)(current.defaultMemberPermissions).toString(),
26
+ dm_permission: current.directMessages,
27
+ options: (0, snakecase_keys_1.default)(current.options || [])
28
+ });
29
+ break;
30
+ }
31
+ case 2: {
32
+ let baseItem = all.find(i => i.name == current.name.split(" ")[0] && i.type == "ChatInput");
33
+ let option = {
34
+ type: v9_1.ApplicationCommandOptionType.Subcommand,
35
+ name: nameSplitted[1],
36
+ description: current.description,
37
+ default_member_permissions: (0, permissions_1.reducePermissions)(current.defaultMemberPermissions).toString(),
38
+ dm_permission: current.directMessages,
39
+ options: (0, snakecase_keys_1.default)(current.options || [])
40
+ };
41
+ if (!baseItem) {
42
+ all.push({
43
+ type: v9_1.ApplicationCommandType.ChatInput,
44
+ name: nameSplitted[0],
45
+ description: "...",
46
+ options: [
47
+ option
48
+ ]
49
+ });
50
+ }
51
+ else {
52
+ baseItem.options.push(option);
53
+ }
54
+ break;
55
+ }
56
+ case 3: {
57
+ let level1Item = all.find(i => i.name == current.name.split(" ")[0] && i.type == "ChatInput");
58
+ if (!level1Item) {
59
+ all.push({
60
+ type: v9_1.ApplicationCommandType.ChatInput,
61
+ name: nameSplitted[0],
62
+ description: "...",
63
+ options: [
64
+ {
65
+ type: v9_1.ApplicationCommandOptionType.SubcommandGroup,
66
+ name: nameSplitted[1],
67
+ description: "...",
68
+ options: [
69
+ {
70
+ type: v9_1.ApplicationCommandOptionType.Subcommand,
71
+ name: nameSplitted[2],
72
+ description: current.description,
73
+ default_member_permissions: (0, permissions_1.reducePermissions)(current.defaultMemberPermissions).toString(),
74
+ dm_permission: current.directMessages,
75
+ options: (0, snakecase_keys_1.default)(current.options || [])
76
+ }
77
+ ]
78
+ }
79
+ ]
80
+ });
81
+ }
82
+ else {
83
+ let level2Item = level1Item.options.find(i => i.name == current.name.split(" ")[1] && i.type == "ChatInput");
84
+ if (!level2Item) {
85
+ level1Item.options.push({
86
+ type: v9_1.ApplicationCommandOptionType.SubcommandGroup,
87
+ name: nameSplitted[1],
88
+ description: "...",
89
+ options: [
90
+ {
91
+ type: v9_1.ApplicationCommandOptionType.Subcommand,
92
+ name: nameSplitted[2],
93
+ description: current.description,
94
+ default_member_permissions: (0, permissions_1.reducePermissions)(current.defaultMemberPermissions).toString(),
95
+ dm_permission: current.directMessages,
96
+ options: (0, snakecase_keys_1.default)(current.options || [])
97
+ }
98
+ ]
99
+ });
100
+ }
101
+ else {
102
+ level2Item.options.push({
103
+ type: v9_1.ApplicationCommandOptionType.Subcommand,
104
+ name: nameSplitted[2],
105
+ description: current.description,
106
+ default_member_permissions: (0, permissions_1.reducePermissions)(current.defaultMemberPermissions).toString(),
107
+ dm_permission: current.directMessages,
108
+ options: (0, snakecase_keys_1.default)(current.options || [])
109
+ });
110
+ }
111
+ }
112
+ break;
113
+ }
114
+ }
115
+ break;
116
+ }
117
+ case "MessageContextMenu": {
118
+ all.push({
119
+ type: v9_1.ApplicationCommandType.Message,
120
+ name: current.name,
121
+ default_member_permissions: (0, permissions_1.reducePermissions)(current.defaultMemberPermissions).toString(),
122
+ dm_permission: current.directMessages
123
+ });
124
+ break;
125
+ }
126
+ case "UserContextMenu": {
127
+ all.push({
128
+ type: v9_1.ApplicationCommandType.User,
129
+ name: current.name,
130
+ default_member_permissions: (0, permissions_1.reducePermissions)(current.defaultMemberPermissions).toString(),
131
+ dm_permission: current.directMessages
132
+ });
133
+ break;
134
+ }
135
+ }
136
+ return all;
137
+ }, []);
138
+ switch (publishType) {
139
+ case "Global": {
140
+ await rest.put(v9_1.Routes.applicationGuildCommands(me.id, guildId), { body });
141
+ break;
142
+ }
143
+ case "Guild": {
144
+ await rest.put(v9_1.Routes.applicationCommands(me.id), { body });
145
+ break;
146
+ }
147
+ }
148
+ }
149
+ exports.publishInteractions = publishInteractions;
150
+ //# sourceMappingURL=publishInteractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publishInteractions.js","sourceRoot":"","sources":["../../../src/methods/publishInteractions.ts"],"names":[],"mappings":"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","sourcesContent":["import Discord from \"discord.js\";\r\nimport { DBIChatInput } from \"../types/ChatInput/ChatInput\";\r\nimport { REST } from \"@discordjs/rest\";\r\nimport { Routes, RESTGetAPIUserResult, RESTPutAPIApplicationCommandsJSONBody, ApplicationCommandType, ApplicationCommandOptionType } from \"discord-api-types/v9\";\r\nimport { reducePermissions } from \"../utils/permissions\";\r\nimport snakecaseKeys from \"snakecase-keys\";\r\n\r\nconst PUBLISHABLE_TYPES = [\"ChatInput\", \"UserContextMenu\", \"MessageContextMenu\"];\r\n\r\nexport async function publishInteractions(\r\n clientToken: string,\r\n interactions: Discord.Collection<string, DBIChatInput>,\r\n publishType: \"Guild\" | \"Global\",\r\n guildId?: string\r\n) {\r\n interactions = interactions.filter(i => PUBLISHABLE_TYPES.includes(i.type));\r\n\r\n const rest = new REST({ version: \"9\" });\r\n rest.setToken(clientToken);\r\n\r\n const me: RESTGetAPIUserResult = await rest.get(Routes.user()) as any;\r\n \r\n const body: RESTPutAPIApplicationCommandsJSONBody =\r\n interactions.reduce((all, current) => {\r\n switch (current.type) {\r\n case \"ChatInput\": {\r\n let nameSplitted = current.name.split(\" \");\r\n switch (nameSplitted.length) {\r\n case 1: {\r\n all.push({\r\n type: ApplicationCommandType.ChatInput,\r\n description: current.description,\r\n name: nameSplitted[0],\r\n default_member_permissions: reducePermissions(current.defaultMemberPermissions).toString(),\r\n dm_permission: current.directMessages,\r\n options: snakecaseKeys(current.options || [])\r\n });\r\n break;\r\n }\r\n case 2: {\r\n let baseItem = all.find(i => i.name == current.name.split(\" \")[0] && i.type == \"ChatInput\");\r\n let option = {\r\n type: ApplicationCommandOptionType.Subcommand,\r\n name: nameSplitted[1],\r\n description: current.description,\r\n default_member_permissions: reducePermissions(current.defaultMemberPermissions).toString(),\r\n dm_permission: current.directMessages,\r\n options: snakecaseKeys(current.options || [])\r\n };\r\n if (!baseItem) {\r\n all.push({\r\n type: ApplicationCommandType.ChatInput,\r\n name: nameSplitted[0],\r\n description: \"...\",\r\n options: [\r\n option\r\n ]\r\n });\r\n } else {\r\n baseItem.options.push(option);\r\n }\r\n break;\r\n }\r\n case 3: {\r\n let level1Item = all.find(i => i.name == current.name.split(\" \")[0] && i.type == \"ChatInput\");\r\n if (!level1Item) {\r\n all.push({\r\n type: ApplicationCommandType.ChatInput,\r\n name: nameSplitted[0],\r\n description: \"...\",\r\n options: [\r\n {\r\n type: ApplicationCommandOptionType.SubcommandGroup,\r\n name: nameSplitted[1],\r\n description: \"...\",\r\n options: [\r\n {\r\n type: ApplicationCommandOptionType.Subcommand,\r\n name: nameSplitted[2],\r\n description: current.description,\r\n default_member_permissions: reducePermissions(current.defaultMemberPermissions).toString(),\r\n dm_permission: current.directMessages,\r\n options: snakecaseKeys(current.options || [])\r\n }\r\n ]\r\n }\r\n ]\r\n });\r\n } else {\r\n let level2Item = level1Item.options.find(i => i.name == current.name.split(\" \")[1] && i.type == \"ChatInput\");\r\n if (!level2Item) {\r\n level1Item.options.push({\r\n type: ApplicationCommandOptionType.SubcommandGroup,\r\n name: nameSplitted[1],\r\n description: \"...\",\r\n options: [\r\n {\r\n type: ApplicationCommandOptionType.Subcommand,\r\n name: nameSplitted[2],\r\n description: current.description,\r\n default_member_permissions: reducePermissions(current.defaultMemberPermissions).toString(),\r\n dm_permission: current.directMessages,\r\n options: snakecaseKeys(current.options || [])\r\n }\r\n ]\r\n })\r\n } else {\r\n level2Item.options.push({\r\n type: ApplicationCommandOptionType.Subcommand,\r\n name: nameSplitted[2],\r\n description: current.description,\r\n default_member_permissions: reducePermissions(current.defaultMemberPermissions).toString(),\r\n dm_permission: current.directMessages,\r\n options: snakecaseKeys(current.options || [])\r\n });\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case \"MessageContextMenu\": {\r\n all.push({\r\n type: ApplicationCommandType.Message,\r\n name: current.name,\r\n default_member_permissions: reducePermissions(current.defaultMemberPermissions).toString(),\r\n dm_permission: current.directMessages\r\n });\r\n break;\r\n }\r\n case \"UserContextMenu\": {\r\n all.push({\r\n type: ApplicationCommandType.User,\r\n name: current.name,\r\n default_member_permissions: reducePermissions(current.defaultMemberPermissions).toString(),\r\n dm_permission: current.directMessages\r\n });\r\n break;\r\n }\r\n }\r\n\r\n return all;\r\n }, []);\r\n \r\n \r\n switch (publishType) {\r\n case \"Global\": {\r\n await rest.put(Routes.applicationGuildCommands(me.id, guildId), { body });\r\n break;\r\n }\r\n case \"Guild\": {\r\n await rest.put(Routes.applicationCommands(me.id), { body });\r\n break;\r\n }\r\n }\r\n \r\n}"]}
@@ -0,0 +1,19 @@
1
+ import Discord from "discord.js";
2
+ import { DBI } from "../DBI";
3
+ import { DBIBaseInteraction, IDBIBaseExecuteCtx } from "./Interaction";
4
+ export interface IDBIButtonExecuteCtx extends IDBIBaseExecuteCtx {
5
+ interaction: Discord.ButtonInteraction<Discord.CacheType>;
6
+ data: ({
7
+ [key: string]: any;
8
+ $ref: string;
9
+ $unRef(): boolean;
10
+ } | string | number)[];
11
+ }
12
+ export declare type TDBIButtonOmitted = Omit<DBIButton, "type" | "description" | "dbi" | "toJSON">;
13
+ export declare class DBIButton extends DBIBaseInteraction {
14
+ constructor(dbi: DBI, args: TDBIButtonOmitted);
15
+ options: Omit<Discord.ButtonComponentData, "customId" | "type">;
16
+ onExecute(ctx: IDBIButtonExecuteCtx): Promise<any> | any;
17
+ toJSON(...customData: (string | number | object)[]): Discord.ButtonComponentData;
18
+ }
19
+ //# sourceMappingURL=Button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/types/Button.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGvE,MAAM,WAAW,oBAAqB,SAAQ,kBAAkB;IAC9D,WAAW,EAAE,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1D,IAAI,EAAE,CAAC;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,IAAI,OAAO,CAAA;KAAE,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;CACrF;AAED,oBAAY,iBAAiB,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,KAAK,GAAG,QAAQ,CAAC,CAAC;AAE3F,qBAAa,SAAU,SAAQ,kBAAkB;gBACnC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,iBAAiB;IAOrC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,UAAU,GAAG,MAAM,CAAC,CAAC;IAE/D,SAAS,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG;IAEjE,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,mBAAmB;CAOjF"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DBIButton = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const discord_js_1 = tslib_1.__importDefault(require("discord.js"));
6
+ const Interaction_1 = require("./Interaction");
7
+ const customId_1 = require("../utils/customId");
8
+ class DBIButton extends Interaction_1.DBIBaseInteraction {
9
+ constructor(dbi, args) {
10
+ super(dbi, {
11
+ ...args,
12
+ type: "Button",
13
+ });
14
+ }
15
+ onExecute(ctx) { }
16
+ ;
17
+ toJSON(...customData) {
18
+ return {
19
+ ...this.options,
20
+ customId: (0, customId_1.customIdBuilder)(this.dbi, this.name, customData),
21
+ type: discord_js_1.default.ComponentType.Button
22
+ };
23
+ }
24
+ ;
25
+ }
26
+ exports.DBIButton = DBIButton;
27
+ //# sourceMappingURL=Button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.js","sourceRoot":"","sources":["../../../src/types/Button.ts"],"names":[],"mappings":";;;;AAAA,oEAAiC;AAEjC,+CAAuE;AACvE,gDAAoD;AASpD,MAAa,SAAU,SAAQ,gCAAkB;IAC/C,YAAY,GAAQ,EAAE,IAAuB;QAC3C,KAAK,CAAC,GAAG,EAAE;YACT,GAAI,IAAY;YAChB,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;IACL,CAAC;IAIQ,SAAS,CAAC,GAAyB,IAAwB,CAAC;IAAA,CAAC;IAEtE,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,MAAM;SAC5B,CAAC;IACX,CAAC;IAAA,CAAC;CACH;AAnBD,8BAmBC","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 IDBIButtonExecuteCtx extends IDBIBaseExecuteCtx {\r\n interaction: Discord.ButtonInteraction<Discord.CacheType>;\r\n data: ({ [key: string]: any, $ref: string, $unRef(): boolean } | string | number)[];\r\n}\r\n\r\nexport type TDBIButtonOmitted = Omit<DBIButton, \"type\" | \"description\" | \"dbi\" | \"toJSON\">;\r\n\r\nexport class DBIButton extends DBIBaseInteraction {\r\n constructor(dbi: DBI, args: TDBIButtonOmitted) {\r\n super(dbi, {\r\n ...(args as any),\r\n type: \"Button\",\r\n });\r\n }\r\n\r\n declare options: Omit<Discord.ButtonComponentData, \"customId\" | \"type\">;\r\n\r\n override onExecute(ctx: IDBIButtonExecuteCtx): Promise<any> | any { };\r\n\r\n toJSON(...customData: (string | number | object)[]): Discord.ButtonComponentData {\r\n return {\r\n ...this.options,\r\n customId: customIdBuilder(this.dbi, this.name, customData),\r\n type: Discord.ComponentType.Button\r\n } as any;\r\n };\r\n}"]}
@@ -0,0 +1,15 @@
1
+ import Discord from "discord.js";
2
+ import { DBI } from "../../DBI";
3
+ import { DBIBaseInteraction, IDBIBaseExecuteCtx } from "../Interaction";
4
+ export interface IDBIChatInputExecuteCtx extends IDBIBaseExecuteCtx {
5
+ interaction: Discord.ChatInputCommandInteraction<Discord.CacheType>;
6
+ }
7
+ export declare type TDBIChatInputOmitted = Omit<DBIChatInput, "type" | "dbi">;
8
+ export declare class DBIChatInput extends DBIBaseInteraction {
9
+ constructor(dbi: DBI, cfg: TDBIChatInputOmitted);
10
+ directMessages?: boolean;
11
+ defaultMemberPermissions?: Discord.PermissionsString[];
12
+ options?: any[];
13
+ onExecute(ctx: IDBIChatInputExecuteCtx): void;
14
+ }
15
+ //# sourceMappingURL=ChatInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatInput.d.ts","sourceRoot":"","sources":["../../../../src/types/ChatInput/ChatInput.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAExE,MAAM,WAAW,uBAAwB,SAAQ,kBAAkB;IACjE,WAAW,EAAE,OAAO,CAAC,2BAA2B,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;CACrE;AAED,oBAAY,oBAAoB,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;AAEtE,qBAAa,YAAa,SAAQ,kBAAkB;gBACtC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,oBAAoB;IAQ/C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,wBAAwB,CAAC,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAC/C,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,SAAS,CAAC,GAAG,EAAE,uBAAuB;CAChD"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DBIChatInput = void 0;
4
+ const Interaction_1 = require("../Interaction");
5
+ class DBIChatInput extends Interaction_1.DBIBaseInteraction {
6
+ constructor(dbi, cfg) {
7
+ super(dbi, {
8
+ ...cfg,
9
+ type: "ChatInput",
10
+ name: cfg.name.toLowerCase(),
11
+ options: Array.isArray(cfg.options) ? cfg.options : []
12
+ });
13
+ }
14
+ directMessages;
15
+ defaultMemberPermissions;
16
+ onExecute(ctx) { }
17
+ }
18
+ exports.DBIChatInput = DBIChatInput;
19
+ //# sourceMappingURL=ChatInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatInput.js","sourceRoot":"","sources":["../../../../src/types/ChatInput/ChatInput.ts"],"names":[],"mappings":";;;AAEA,gDAAwE;AAQxE,MAAa,YAAa,SAAQ,gCAAkB;IAClD,YAAY,GAAQ,EAAE,GAAyB;QAC7C,KAAK,CAAC,GAAG,EAAE;YACT,GAAI,GAAW;YACf,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE;YAC5B,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;SACvD,CAAC,CAAC;IACL,CAAC;IACD,cAAc,CAAW;IACzB,wBAAwB,CAA+B;IAE9C,SAAS,CAAC,GAA4B,IAAG,CAAC;CACpD;AAbD,oCAaC","sourcesContent":["import Discord from \"discord.js\";\r\nimport { DBI } from \"../../DBI\";\r\nimport { DBIBaseInteraction, IDBIBaseExecuteCtx } from \"../Interaction\";\r\n\r\nexport interface IDBIChatInputExecuteCtx extends IDBIBaseExecuteCtx {\r\n interaction: Discord.ChatInputCommandInteraction<Discord.CacheType>;\r\n}\r\n\r\nexport type TDBIChatInputOmitted = Omit<DBIChatInput, \"type\" | \"dbi\">;\r\n\r\nexport class DBIChatInput extends DBIBaseInteraction {\r\n constructor(dbi: DBI, cfg: TDBIChatInputOmitted) {\r\n super(dbi, {\r\n ...(cfg as any),\r\n type: \"ChatInput\",\r\n name: cfg.name.toLowerCase(),\r\n options: Array.isArray(cfg.options) ? cfg.options : []\r\n });\r\n }\r\n directMessages?: boolean;\r\n defaultMemberPermissions?: Discord.PermissionsString[];\r\n declare options?: any[];\r\n override onExecute(ctx: IDBIChatInputExecuteCtx) {}\r\n}"]}
@@ -0,0 +1,153 @@
1
+ import Discord from "discord.js";
2
+ import { IDBIBaseExecuteCtx } from "../Interaction";
3
+ declare type TValueName<T> = {
4
+ value: T;
5
+ name: string;
6
+ };
7
+ declare type TNameDescription = {
8
+ name: string;
9
+ description: string;
10
+ required?: boolean;
11
+ };
12
+ declare type TMinMaxLength = {
13
+ maxLength?: number;
14
+ minLength?: number;
15
+ };
16
+ declare type TMinMaxValue = {
17
+ maxValue?: number;
18
+ minValue?: number;
19
+ };
20
+ export interface IDBICompleteCtx extends IDBIBaseExecuteCtx {
21
+ interaction: Discord.AutocompleteInteraction;
22
+ value: string | number;
23
+ }
24
+ export declare class DBIChatInputOptions {
25
+ static stringAutocomplete(cfg: TNameDescription & TMinMaxLength & {
26
+ onComplete(ctx: IDBICompleteCtx): Promise<TValueName<string>[]>;
27
+ }): {
28
+ type: Discord.ApplicationCommandOptionType;
29
+ name: string;
30
+ autocomplete: boolean;
31
+ onComplete: (ctx: IDBICompleteCtx) => Promise<TValueName<string>[]>;
32
+ description: string;
33
+ maxLength: number;
34
+ minLength: number;
35
+ required: boolean;
36
+ };
37
+ static stringChoices(cfg: TNameDescription & TMinMaxLength & {
38
+ choices: TValueName<string>[];
39
+ }): {
40
+ type: Discord.ApplicationCommandOptionType;
41
+ name: string;
42
+ choices: TValueName<string>[];
43
+ description: string;
44
+ maxLength: number;
45
+ minLength: number;
46
+ required: boolean;
47
+ };
48
+ static string(cfg: TNameDescription & TMinMaxLength): {
49
+ type: Discord.ApplicationCommandOptionType;
50
+ name: string;
51
+ description: string;
52
+ maxLength: number;
53
+ minLength: number;
54
+ required: boolean;
55
+ };
56
+ static numberAutocomplete(cfg: TNameDescription & TMinMaxValue & {
57
+ onComplete(ctx: IDBICompleteCtx): Promise<TValueName<number>[]>;
58
+ }): {
59
+ type: Discord.ApplicationCommandOptionType;
60
+ name: string;
61
+ autocomplete: boolean;
62
+ onComplete: (ctx: IDBICompleteCtx) => Promise<TValueName<number>[]>;
63
+ description: string;
64
+ maxValue: number;
65
+ minValue: number;
66
+ required: boolean;
67
+ };
68
+ static numberChoices(cfg: TNameDescription & TMinMaxValue & {
69
+ choices: TValueName<number>[];
70
+ }): {
71
+ type: Discord.ApplicationCommandOptionType;
72
+ name: string;
73
+ choices: TValueName<number>[];
74
+ description: string;
75
+ maxValue: number;
76
+ minValue: number;
77
+ required: boolean;
78
+ };
79
+ static number(cfg: TNameDescription & TMinMaxValue): {
80
+ type: Discord.ApplicationCommandOptionType;
81
+ name: string;
82
+ description: string;
83
+ maxValue: number;
84
+ minValue: number;
85
+ required: boolean;
86
+ };
87
+ static integerAutocomplete(cfg: TNameDescription & TMinMaxValue & {
88
+ onComplete(ctx: IDBICompleteCtx): Promise<TValueName<number>[]>;
89
+ }): {
90
+ type: Discord.ApplicationCommandOptionType;
91
+ name: string;
92
+ autocomplete: boolean;
93
+ onComplete: (ctx: IDBICompleteCtx) => Promise<TValueName<number>[]>;
94
+ description: string;
95
+ maxValue: number;
96
+ minValue: number;
97
+ required: boolean;
98
+ };
99
+ static integerChoices(cfg: TNameDescription & TMinMaxValue & {
100
+ choices: TValueName<number>[];
101
+ }): {
102
+ type: Discord.ApplicationCommandOptionType;
103
+ name: string;
104
+ choices: TValueName<number>[];
105
+ description: string;
106
+ maxValue: number;
107
+ minValue: number;
108
+ required: boolean;
109
+ };
110
+ static integer(cfg: TNameDescription & TMinMaxValue): {
111
+ type: Discord.ApplicationCommandOptionType;
112
+ name: string;
113
+ description: string;
114
+ maxValue: number;
115
+ minValue: number;
116
+ required: boolean;
117
+ };
118
+ static boolean(cfg: TNameDescription): {
119
+ type: Discord.ApplicationCommandOptionType;
120
+ name: string;
121
+ description: string;
122
+ required: boolean;
123
+ };
124
+ static attachment(cfg: TNameDescription): {
125
+ type: Discord.ApplicationCommandOptionType;
126
+ name: string;
127
+ description: string;
128
+ required: boolean;
129
+ };
130
+ static channel(cfg: TNameDescription & {
131
+ channelTypes: Discord.ChannelType[];
132
+ }): {
133
+ type: Discord.ApplicationCommandOptionType;
134
+ name: string;
135
+ description: string;
136
+ channelTypes: Discord.ChannelType[];
137
+ required: boolean;
138
+ };
139
+ static mentionable(cfg: TNameDescription): {
140
+ type: Discord.ApplicationCommandOptionType;
141
+ name: string;
142
+ description: string;
143
+ required: boolean;
144
+ };
145
+ static user(cfg: TNameDescription): {
146
+ type: Discord.ApplicationCommandOptionType;
147
+ name: string;
148
+ description: string;
149
+ required: boolean;
150
+ };
151
+ }
152
+ export {};
153
+ //# sourceMappingURL=ChatInputOptions.d.ts.map