@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,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,5 @@
1
+ import { PermissionFlagsBits, PermissionsString } from "discord.js";
2
+
3
+ export function reducePermissions(permStrings: PermissionsString[] = []): bigint {
4
+ return permStrings.reduce((all, curr) => PermissionFlagsBits[curr] | all, 0n);
5
+ }
@@ -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
+ }