@mostfeatured/dbi 0.0.67 → 0.0.68

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.
package/dist/DBI.js CHANGED
@@ -1,370 +1,370 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DBI = void 0;
4
- const tslib_1 = require("tslib");
5
- const discord_js_1 = tslib_1.__importDefault(require("discord.js"));
6
- const ChatInput_1 = require("./types/ChatInput/ChatInput");
7
- const ChatInputOptions_1 = require("./types/ChatInput/ChatInputOptions");
8
- const publishInteractions_1 = require("./methods/publishInteractions");
9
- const Event_1 = require("./types/Event");
10
- const MemoryStore_1 = require("./utils/MemoryStore");
11
- const hookInteractionListeners_1 = require("./methods/hookInteractionListeners");
12
- const Events_1 = require("./Events");
13
- const Locale_1 = require("./types/Locale");
14
- const Button_1 = require("./types/Button");
15
- const SelectMenu_1 = require("./types/SelectMenu");
16
- const MessageContextMenu_1 = require("./types/MessageContextMenu");
17
- const UserContextMenu_1 = require("./types/UserContextMenu");
18
- const hookEventListeners_1 = require("./methods/hookEventListeners");
19
- const eventMap_json_1 = tslib_1.__importDefault(require("./data/eventMap.json"));
20
- const Modal_1 = require("./types/Modal");
21
- const Sharding = tslib_1.__importStar(require("discord-hybrid-sharding"));
22
- const lodash_1 = tslib_1.__importDefault(require("lodash"));
23
- const InteractionLocale_1 = require("./types/InteractionLocale");
24
- const CustomEvent_1 = require("./types/CustomEvent");
25
- const async_and_quick_1 = tslib_1.__importDefault(require("async-and-quick"));
26
- class DBI {
27
- namespace;
28
- config;
29
- data;
30
- events;
31
- cluster;
32
- _loaded;
33
- _hooked;
34
- constructor(namespace, config) {
35
- this.namespace = namespace;
36
- const self = this;
37
- config.store = config.store || new MemoryStore_1.MemoryStore();
38
- config.defaults = {
39
- locale: "en",
40
- defaultMemberPermissions: [],
41
- directMessages: false,
42
- ...(config.defaults || {})
43
- };
44
- config.sharding = config.sharding ?? "off";
45
- config.strict = config.strict ?? true;
46
- config.references = {
47
- autoClear: undefined,
48
- ...(config.references || {})
49
- };
50
- // @ts-ignore
51
- this.config = config;
52
- this.data = {
53
- interactions: new discord_js_1.default.Collection(),
54
- events: new discord_js_1.default.Collection(),
55
- locales: new discord_js_1.default.Collection(),
56
- interactionLocales: new discord_js_1.default.Collection(),
57
- other: config.data?.other ?? {},
58
- eventMap: eventMap_json_1.default,
59
- customEventNames: new Set(),
60
- unloaders: new Set(),
61
- registers: new Set(),
62
- registerUnloaders: new Set(),
63
- refs: config.data?.refs ?? new Map(),
64
- clients: Object.assign([], {
65
- next(key = "global") {
66
- this.indexes[key] = (((this.indexes[key] ?? -1) + 1) % this.length);
67
- return this[this.indexes[key]];
68
- },
69
- random(size) {
70
- if (typeof size === "number") {
71
- return this.sort(() => Math.random() - 0.5).slice(0, size);
72
- }
73
- else {
74
- return this[Math.floor(Math.random() * this.length)];
75
- }
76
- },
77
- first() {
78
- return this[0];
79
- },
80
- get(namespace) {
81
- return this.find((i) => i.namespace === namespace);
82
- },
83
- indexes: {}
84
- })
85
- };
86
- this.events = new Events_1.Events(this);
87
- config.discord = Array.isArray(config.discord) ?
88
- config.discord :
89
- [{ token: config.discord.token, options: config.discord.options, namespace: "default" }];
90
- this.data.clients.push(...config.discord);
91
- for (let clientContext of this.data.clients) {
92
- let client = new discord_js_1.default.Client({
93
- ...(clientContext.options || {}),
94
- ...(config.sharding == "hybrid" ? {
95
- shards: Sharding.data.SHARD_LIST,
96
- shardCount: Sharding.data.TOTAL_SHARDS
97
- } : {})
98
- });
99
- clientContext.client = client;
100
- }
101
- if (this.data.clients.length === 0)
102
- throw new Error("No clients provided.");
103
- if (this.data.clients.length !== 1 && !(config.sharding && config.sharding === "off"))
104
- throw new Error("Sharding only supports 1 client.");
105
- this.cluster = config.sharding == "hybrid" ? new Sharding.Client(this.data.clients[0].client) : undefined;
106
- this._loaded = false;
107
- this._hooked = false;
108
- }
109
- async _hookListeners() {
110
- if (this._hooked)
111
- return;
112
- this._hooked = true;
113
- this.data.unloaders.add((0, hookInteractionListeners_1.hookInteractionListeners)(this));
114
- this.data.unloaders.add((0, hookEventListeners_1.hookEventListeners)(this));
115
- if (typeof this.config.references.autoClear != "undefined") {
116
- this.data.unloaders.add((() => {
117
- let interval = setInterval(() => {
118
- this.data.refs.forEach(({ at, ttl }, key) => {
119
- if (Date.now() > (at + (ttl || this.config.references.autoClear.ttl))) {
120
- this.data.refs.delete(key);
121
- }
122
- });
123
- }, this.config.references.autoClear.check);
124
- return () => {
125
- clearInterval(interval);
126
- };
127
- })());
128
- }
129
- }
130
- async _unhookListeners() {
131
- if (!this._hooked)
132
- return;
133
- this._hooked = false;
134
- this.data.unloaders.forEach(f => {
135
- f();
136
- });
137
- }
138
- async _unregisterAll() {
139
- for await (const cb of this.data.registerUnloaders) {
140
- await cb();
141
- }
142
- this.data.events.clear();
143
- this.data.interactions.clear();
144
- this.data.customEventNames.forEach((value) => {
145
- delete this.data.eventMap[value];
146
- });
147
- this.data.customEventNames.clear();
148
- }
149
- async _registerAll() {
150
- const self = this;
151
- const ChatInputOptions = new ChatInputOptions_1.DBIChatInputOptions(self);
152
- for await (const cb of this.data.registers) {
153
- let ChatInput = function (cfg) {
154
- let dbiChatInput = new ChatInput_1.DBIChatInput(self, cfg);
155
- if (self.data.interactions.has(dbiChatInput.name))
156
- throw new Error(`DBIChatInput "${dbiChatInput.name}" already loaded as "${self.data.interactions.get(dbiChatInput.name)?.type}"!`);
157
- self.data.interactions.set(dbiChatInput.name, dbiChatInput);
158
- return dbiChatInput;
159
- };
160
- ChatInput = Object.assign(ChatInput, class {
161
- constructor(...args) { return ChatInput.apply(this, args); }
162
- });
163
- let Event = function (cfg) {
164
- let dbiEvent = new Event_1.DBIEvent(self, cfg);
165
- if (self.config.strict && self.data.events.has(dbiEvent.id || dbiEvent.name))
166
- throw new Error(`DBIEvent "${dbiEvent.id || dbiEvent.name}" already loaded!`);
167
- self.data.events.set(dbiEvent.id || dbiEvent.name, dbiEvent);
168
- return dbiEvent;
169
- };
170
- Event = Object.assign(Event, class {
171
- constructor(...args) { return Event.apply(this, args); }
172
- });
173
- let Button = function (cfg) {
174
- let dbiButton = new Button_1.DBIButton(self, cfg);
175
- if (self.config.strict && self.data.interactions.has(dbiButton.name))
176
- throw new Error(`DBIButton "${dbiButton.name}" already loaded as "${self.data.interactions.get(dbiButton.name)?.type}"!`);
177
- self.data.interactions.set(dbiButton.name, dbiButton);
178
- return dbiButton;
179
- };
180
- Button = Object.assign(Button, class {
181
- constructor(...args) { return Button.apply(this, args); }
182
- });
183
- let SelectMenu = function (cfg) {
184
- let dbiSelectMenu = new SelectMenu_1.DBISelectMenu(self, cfg);
185
- if (self.config.strict && self.data.interactions.has(dbiSelectMenu.name))
186
- throw new Error(`DBISelectMenu "${dbiSelectMenu.name}" already loaded as "${self.data.interactions.get(dbiSelectMenu.name)?.type}"!`);
187
- self.data.interactions.set(dbiSelectMenu.name, dbiSelectMenu);
188
- return dbiSelectMenu;
189
- };
190
- SelectMenu = Object.assign(SelectMenu, class {
191
- constructor(...args) { return SelectMenu.apply(this, args); }
192
- });
193
- let MessageContextMenu = function (cfg) {
194
- let dbiMessageContextMenu = new MessageContextMenu_1.DBIMessageContextMenu(self, cfg);
195
- if (self.config.strict && self.data.interactions.has(dbiMessageContextMenu.name))
196
- throw new Error(`DBIMessageContextMenu "${dbiMessageContextMenu.name}" already loaded as "${self.data.interactions.get(dbiMessageContextMenu.name)?.type}"!`);
197
- self.data.interactions.set(dbiMessageContextMenu.name, dbiMessageContextMenu);
198
- return dbiMessageContextMenu;
199
- };
200
- MessageContextMenu = Object.assign(MessageContextMenu, class {
201
- constructor(...args) { return MessageContextMenu.apply(this, args); }
202
- });
203
- let UserContextMenu = function (cfg) {
204
- let dbiUserContextMenu = new UserContextMenu_1.DBIUserContextMenu(self, cfg);
205
- if (self.config.strict && self.data.interactions.has(dbiUserContextMenu.name))
206
- throw new Error(`DBIUserContextMenu "${dbiUserContextMenu.name}" already loaded as "${self.data.interactions.get(dbiUserContextMenu.name)?.type}"!`);
207
- self.data.interactions.set(dbiUserContextMenu.name, dbiUserContextMenu);
208
- return dbiUserContextMenu;
209
- };
210
- UserContextMenu = Object.assign(UserContextMenu, class {
211
- constructor(...args) { return UserContextMenu.apply(this, args); }
212
- });
213
- let Modal = function (cfg) {
214
- let dbiModal = new Modal_1.DBIModal(self, cfg);
215
- if (self.config.strict && self.data.interactions.has(dbiModal.name))
216
- throw new Error(`DBIModal "${dbiModal.name}" already loaded as "${self.data.interactions.get(dbiModal.name)?.type}"!`);
217
- self.data.interactions.set(dbiModal.name, dbiModal);
218
- return dbiModal;
219
- };
220
- Modal = Object.assign(Modal, class {
221
- constructor(...args) { return Modal.apply(this, args); }
222
- });
223
- let Locale = function (cfg) {
224
- let dbiLocale = new Locale_1.DBILocale(self, cfg);
225
- if (self.config.strict && self.data.interactionLocales.has(dbiLocale.name))
226
- throw new Error(`DBILocale "${dbiLocale.name}" already loaded!`);
227
- if (self.data.locales.has(dbiLocale.name))
228
- dbiLocale.mergeLocale(self.data.locales.get(dbiLocale.name));
229
- self.data.locales.set(dbiLocale.name, dbiLocale);
230
- return dbiLocale;
231
- };
232
- Locale = Object.assign(Locale, class {
233
- constructor(...args) { return Locale.apply(this, args); }
234
- });
235
- let CustomEvent = function (cfg) {
236
- let dbiCustomEvent = new CustomEvent_1.DBICustomEvent(self, cfg);
237
- if (self.config.strict && self.data.eventMap[dbiCustomEvent.name])
238
- throw new Error(`DBICustomEvent "${dbiCustomEvent.name}" already loaded!`);
239
- self.data.eventMap[dbiCustomEvent.name] = dbiCustomEvent.map;
240
- self.data.customEventNames.add(dbiCustomEvent.name);
241
- return dbiCustomEvent;
242
- };
243
- CustomEvent = Object.assign(CustomEvent, class {
244
- constructor(...args) { return CustomEvent.apply(this, args); }
245
- });
246
- let InteractionLocale = function (cfg) {
247
- let dbiInteractionLocale = new InteractionLocale_1.DBIInteractionLocale(self, cfg);
248
- if (self.config.strict && self.data.interactionLocales.has(dbiInteractionLocale.name))
249
- throw new Error(`DBIInteractionLocale "${dbiInteractionLocale.name}" already loaded!`);
250
- self.data.interactionLocales.set(dbiInteractionLocale.name, dbiInteractionLocale);
251
- return dbiInteractionLocale;
252
- };
253
- InteractionLocale = Object.assign(InteractionLocale, class {
254
- constructor(...args) { return InteractionLocale.apply(this, args); }
255
- });
256
- await cb({
257
- ChatInput,
258
- Event,
259
- ChatInputOptions,
260
- Locale,
261
- Button,
262
- SelectMenu,
263
- MessageContextMenu,
264
- UserContextMenu,
265
- CustomEvent,
266
- Modal,
267
- InteractionLocale,
268
- onUnload(cb) {
269
- self.data.registerUnloaders.add(cb);
270
- },
271
- });
272
- }
273
- }
274
- /**
275
- * this.data.interactions.get(name)
276
- */
277
- interaction(name) {
278
- return this.data.interactions.get(name);
279
- }
280
- emit(name, args) {
281
- this.data.clients.forEach((d) => d.client.emit(name, { ...args, _DIRECT_: true }));
282
- }
283
- /**
284
- * @deprecated
285
- */
286
- get client() {
287
- console.log("[DEPRECTED] dbi.client is a deprected api. Please use dbi.data.clients.first().client instead.", Error().stack);
288
- return this.data.clients[0]?.client;
289
- }
290
- /**
291
- * this.data.events.get(name)
292
- */
293
- event(name) {
294
- return this.data.events.get(name);
295
- }
296
- /**
297
- * this.data.locales.get(name)
298
- */
299
- locale(name) {
300
- return this.data.locales.get(name);
301
- }
302
- /**
303
- * Shorthands for modifying `dbi.data.other`
304
- */
305
- get(k, defaultValue) {
306
- if (defaultValue && !this.has(k)) {
307
- this.set(k, defaultValue);
308
- return defaultValue;
309
- }
310
- return lodash_1.default.get(this.data.other, k);
311
- }
312
- /**
313
- * Shorthands for modifying `dbi.data.other`
314
- */
315
- set(k, v) {
316
- this.data.other = lodash_1.default.set(this.data.other, k, v);
317
- }
318
- /**
319
- * Shorthands for modifying `dbi.data.other`
320
- */
321
- has(k) {
322
- return lodash_1.default.has(this.data.other, k);
323
- }
324
- /**
325
- * Shorthands for modifying `dbi.data.other`
326
- */
327
- delete(k) {
328
- return lodash_1.default.unset(this.data.other, k);
329
- }
330
- async login() {
331
- await async_and_quick_1.default.quickForEach(this.data.clients, async (clientContext) => {
332
- await clientContext.client.login(this.config.sharding == "default" ? null : clientContext.token);
333
- });
334
- }
335
- async register(cb) {
336
- this.data.registers.add(cb);
337
- }
338
- async load() {
339
- if (this._loaded)
340
- return false;
341
- await this._registerAll();
342
- await this._hookListeners();
343
- this._loaded = true;
344
- return true;
345
- }
346
- async unload() {
347
- if (!this._loaded)
348
- return false;
349
- await this._unregisterAll();
350
- await this._unhookListeners();
351
- this._loaded = false;
352
- return true;
353
- }
354
- get loaded() {
355
- return this._loaded;
356
- }
357
- async publish(...args) {
358
- let interactions = this.data.interactions.filter(i => i.type == "ChatInput" || i.type == "MessageContextMenu" || i.type == "UserContextMenu");
359
- switch (args[0]) {
360
- case "Global": {
361
- return await (0, publishInteractions_1.publishInteractions)(this.data.clients, args[1] ? new discord_js_1.default.Collection() : interactions, this.data.interactionLocales, args[0]);
362
- }
363
- case "Guild": {
364
- return await (0, publishInteractions_1.publishInteractions)(this.data.clients, args[2] ? new discord_js_1.default.Collection() : interactions, this.data.interactionLocales, args[0], args[1]);
365
- }
366
- }
367
- }
368
- }
369
- exports.DBI = DBI;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DBI = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const discord_js_1 = tslib_1.__importDefault(require("discord.js"));
6
+ const ChatInput_1 = require("./types/ChatInput/ChatInput");
7
+ const ChatInputOptions_1 = require("./types/ChatInput/ChatInputOptions");
8
+ const publishInteractions_1 = require("./methods/publishInteractions");
9
+ const Event_1 = require("./types/Event");
10
+ const MemoryStore_1 = require("./utils/MemoryStore");
11
+ const hookInteractionListeners_1 = require("./methods/hookInteractionListeners");
12
+ const Events_1 = require("./Events");
13
+ const Locale_1 = require("./types/Locale");
14
+ const Button_1 = require("./types/Button");
15
+ const SelectMenu_1 = require("./types/SelectMenu");
16
+ const MessageContextMenu_1 = require("./types/MessageContextMenu");
17
+ const UserContextMenu_1 = require("./types/UserContextMenu");
18
+ const hookEventListeners_1 = require("./methods/hookEventListeners");
19
+ const eventMap_json_1 = tslib_1.__importDefault(require("./data/eventMap.json"));
20
+ const Modal_1 = require("./types/Modal");
21
+ const Sharding = tslib_1.__importStar(require("discord-hybrid-sharding"));
22
+ const lodash_1 = tslib_1.__importDefault(require("lodash"));
23
+ const InteractionLocale_1 = require("./types/InteractionLocale");
24
+ const CustomEvent_1 = require("./types/CustomEvent");
25
+ const async_and_quick_1 = tslib_1.__importDefault(require("async-and-quick"));
26
+ class DBI {
27
+ namespace;
28
+ config;
29
+ data;
30
+ events;
31
+ cluster;
32
+ _loaded;
33
+ _hooked;
34
+ constructor(namespace, config) {
35
+ this.namespace = namespace;
36
+ const self = this;
37
+ config.store = config.store || new MemoryStore_1.MemoryStore();
38
+ config.defaults = {
39
+ locale: "en",
40
+ defaultMemberPermissions: [],
41
+ directMessages: false,
42
+ ...(config.defaults || {})
43
+ };
44
+ config.sharding = config.sharding ?? "off";
45
+ config.strict = config.strict ?? true;
46
+ config.references = {
47
+ autoClear: undefined,
48
+ ...(config.references || {})
49
+ };
50
+ // @ts-ignore
51
+ this.config = config;
52
+ this.data = {
53
+ interactions: new discord_js_1.default.Collection(),
54
+ events: new discord_js_1.default.Collection(),
55
+ locales: new discord_js_1.default.Collection(),
56
+ interactionLocales: new discord_js_1.default.Collection(),
57
+ other: config.data?.other ?? {},
58
+ eventMap: eventMap_json_1.default,
59
+ customEventNames: new Set(),
60
+ unloaders: new Set(),
61
+ registers: new Set(),
62
+ registerUnloaders: new Set(),
63
+ refs: config.data?.refs ?? new Map(),
64
+ clients: Object.assign([], {
65
+ next(key = "global") {
66
+ this.indexes[key] = (((this.indexes[key] ?? -1) + 1) % this.length);
67
+ return this[this.indexes[key]];
68
+ },
69
+ random(size) {
70
+ if (typeof size === "number") {
71
+ return this.sort(() => Math.random() - 0.5).slice(0, size);
72
+ }
73
+ else {
74
+ return this[Math.floor(Math.random() * this.length)];
75
+ }
76
+ },
77
+ first() {
78
+ return this[0];
79
+ },
80
+ get(namespace) {
81
+ return this.find((i) => i.namespace === namespace);
82
+ },
83
+ indexes: {}
84
+ })
85
+ };
86
+ this.events = new Events_1.Events(this);
87
+ config.discord = Array.isArray(config.discord) ?
88
+ config.discord :
89
+ [{ token: config.discord.token, options: config.discord.options, namespace: "default" }];
90
+ this.data.clients.push(...config.discord);
91
+ for (let clientContext of this.data.clients) {
92
+ let client = new discord_js_1.default.Client({
93
+ ...(clientContext.options || {}),
94
+ ...(config.sharding == "hybrid" ? {
95
+ shards: Sharding.data.SHARD_LIST,
96
+ shardCount: Sharding.data.TOTAL_SHARDS
97
+ } : {})
98
+ });
99
+ clientContext.client = client;
100
+ }
101
+ if (this.data.clients.length === 0)
102
+ throw new Error("No clients provided.");
103
+ if (this.data.clients.length !== 1 && !(config.sharding && config.sharding === "off"))
104
+ throw new Error("Sharding only supports 1 client.");
105
+ this.cluster = config.sharding == "hybrid" ? new Sharding.Client(this.data.clients[0].client) : undefined;
106
+ this._loaded = false;
107
+ this._hooked = false;
108
+ }
109
+ async _hookListeners() {
110
+ if (this._hooked)
111
+ return;
112
+ this._hooked = true;
113
+ this.data.unloaders.add((0, hookInteractionListeners_1.hookInteractionListeners)(this));
114
+ this.data.unloaders.add((0, hookEventListeners_1.hookEventListeners)(this));
115
+ if (typeof this.config.references.autoClear != "undefined") {
116
+ this.data.unloaders.add((() => {
117
+ let interval = setInterval(() => {
118
+ this.data.refs.forEach(({ at, ttl }, key) => {
119
+ if (Date.now() > (at + (ttl || this.config.references.autoClear.ttl))) {
120
+ this.data.refs.delete(key);
121
+ }
122
+ });
123
+ }, this.config.references.autoClear.check);
124
+ return () => {
125
+ clearInterval(interval);
126
+ };
127
+ })());
128
+ }
129
+ }
130
+ async _unhookListeners() {
131
+ if (!this._hooked)
132
+ return;
133
+ this._hooked = false;
134
+ this.data.unloaders.forEach(f => {
135
+ f();
136
+ });
137
+ }
138
+ async _unregisterAll() {
139
+ for await (const cb of this.data.registerUnloaders) {
140
+ await cb();
141
+ }
142
+ this.data.events.clear();
143
+ this.data.interactions.clear();
144
+ this.data.customEventNames.forEach((value) => {
145
+ delete this.data.eventMap[value];
146
+ });
147
+ this.data.customEventNames.clear();
148
+ }
149
+ async _registerAll() {
150
+ const self = this;
151
+ const ChatInputOptions = new ChatInputOptions_1.DBIChatInputOptions(self);
152
+ for await (const cb of this.data.registers) {
153
+ let ChatInput = function (cfg) {
154
+ let dbiChatInput = new ChatInput_1.DBIChatInput(self, cfg);
155
+ if (self.data.interactions.has(dbiChatInput.name))
156
+ throw new Error(`DBIChatInput "${dbiChatInput.name}" already loaded as "${self.data.interactions.get(dbiChatInput.name)?.type}"!`);
157
+ self.data.interactions.set(dbiChatInput.name, dbiChatInput);
158
+ return dbiChatInput;
159
+ };
160
+ ChatInput = Object.assign(ChatInput, class {
161
+ constructor(...args) { return ChatInput.apply(this, args); }
162
+ });
163
+ let Event = function (cfg) {
164
+ let dbiEvent = new Event_1.DBIEvent(self, cfg);
165
+ if (self.config.strict && self.data.events.has(dbiEvent.id || dbiEvent.name))
166
+ throw new Error(`DBIEvent "${dbiEvent.id || dbiEvent.name}" already loaded!`);
167
+ self.data.events.set(dbiEvent.id || dbiEvent.name, dbiEvent);
168
+ return dbiEvent;
169
+ };
170
+ Event = Object.assign(Event, class {
171
+ constructor(...args) { return Event.apply(this, args); }
172
+ });
173
+ let Button = function (cfg) {
174
+ let dbiButton = new Button_1.DBIButton(self, cfg);
175
+ if (self.config.strict && self.data.interactions.has(dbiButton.name))
176
+ throw new Error(`DBIButton "${dbiButton.name}" already loaded as "${self.data.interactions.get(dbiButton.name)?.type}"!`);
177
+ self.data.interactions.set(dbiButton.name, dbiButton);
178
+ return dbiButton;
179
+ };
180
+ Button = Object.assign(Button, class {
181
+ constructor(...args) { return Button.apply(this, args); }
182
+ });
183
+ let SelectMenu = function (cfg) {
184
+ let dbiSelectMenu = new SelectMenu_1.DBISelectMenu(self, cfg);
185
+ if (self.config.strict && self.data.interactions.has(dbiSelectMenu.name))
186
+ throw new Error(`DBISelectMenu "${dbiSelectMenu.name}" already loaded as "${self.data.interactions.get(dbiSelectMenu.name)?.type}"!`);
187
+ self.data.interactions.set(dbiSelectMenu.name, dbiSelectMenu);
188
+ return dbiSelectMenu;
189
+ };
190
+ SelectMenu = Object.assign(SelectMenu, class {
191
+ constructor(...args) { return SelectMenu.apply(this, args); }
192
+ });
193
+ let MessageContextMenu = function (cfg) {
194
+ let dbiMessageContextMenu = new MessageContextMenu_1.DBIMessageContextMenu(self, cfg);
195
+ if (self.config.strict && self.data.interactions.has(dbiMessageContextMenu.name))
196
+ throw new Error(`DBIMessageContextMenu "${dbiMessageContextMenu.name}" already loaded as "${self.data.interactions.get(dbiMessageContextMenu.name)?.type}"!`);
197
+ self.data.interactions.set(dbiMessageContextMenu.name, dbiMessageContextMenu);
198
+ return dbiMessageContextMenu;
199
+ };
200
+ MessageContextMenu = Object.assign(MessageContextMenu, class {
201
+ constructor(...args) { return MessageContextMenu.apply(this, args); }
202
+ });
203
+ let UserContextMenu = function (cfg) {
204
+ let dbiUserContextMenu = new UserContextMenu_1.DBIUserContextMenu(self, cfg);
205
+ if (self.config.strict && self.data.interactions.has(dbiUserContextMenu.name))
206
+ throw new Error(`DBIUserContextMenu "${dbiUserContextMenu.name}" already loaded as "${self.data.interactions.get(dbiUserContextMenu.name)?.type}"!`);
207
+ self.data.interactions.set(dbiUserContextMenu.name, dbiUserContextMenu);
208
+ return dbiUserContextMenu;
209
+ };
210
+ UserContextMenu = Object.assign(UserContextMenu, class {
211
+ constructor(...args) { return UserContextMenu.apply(this, args); }
212
+ });
213
+ let Modal = function (cfg) {
214
+ let dbiModal = new Modal_1.DBIModal(self, cfg);
215
+ if (self.config.strict && self.data.interactions.has(dbiModal.name))
216
+ throw new Error(`DBIModal "${dbiModal.name}" already loaded as "${self.data.interactions.get(dbiModal.name)?.type}"!`);
217
+ self.data.interactions.set(dbiModal.name, dbiModal);
218
+ return dbiModal;
219
+ };
220
+ Modal = Object.assign(Modal, class {
221
+ constructor(...args) { return Modal.apply(this, args); }
222
+ });
223
+ let Locale = function (cfg) {
224
+ let dbiLocale = new Locale_1.DBILocale(self, cfg);
225
+ if (self.config.strict && self.data.interactionLocales.has(dbiLocale.name))
226
+ throw new Error(`DBILocale "${dbiLocale.name}" already loaded!`);
227
+ if (self.data.locales.has(dbiLocale.name))
228
+ dbiLocale.mergeLocale(self.data.locales.get(dbiLocale.name));
229
+ self.data.locales.set(dbiLocale.name, dbiLocale);
230
+ return dbiLocale;
231
+ };
232
+ Locale = Object.assign(Locale, class {
233
+ constructor(...args) { return Locale.apply(this, args); }
234
+ });
235
+ let CustomEvent = function (cfg) {
236
+ let dbiCustomEvent = new CustomEvent_1.DBICustomEvent(self, cfg);
237
+ if (self.config.strict && self.data.eventMap[dbiCustomEvent.name])
238
+ throw new Error(`DBICustomEvent "${dbiCustomEvent.name}" already loaded!`);
239
+ self.data.eventMap[dbiCustomEvent.name] = dbiCustomEvent.map;
240
+ self.data.customEventNames.add(dbiCustomEvent.name);
241
+ return dbiCustomEvent;
242
+ };
243
+ CustomEvent = Object.assign(CustomEvent, class {
244
+ constructor(...args) { return CustomEvent.apply(this, args); }
245
+ });
246
+ let InteractionLocale = function (cfg) {
247
+ let dbiInteractionLocale = new InteractionLocale_1.DBIInteractionLocale(self, cfg);
248
+ if (self.config.strict && self.data.interactionLocales.has(dbiInteractionLocale.name))
249
+ throw new Error(`DBIInteractionLocale "${dbiInteractionLocale.name}" already loaded!`);
250
+ self.data.interactionLocales.set(dbiInteractionLocale.name, dbiInteractionLocale);
251
+ return dbiInteractionLocale;
252
+ };
253
+ InteractionLocale = Object.assign(InteractionLocale, class {
254
+ constructor(...args) { return InteractionLocale.apply(this, args); }
255
+ });
256
+ await cb({
257
+ ChatInput,
258
+ Event,
259
+ ChatInputOptions,
260
+ Locale,
261
+ Button,
262
+ SelectMenu,
263
+ MessageContextMenu,
264
+ UserContextMenu,
265
+ CustomEvent,
266
+ Modal,
267
+ InteractionLocale,
268
+ onUnload(cb) {
269
+ self.data.registerUnloaders.add(cb);
270
+ },
271
+ });
272
+ }
273
+ }
274
+ /**
275
+ * this.data.interactions.get(name)
276
+ */
277
+ interaction(name) {
278
+ return this.data.interactions.get(name);
279
+ }
280
+ emit(name, args) {
281
+ this.data.clients.forEach((d) => d.client.emit(name, { ...args, _DIRECT_: true }));
282
+ }
283
+ /**
284
+ * @deprecated
285
+ */
286
+ get client() {
287
+ console.log("[DEPRECTED] dbi.client is a deprected api. Please use dbi.data.clients.first().client instead.", Error().stack);
288
+ return this.data.clients[0]?.client;
289
+ }
290
+ /**
291
+ * this.data.events.get(name)
292
+ */
293
+ event(name) {
294
+ return this.data.events.get(name);
295
+ }
296
+ /**
297
+ * this.data.locales.get(name)
298
+ */
299
+ locale(name) {
300
+ return this.data.locales.get(name);
301
+ }
302
+ /**
303
+ * Shorthands for modifying `dbi.data.other`
304
+ */
305
+ get(k, defaultValue) {
306
+ if (defaultValue && !this.has(k)) {
307
+ this.set(k, defaultValue);
308
+ return defaultValue;
309
+ }
310
+ return lodash_1.default.get(this.data.other, k);
311
+ }
312
+ /**
313
+ * Shorthands for modifying `dbi.data.other`
314
+ */
315
+ set(k, v) {
316
+ this.data.other = lodash_1.default.set(this.data.other, k, v);
317
+ }
318
+ /**
319
+ * Shorthands for modifying `dbi.data.other`
320
+ */
321
+ has(k) {
322
+ return lodash_1.default.has(this.data.other, k);
323
+ }
324
+ /**
325
+ * Shorthands for modifying `dbi.data.other`
326
+ */
327
+ delete(k) {
328
+ return lodash_1.default.unset(this.data.other, k);
329
+ }
330
+ async login() {
331
+ await async_and_quick_1.default.quickForEach(this.data.clients, async (clientContext) => {
332
+ await clientContext.client.login(this.config.sharding == "default" ? null : clientContext.token);
333
+ });
334
+ }
335
+ async register(cb) {
336
+ this.data.registers.add(cb);
337
+ }
338
+ async load() {
339
+ if (this._loaded)
340
+ return false;
341
+ await this._registerAll();
342
+ await this._hookListeners();
343
+ this._loaded = true;
344
+ return true;
345
+ }
346
+ async unload() {
347
+ if (!this._loaded)
348
+ return false;
349
+ await this._unregisterAll();
350
+ await this._unhookListeners();
351
+ this._loaded = false;
352
+ return true;
353
+ }
354
+ get loaded() {
355
+ return this._loaded;
356
+ }
357
+ async publish(...args) {
358
+ let interactions = this.data.interactions.filter(i => i.type == "ChatInput" || i.type == "MessageContextMenu" || i.type == "UserContextMenu");
359
+ switch (args[0]) {
360
+ case "Global": {
361
+ return await (0, publishInteractions_1.publishInteractions)(this.data.clients, args[1] ? new discord_js_1.default.Collection() : interactions, this.data.interactionLocales, args[0]);
362
+ }
363
+ case "Guild": {
364
+ return await (0, publishInteractions_1.publishInteractions)(this.data.clients, args[2] ? new discord_js_1.default.Collection() : interactions, this.data.interactionLocales, args[0], args[1]);
365
+ }
366
+ }
367
+ }
368
+ }
369
+ exports.DBI = DBI;
370
370
  //# sourceMappingURL=DBI.js.map