@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.
- package/dist/DBI.d.ts +40 -16
- package/dist/DBI.d.ts.map +1 -1
- package/dist/DBI.js +61 -17
- package/dist/DBI.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/methods/hookInteractionListeners.d.ts.map +1 -1
- package/dist/methods/hookInteractionListeners.js +9 -5
- package/dist/methods/hookInteractionListeners.js.map +1 -1
- package/dist/methods/publishInteractions.d.ts +4 -1
- package/dist/methods/publishInteractions.d.ts.map +1 -1
- package/dist/methods/publishInteractions.js +83 -10
- package/dist/methods/publishInteractions.js.map +1 -1
- package/dist/test.d.ts +2 -0
- package/dist/test.d.ts.map +1 -0
- package/dist/test.js +46 -0
- package/dist/test.js.map +1 -0
- package/dist/types/Button.d.ts +2 -6
- package/dist/types/Button.d.ts.map +1 -1
- package/dist/types/Button.js.map +1 -1
- package/dist/types/Interaction.d.ts +5 -0
- package/dist/types/Interaction.d.ts.map +1 -1
- package/dist/types/Interaction.js.map +1 -1
- package/dist/types/InteractionLocale.d.ts +22 -0
- package/dist/types/InteractionLocale.d.ts.map +1 -0
- package/dist/types/InteractionLocale.js +15 -0
- package/dist/types/InteractionLocale.js.map +1 -0
- package/dist/types/Locale.d.ts +3 -2
- package/dist/types/Locale.d.ts.map +1 -1
- package/dist/types/Locale.js +6 -4
- package/dist/types/Locale.js.map +1 -1
- package/dist/types/Modal.d.ts +2 -6
- package/dist/types/Modal.d.ts.map +1 -1
- package/dist/types/Modal.js.map +1 -1
- package/dist/types/SelectMenu.d.ts +2 -6
- package/dist/types/SelectMenu.d.ts.map +1 -1
- package/dist/types/SelectMenu.js.map +1 -1
- package/dist/utils/MemoryStore.d.ts +1 -1
- package/dist/utils/MemoryStore.d.ts.map +1 -1
- package/dist/utils/MemoryStore.js +1 -1
- package/dist/utils/MemoryStore.js.map +1 -1
- package/dist/utils/recursiveImport.d.ts +4 -1
- package/dist/utils/recursiveImport.d.ts.map +1 -1
- package/dist/utils/recursiveImport.js +6 -3
- package/dist/utils/recursiveImport.js.map +1 -1
- package/package.json +2 -3
- package/src/DBI.ts +91 -36
- package/src/index.ts +3 -3
- package/src/methods/hookInteractionListeners.ts +9 -5
- package/src/methods/publishInteractions.ts +85 -8
- package/src/types/Button.ts +2 -2
- package/src/types/Interaction.ts +2 -0
- package/src/types/InteractionLocale.ts +28 -0
- package/src/types/Locale.ts +6 -5
- package/src/types/Modal.ts +2 -2
- package/src/types/SelectMenu.ts +2 -2
- package/src/utils/MemoryStore.ts +1 -1
- 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,+
|
|
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
|
-
|
|
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,
|
|
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"}
|
|
@@ -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,
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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(
|
|
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;
|
|
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.
|
|
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.
|
|
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
|
|
31
|
+
options: Discord.ClientOptions
|
|
23
32
|
}
|
|
24
|
-
defaults
|
|
25
|
-
locale
|
|
26
|
-
directMessages
|
|
27
|
-
defaultMemberPermissions
|
|
33
|
+
defaults: {
|
|
34
|
+
locale: TDBILocaleString,
|
|
35
|
+
directMessages: boolean,
|
|
36
|
+
defaultMemberPermissions: Discord.PermissionsString[]
|
|
28
37
|
};
|
|
29
38
|
|
|
30
|
-
sharding
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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) :
|
|
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)
|
|
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.
|
|
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.
|
|
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)
|
|
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.
|
|
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)
|
|
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.
|
|
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)
|
|
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.
|
|
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)
|
|
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.
|
|
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)
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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,
|
|
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:
|
|
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
|
|
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 =
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
});
|