@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.
- package/.gitattributes +2 -0
- package/LICENSE +674 -0
- package/dist/src/DBI.d.ts +78 -0
- package/dist/src/DBI.d.ts.map +1 -0
- package/dist/src/DBI.js +202 -0
- package/dist/src/DBI.js.map +1 -0
- package/dist/src/Events.d.ts +29 -0
- package/dist/src/Events.d.ts.map +1 -0
- package/dist/src/Events.js +51 -0
- package/dist/src/Events.js.map +1 -0
- package/dist/src/data/eventMap.json +234 -0
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +11 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/methods/hookEventListeners.d.ts +3 -0
- package/dist/src/methods/hookEventListeners.d.ts.map +1 -0
- package/dist/src/methods/hookEventListeners.js +34 -0
- package/dist/src/methods/hookEventListeners.js.map +1 -0
- package/dist/src/methods/hookInteractionListeners.d.ts +3 -0
- package/dist/src/methods/hookInteractionListeners.d.ts.map +1 -0
- package/dist/src/methods/hookInteractionListeners.js +97 -0
- package/dist/src/methods/hookInteractionListeners.js.map +1 -0
- package/dist/src/methods/publishInteractions.d.ts +4 -0
- package/dist/src/methods/publishInteractions.d.ts.map +1 -0
- package/dist/src/methods/publishInteractions.js +150 -0
- package/dist/src/methods/publishInteractions.js.map +1 -0
- package/dist/src/types/Button.d.ts +19 -0
- package/dist/src/types/Button.d.ts.map +1 -0
- package/dist/src/types/Button.js +27 -0
- package/dist/src/types/Button.js.map +1 -0
- package/dist/src/types/ChatInput/ChatInput.d.ts +15 -0
- package/dist/src/types/ChatInput/ChatInput.d.ts.map +1 -0
- package/dist/src/types/ChatInput/ChatInput.js +19 -0
- package/dist/src/types/ChatInput/ChatInput.js.map +1 -0
- package/dist/src/types/ChatInput/ChatInputOptions.d.ts +153 -0
- package/dist/src/types/ChatInput/ChatInputOptions.d.ts.map +1 -0
- package/dist/src/types/ChatInput/ChatInputOptions.js +149 -0
- package/dist/src/types/ChatInput/ChatInputOptions.js.map +1 -0
- package/dist/src/types/Event.d.ts +257 -0
- package/dist/src/types/Event.d.ts.map +1 -0
- package/dist/src/types/Event.js +21 -0
- package/dist/src/types/Event.js.map +1 -0
- package/dist/src/types/Interaction.d.ts +34 -0
- package/dist/src/types/Interaction.d.ts.map +1 -0
- package/dist/src/types/Interaction.js +25 -0
- package/dist/src/types/Interaction.js.map +1 -0
- package/dist/src/types/Locale.d.ts +19 -0
- package/dist/src/types/Locale.d.ts.map +1 -0
- package/dist/src/types/Locale.js +31 -0
- package/dist/src/types/Locale.js.map +1 -0
- package/dist/src/types/MessageContextMenu.d.ts +14 -0
- package/dist/src/types/MessageContextMenu.d.ts.map +1 -0
- package/dist/src/types/MessageContextMenu.js +17 -0
- package/dist/src/types/MessageContextMenu.js.map +1 -0
- package/dist/src/types/Modal.d.ts +19 -0
- package/dist/src/types/Modal.d.ts.map +1 -0
- package/dist/src/types/Modal.js +24 -0
- package/dist/src/types/Modal.js.map +1 -0
- package/dist/src/types/SelectMenu.d.ts +19 -0
- package/dist/src/types/SelectMenu.d.ts.map +1 -0
- package/dist/src/types/SelectMenu.js +27 -0
- package/dist/src/types/SelectMenu.js.map +1 -0
- package/dist/src/types/UserContextMenu.d.ts +14 -0
- package/dist/src/types/UserContextMenu.d.ts.map +1 -0
- package/dist/src/types/UserContextMenu.js +17 -0
- package/dist/src/types/UserContextMenu.js.map +1 -0
- package/dist/src/utils/MemoryStore.d.ts +9 -0
- package/dist/src/utils/MemoryStore.d.ts.map +1 -0
- package/dist/src/utils/MemoryStore.js +30 -0
- package/dist/src/utils/MemoryStore.js.map +1 -0
- package/dist/src/utils/customId.d.ts +7 -0
- package/dist/src/utils/customId.d.ts.map +1 -0
- package/dist/src/utils/customId.js +44 -0
- package/dist/src/utils/customId.js.map +1 -0
- package/dist/src/utils/permissions.d.ts +3 -0
- package/dist/src/utils/permissions.d.ts.map +1 -0
- package/dist/src/utils/permissions.js +9 -0
- package/dist/src/utils/permissions.js.map +1 -0
- package/dist/src/utils/recursiveImport.d.ts +2 -0
- package/dist/src/utils/recursiveImport.d.ts.map +1 -0
- package/dist/src/utils/recursiveImport.js +20 -0
- package/dist/src/utils/recursiveImport.js.map +1 -0
- package/dist/test/commands/hello world.d.ts +2 -0
- package/dist/test/commands/hello world.d.ts.map +1 -0
- package/dist/test/commands/hello world.js +46 -0
- package/dist/test/commands/hello world.js.map +1 -0
- package/dist/test/commands/stuff.d.ts +2 -0
- package/dist/test/commands/stuff.d.ts.map +1 -0
- package/dist/test/commands/stuff.js +22 -0
- package/dist/test/commands/stuff.js.map +1 -0
- package/dist/test/index.d.ts +2 -0
- package/dist/test/index.d.ts.map +1 -0
- package/dist/test/index.js +33 -0
- package/dist/test/index.js.map +1 -0
- package/dist/test/publish.d.ts +2 -0
- package/dist/test/publish.d.ts.map +1 -0
- package/dist/test/publish.js +5 -0
- package/dist/test/publish.js.map +1 -0
- package/dist/test/things/test.d.ts +2 -0
- package/dist/test/things/test.d.ts.map +1 -0
- package/dist/test/things/test.js +84 -0
- package/dist/test/things/test.js.map +1 -0
- package/package.json +40 -0
- package/src/DBI.ts +262 -0
- package/src/Events.ts +72 -0
- package/src/data/eventMap.json +234 -0
- package/src/index.ts +7 -0
- package/src/methods/hookEventListeners.ts +38 -0
- package/src/methods/hookInteractionListeners.ts +118 -0
- package/src/methods/publishInteractions.ts +158 -0
- package/src/types/Button.ts +32 -0
- package/src/types/ChatInput/ChatInput.ts +24 -0
- package/src/types/ChatInput/ChatInputOptions.ts +168 -0
- package/src/types/Event.ts +115 -0
- package/src/types/Interaction.ts +69 -0
- package/src/types/Locale.ts +39 -0
- package/src/types/MessageContextMenu.ts +23 -0
- package/src/types/Modal.ts +32 -0
- package/src/types/SelectMenu.ts +32 -0
- package/src/types/UserContextMenu.ts +21 -0
- package/src/utils/MemoryStore.ts +28 -0
- package/src/utils/customId.ts +35 -0
- package/src/utils/permissions.ts +5 -0
- package/src/utils/recursiveImport.ts +15 -0
- package/tsconfig.json +39 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import * as stuffs from "stuffs";
|
|
2
|
+
import { DBI } from "../DBI";
|
|
3
|
+
|
|
4
|
+
export interface LangObject {
|
|
5
|
+
[property: string]: LangObject & ((...args: any[]) => string);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export interface LangConstructorObject {
|
|
9
|
+
[property: string]: LangConstructorObject | string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export type TDBILocaleString = "en" | "bg" | "zh" | "hr" | "cs" | "da" | "nl" | "fi" | "fr" | "de" | "el" | "hi" | "hu" | "it" | "ja" | "ko" | "no" | "pl" | "pt" | "ro" | "ru" | "es" | "sv" | "th" | "tr" | "uk" | "vi";
|
|
13
|
+
|
|
14
|
+
export type TDBILocaleConstructor = Omit<DBILocale & { data: LangConstructorObject }, "dbi">;
|
|
15
|
+
|
|
16
|
+
export class DBILocale {
|
|
17
|
+
name: TDBILocaleString;
|
|
18
|
+
data: LangObject
|
|
19
|
+
private _data: LangConstructorObject;
|
|
20
|
+
dbi: DBI;
|
|
21
|
+
constructor(dbi: DBI, cfg: TDBILocaleConstructor) {
|
|
22
|
+
this.dbi = dbi;
|
|
23
|
+
this.name = cfg.name;
|
|
24
|
+
this._data = cfg.data;
|
|
25
|
+
this.data = convert(cfg.data);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function convert(data) {
|
|
30
|
+
return Object.fromEntries(Object.entries(data).map(([key, value]) => {
|
|
31
|
+
if (typeof value === "string") {
|
|
32
|
+
return [key, (...args) => {
|
|
33
|
+
return stuffs.mapReplace(value, Object.fromEntries(args.map((t, i) => [`{${i}}`, t])))
|
|
34
|
+
}]
|
|
35
|
+
} else {
|
|
36
|
+
return [key, convert(value)];
|
|
37
|
+
}
|
|
38
|
+
}))
|
|
39
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { DBI } from "../DBI";
|
|
2
|
+
import { DBIBaseInteraction, IDBIBaseExecuteCtx } from "./Interaction";
|
|
3
|
+
import Discord from "discord.js";
|
|
4
|
+
|
|
5
|
+
export type TDBIMessageContextMenuOmitted = Omit<DBIMessageContextMenu, "type" | "description" | "dbi" | "options">;
|
|
6
|
+
|
|
7
|
+
export interface IDBIMessageContextMenuExecuteCtx extends IDBIBaseExecuteCtx {
|
|
8
|
+
interaction: Discord.MessageContextMenuCommandInteraction<Discord.CacheType>;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
export class DBIMessageContextMenu extends DBIBaseInteraction {
|
|
13
|
+
constructor(dbi: DBI, cfg: TDBIMessageContextMenuOmitted) {
|
|
14
|
+
super(dbi, {
|
|
15
|
+
...(cfg as any),
|
|
16
|
+
type: "MessageContextMenu"
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
directMessages?: boolean;
|
|
21
|
+
defaultMemberPermissions?: Discord.PermissionsString[];
|
|
22
|
+
override onExecute(ctx: IDBIMessageContextMenuExecuteCtx): Promise<any> | any {}
|
|
23
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { DBI } from "../DBI";
|
|
2
|
+
import { DBIBaseInteraction, IDBIBaseExecuteCtx } from "./Interaction";
|
|
3
|
+
import Discord from "discord.js";
|
|
4
|
+
import { customIdBuilder } from "../utils/customId";
|
|
5
|
+
|
|
6
|
+
export interface IDBIModalExecuteCtx extends IDBIBaseExecuteCtx {
|
|
7
|
+
interaction: Discord.ModalSubmitInteraction<Discord.CacheType>;
|
|
8
|
+
|
|
9
|
+
data: ({ [key: string]: any, $ref: string, $unRef(): boolean } | string | number)[];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export type TDBIModalOmitted = Omit<DBIModal, "type" | "description" | "dbi" | "toJSON">;
|
|
13
|
+
|
|
14
|
+
export class DBIModal extends DBIBaseInteraction {
|
|
15
|
+
constructor(dbi: DBI, cfg: TDBIModalOmitted) {
|
|
16
|
+
super(dbi, {
|
|
17
|
+
...(cfg as any),
|
|
18
|
+
type: "Modal"
|
|
19
|
+
})
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
declare options: Omit<Discord.ModalComponentData, "customId">;
|
|
23
|
+
|
|
24
|
+
override onExecute(ctx: IDBIModalExecuteCtx): Promise<any> | any { };
|
|
25
|
+
|
|
26
|
+
toJSON(...customData: (string | number | object)[]): Discord.ModalComponentData {
|
|
27
|
+
return {
|
|
28
|
+
...this.options,
|
|
29
|
+
customId: customIdBuilder(this.dbi, this.name, customData)
|
|
30
|
+
} as any;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import Discord from "discord.js";
|
|
2
|
+
import { DBI } from "../DBI";
|
|
3
|
+
import { DBIBaseInteraction, IDBIBaseExecuteCtx } from "./Interaction";
|
|
4
|
+
import { customIdBuilder } from "../utils/customId";
|
|
5
|
+
|
|
6
|
+
export interface IDBISelectMenuExecuteCtx extends IDBIBaseExecuteCtx {
|
|
7
|
+
interaction: Discord.ButtonInteraction<Discord.CacheType>;
|
|
8
|
+
data: (string | number | { [key: string]: any, $ref: string, $unRef(): boolean })[];
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export type TDBISelectMenuOmitted = Omit<DBIBaseInteraction, "type" | "description" | "dbi" | "toJSON">;
|
|
12
|
+
|
|
13
|
+
export class DBISelectMenu extends DBIBaseInteraction {
|
|
14
|
+
constructor(dbi: DBI, args: TDBISelectMenuOmitted) {
|
|
15
|
+
super(dbi, {
|
|
16
|
+
...(args as any),
|
|
17
|
+
type: "SelectMenu",
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
declare options: Omit<Discord.SelectMenuComponentData, "customId" | "type">;
|
|
22
|
+
|
|
23
|
+
override onExecute(ctx: IDBISelectMenuExecuteCtx): Promise<any> | any { };
|
|
24
|
+
|
|
25
|
+
toJSON(...customData: (string | number | object)[]): Discord.SelectMenuComponentData {
|
|
26
|
+
return {
|
|
27
|
+
...this.options,
|
|
28
|
+
customId: customIdBuilder(this.dbi, this.name, customData),
|
|
29
|
+
type: Discord.ComponentType.SelectMenu
|
|
30
|
+
} as any
|
|
31
|
+
};
|
|
32
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { DBI } from "../DBI";
|
|
2
|
+
import { DBIBaseInteraction, IDBIBaseExecuteCtx } from "./Interaction";
|
|
3
|
+
import Discord from "discord.js";
|
|
4
|
+
|
|
5
|
+
export type TDBIUserContextMenuOmitted = Omit<DBIUserContextMenu, "type" | "description" | "dbi" | "options">;
|
|
6
|
+
|
|
7
|
+
export interface IDBIUserContextMenuExecuteCtx extends IDBIBaseExecuteCtx {
|
|
8
|
+
interaction: Discord.UserContextMenuCommandInteraction<Discord.CacheType>;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export class DBIUserContextMenu extends DBIBaseInteraction {
|
|
12
|
+
constructor(dbi: DBI, cfg: TDBIUserContextMenuOmitted) {
|
|
13
|
+
super(dbi, {
|
|
14
|
+
...(cfg as any),
|
|
15
|
+
type: "UserContextMenu"
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
directMessages?: boolean;
|
|
19
|
+
defaultMemberPermissions?: Discord.PermissionsString[];
|
|
20
|
+
override onExecute(ctx: IDBIUserContextMenuExecuteCtx): Promise<any> | any {}
|
|
21
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import _ from "lodash";
|
|
2
|
+
|
|
3
|
+
export class MemoryStore {
|
|
4
|
+
store: Record<string, any>;
|
|
5
|
+
constructor() {
|
|
6
|
+
this.store = {};
|
|
7
|
+
}
|
|
8
|
+
async get(key: string, defaultValue?: any): Promise<any> {
|
|
9
|
+
let val = _.get(this.store, key);
|
|
10
|
+
if (!val) {
|
|
11
|
+
this.set(key, defaultValue);
|
|
12
|
+
return defaultValue;
|
|
13
|
+
}
|
|
14
|
+
return val;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
async set(key: string, value: any): Promise<any> {
|
|
18
|
+
return this.store = _.set(this.store, key, value);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
async del(key: string): Promise<boolean> {
|
|
22
|
+
return _.unset(this.store, key);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
async has(key: string): Promise<boolean> {
|
|
26
|
+
return _.has(this.store, key);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { DBI } from "../DBI";
|
|
2
|
+
import * as stuffs from "stuffs";
|
|
3
|
+
|
|
4
|
+
export function customIdBuilder(dbi: DBI, name: string, customData: any[]): string {
|
|
5
|
+
let customId = [
|
|
6
|
+
name,
|
|
7
|
+
...customData.map(value => {
|
|
8
|
+
if (typeof value == "string") return value;
|
|
9
|
+
if (typeof value == "number") return `π${value}`;
|
|
10
|
+
let id = stuffs.randomString(8);
|
|
11
|
+
Object.assign(value, {
|
|
12
|
+
$ref: id,
|
|
13
|
+
$unRef() { return dbi.data.refs.delete(id); },
|
|
14
|
+
})
|
|
15
|
+
dbi.data.refs.set(id, { at: Date.now(), value });
|
|
16
|
+
return `¤${id}`;
|
|
17
|
+
})
|
|
18
|
+
].join("—");
|
|
19
|
+
if (customId.length > 100) throw new Error("Custom id cannot be longer than 100 characters.")
|
|
20
|
+
return customId;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function parseCustomId(dbi: DBI, customId: string): {name: string, data: any[]} {
|
|
24
|
+
let splitted = customId.split("—");
|
|
25
|
+
let name = splitted.shift();
|
|
26
|
+
let data = splitted.map(value => {
|
|
27
|
+
if (value.startsWith("π")) return Number(value.slice(1));
|
|
28
|
+
if (value.startsWith("¤")) return dbi.data.refs.get(value.slice(1))?.value;
|
|
29
|
+
return value;
|
|
30
|
+
});
|
|
31
|
+
return {
|
|
32
|
+
name,
|
|
33
|
+
data
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
|
|
4
|
+
export async function recursiveImport(folderPath: string): Promise<any> {
|
|
5
|
+
let files = await fs.promises.readdir(folderPath, { withFileTypes: true });
|
|
6
|
+
|
|
7
|
+
for (const file of files) {
|
|
8
|
+
let filePath = path.resolve(folderPath, file.name);
|
|
9
|
+
if (file.isDirectory()) {
|
|
10
|
+
await recursiveImport(filePath)
|
|
11
|
+
} else if (filePath.endsWith(".js")) {
|
|
12
|
+
await import(filePath)
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
// Mapped from https://www.typescriptlang.org/tsconfig
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
// Type Checking
|
|
5
|
+
"allowUnreachableCode": false,
|
|
6
|
+
"allowUnusedLabels": false,
|
|
7
|
+
"noFallthroughCasesInSwitch": true,
|
|
8
|
+
"noImplicitOverride": true,
|
|
9
|
+
"noImplicitReturns": true,
|
|
10
|
+
"strict": false,
|
|
11
|
+
"useUnknownInCatchVariables": true,
|
|
12
|
+
"noUncheckedIndexedAccess": true,
|
|
13
|
+
// Modules
|
|
14
|
+
"module": "commonjs",
|
|
15
|
+
"moduleResolution": "Node",
|
|
16
|
+
"resolveJsonModule": true,
|
|
17
|
+
// Emit
|
|
18
|
+
"declaration": true,
|
|
19
|
+
"declarationMap": true,
|
|
20
|
+
"importHelpers": true,
|
|
21
|
+
"inlineSources": true,
|
|
22
|
+
"newLine": "lf",
|
|
23
|
+
"noEmitHelpers": true,
|
|
24
|
+
"outDir": "dist",
|
|
25
|
+
"preserveConstEnums": true,
|
|
26
|
+
"removeComments": false,
|
|
27
|
+
"sourceMap": true,
|
|
28
|
+
"esModuleInterop": true,
|
|
29
|
+
"forceConsistentCasingInFileNames": true,
|
|
30
|
+
// Language and Environment
|
|
31
|
+
"emitDecoratorMetadata": true,
|
|
32
|
+
"experimentalDecorators": true,
|
|
33
|
+
"lib": [
|
|
34
|
+
"ESNext"
|
|
35
|
+
],
|
|
36
|
+
"target": "ESNext",
|
|
37
|
+
"useDefineForClassFields": true
|
|
38
|
+
}
|
|
39
|
+
}
|