djs-builder 0.1.0

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 (113) hide show
  1. package/.tsbuildinfo +1 -0
  2. package/README.md +243 -0
  3. package/dist/discord/builder/components/Buttons.d.ts +22 -0
  4. package/dist/discord/builder/components/Buttons.d.ts.map +1 -0
  5. package/dist/discord/builder/components/Buttons.js +80 -0
  6. package/dist/discord/builder/components/Buttons.js.map +1 -0
  7. package/dist/discord/builder/components/Menus.d.ts +31 -0
  8. package/dist/discord/builder/components/Menus.d.ts.map +1 -0
  9. package/dist/discord/builder/components/Menus.js +75 -0
  10. package/dist/discord/builder/components/Menus.js.map +1 -0
  11. package/dist/discord/builder/permissions/perms.d.ts +6 -0
  12. package/dist/discord/builder/permissions/perms.d.ts.map +1 -0
  13. package/dist/discord/builder/permissions/perms.js +68 -0
  14. package/dist/discord/builder/permissions/perms.js.map +1 -0
  15. package/dist/discord/builder/utils.d.ts +10 -0
  16. package/dist/discord/builder/utils.d.ts.map +1 -0
  17. package/dist/discord/builder/utils.js +13 -0
  18. package/dist/discord/builder/utils.js.map +1 -0
  19. package/dist/discord/events-handler/events.d.ts +3 -0
  20. package/dist/discord/events-handler/events.d.ts.map +1 -0
  21. package/dist/discord/events-handler/events.js +97 -0
  22. package/dist/discord/events-handler/events.js.map +1 -0
  23. package/dist/discord/events-handler/login.d.ts +4 -0
  24. package/dist/discord/events-handler/login.d.ts.map +1 -0
  25. package/dist/discord/events-handler/login.js +142 -0
  26. package/dist/discord/events-handler/login.js.map +1 -0
  27. package/dist/discord/events-handler/prefix-register.d.ts +7 -0
  28. package/dist/discord/events-handler/prefix-register.d.ts.map +1 -0
  29. package/dist/discord/events-handler/prefix-register.js +84 -0
  30. package/dist/discord/events-handler/prefix-register.js.map +1 -0
  31. package/dist/discord/events-handler/prefix-responder.d.ts +4 -0
  32. package/dist/discord/events-handler/prefix-responder.d.ts.map +1 -0
  33. package/dist/discord/events-handler/prefix-responder.js +89 -0
  34. package/dist/discord/events-handler/prefix-responder.js.map +1 -0
  35. package/dist/discord/events-handler/slash-register.d.ts +4 -0
  36. package/dist/discord/events-handler/slash-register.d.ts.map +1 -0
  37. package/dist/discord/events-handler/slash-register.js +84 -0
  38. package/dist/discord/events-handler/slash-register.js.map +1 -0
  39. package/dist/discord/events-handler/slash-responder.d.ts +4 -0
  40. package/dist/discord/events-handler/slash-responder.d.ts.map +1 -0
  41. package/dist/discord/events-handler/slash-responder.js +78 -0
  42. package/dist/discord/events-handler/slash-responder.js.map +1 -0
  43. package/dist/discord/events-handler/starter.d.ts +6 -0
  44. package/dist/discord/events-handler/starter.d.ts.map +1 -0
  45. package/dist/discord/events-handler/starter.js +57 -0
  46. package/dist/discord/events-handler/starter.js.map +1 -0
  47. package/dist/discord/functions/anticrash.d.ts +2 -0
  48. package/dist/discord/functions/anticrash.d.ts.map +1 -0
  49. package/dist/discord/functions/anticrash.js +50 -0
  50. package/dist/discord/functions/anticrash.js.map +1 -0
  51. package/dist/discord/functions/devLogs.d.ts +2 -0
  52. package/dist/discord/functions/devLogs.d.ts.map +1 -0
  53. package/dist/discord/functions/devLogs.js +127 -0
  54. package/dist/discord/functions/devLogs.js.map +1 -0
  55. package/dist/discord/functions/mongoDb.d.ts +4 -0
  56. package/dist/discord/functions/mongoDb.d.ts.map +1 -0
  57. package/dist/discord/functions/mongoDb.js +40 -0
  58. package/dist/discord/functions/mongoDb.js.map +1 -0
  59. package/dist/discord/functions/similarity.d.ts +4 -0
  60. package/dist/discord/functions/similarity.d.ts.map +1 -0
  61. package/dist/discord/functions/similarity.js +36 -0
  62. package/dist/discord/functions/similarity.js.map +1 -0
  63. package/dist/discord/functions/terminal.d.ts +3 -0
  64. package/dist/discord/functions/terminal.d.ts.map +1 -0
  65. package/dist/discord/functions/terminal.js +80 -0
  66. package/dist/discord/functions/terminal.js.map +1 -0
  67. package/dist/discord/functions/utils.d.ts +5 -0
  68. package/dist/discord/functions/utils.d.ts.map +1 -0
  69. package/dist/discord/functions/utils.js +11 -0
  70. package/dist/discord/functions/utils.js.map +1 -0
  71. package/dist/discord/functions/versedb.d.ts +3 -0
  72. package/dist/discord/functions/versedb.d.ts.map +1 -0
  73. package/dist/discord/functions/versedb.js +22 -0
  74. package/dist/discord/functions/versedb.js.map +1 -0
  75. package/dist/discord/types/starter.d.ts +97 -0
  76. package/dist/discord/types/starter.d.ts.map +1 -0
  77. package/dist/discord/types/starter.js +3 -0
  78. package/dist/discord/types/starter.js.map +1 -0
  79. package/dist/discord/types/utils.d.ts +3 -0
  80. package/dist/discord/types/utils.d.ts.map +1 -0
  81. package/dist/discord/types/utils.js +3 -0
  82. package/dist/discord/types/utils.js.map +1 -0
  83. package/dist/discord/utils.d.ts +4 -0
  84. package/dist/discord/utils.d.ts.map +1 -0
  85. package/dist/discord/utils.js +8 -0
  86. package/dist/discord/utils.js.map +1 -0
  87. package/dist/index.d.ts +12 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +37 -0
  90. package/dist/index.js.map +1 -0
  91. package/lib/discord/builder/components/Buttons.ts +111 -0
  92. package/lib/discord/builder/components/Menus.ts +105 -0
  93. package/lib/discord/builder/permissions/perms.ts +66 -0
  94. package/lib/discord/builder/utils.ts +11 -0
  95. package/lib/discord/events-handler/events.ts +75 -0
  96. package/lib/discord/events-handler/login.ts +117 -0
  97. package/lib/discord/events-handler/prefix-register.ts +62 -0
  98. package/lib/discord/events-handler/prefix-responder.ts +105 -0
  99. package/lib/discord/events-handler/slash-register.ts +77 -0
  100. package/lib/discord/events-handler/slash-responder.ts +89 -0
  101. package/lib/discord/events-handler/starter.ts +56 -0
  102. package/lib/discord/functions/anticrash.ts +51 -0
  103. package/lib/discord/functions/devLogs.ts +116 -0
  104. package/lib/discord/functions/mongoDb.ts +38 -0
  105. package/lib/discord/functions/similarity.ts +44 -0
  106. package/lib/discord/functions/terminal.ts +95 -0
  107. package/lib/discord/functions/utils.ts +4 -0
  108. package/lib/discord/functions/versedb.ts +17 -0
  109. package/lib/discord/types/starter.ts +108 -0
  110. package/lib/discord/types/utils.ts +2 -0
  111. package/lib/discord/utils.ts +4 -0
  112. package/lib/index.ts +35 -0
  113. package/package.json +43 -0
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.terminalLogs = void 0;
7
+ const colorette_1 = require("colorette");
8
+ const cli_table_1 = __importDefault(require("cli-table"));
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const path_1 = __importDefault(require("path"));
11
+ async function terminalLogs(client, bot) {
12
+ var _a, _b, _c, _d, _e, _f, _g;
13
+ const { user, prefixSize = 0, slashSize = 0, eventSize = 0 } = client;
14
+ const totalCommands = slashSize + prefixSize;
15
+ const totalGuilds = client.guilds.cache.size;
16
+ const totalMembers = client.guilds.cache.reduce((acc, guild) => acc + guild.memberCount, 0);
17
+ function getProjectSize(dir) {
18
+ let size = 0;
19
+ const files = fs_1.default.readdirSync(dir, { withFileTypes: true });
20
+ files.forEach(file => {
21
+ const filePath = path_1.default.join(dir, file.name);
22
+ if (file.isDirectory() && file.name !== 'node_modules') {
23
+ size += getProjectSize(filePath);
24
+ }
25
+ else if (file.isFile()) {
26
+ size += fs_1.default.statSync(filePath).size;
27
+ }
28
+ });
29
+ return size;
30
+ }
31
+ function findProjectRoot() {
32
+ let currentDir = __dirname;
33
+ while (!fs_1.default.existsSync(path_1.default.join(currentDir, 'package.json'))) {
34
+ currentDir = path_1.default.dirname(currentDir);
35
+ }
36
+ return currentDir;
37
+ }
38
+ const projectPath = findProjectRoot();
39
+ const projectSize = getProjectSize(projectPath);
40
+ const botStatesTable = new cli_table_1.default({
41
+ head: [(0, colorette_1.blue)('# Bot States')],
42
+ colWidths: [30, 20]
43
+ });
44
+ botStatesTable.push([(0, colorette_1.magenta)('Bot Name'), user.username], [(0, colorette_1.green)('Prefix Count'), prefixSize], [(0, colorette_1.red)('Slash Command Count'), slashSize], [(0, colorette_1.cyan)('Total Commands'), totalCommands], [(0, colorette_1.magenta)('Event Count'), eventSize]);
45
+ const botInfoTable = new cli_table_1.default({
46
+ head: [(0, colorette_1.blue)('# Bot Info')],
47
+ colWidths: [30, 25]
48
+ });
49
+ if ((_a = client.presence) === null || _a === void 0 ? void 0 : _a.Status) {
50
+ botInfoTable.push([(0, colorette_1.magenta)('Status'), client.presence.Status]);
51
+ }
52
+ if (((_b = bot.Status) === null || _b === void 0 ? void 0 : _b.activities) && bot.Status.activities.length > 0) {
53
+ botInfoTable.push([(0, colorette_1.green)('Activity'), bot.Status.activities[0]]);
54
+ }
55
+ if ((_c = bot.BotInfo) === null || _c === void 0 ? void 0 : _c.botInvite) {
56
+ botInfoTable.push([(0, colorette_1.magenta)('Bot Invite'), bot.BotInfo.botInvite]);
57
+ }
58
+ botInfoTable.push([(0, colorette_1.red)('Guilds Count'), totalGuilds], [(0, colorette_1.cyan)('Members Count'), totalMembers]);
59
+ if ((_d = bot.Database) === null || _d === void 0 ? void 0 : _d.verse) {
60
+ botInfoTable.push([(0, colorette_1.magenta)('Bot Database'), 'VerseDb']);
61
+ }
62
+ else if ((_e = bot.Database) === null || _e === void 0 ? void 0 : _e.mongo) {
63
+ botInfoTable.push([(0, colorette_1.magenta)('Bot Database'), 'MongoDb']);
64
+ }
65
+ botInfoTable.push([(0, colorette_1.magenta)('Bot Size'), `${(projectSize / (1024 * 1024)).toFixed(2)} MB`]);
66
+ if ((_f = client.user) === null || _f === void 0 ? void 0 : _f.displayAvatarURL()) {
67
+ botInfoTable.push([(0, colorette_1.magenta)('AvatarURL'), client.user.displayAvatarURL()]);
68
+ }
69
+ if ((_g = bot.BotInfo) === null || _g === void 0 ? void 0 : _g.ownerId) {
70
+ botInfoTable.push([(0, colorette_1.magenta)('Owner'), bot.BotInfo.ownerId]);
71
+ }
72
+ if (client.readyTimestamp) {
73
+ const loggedInAt = new Date(client.readyTimestamp).toLocaleString();
74
+ botInfoTable.push([(0, colorette_1.magenta)('Logged In At'), loggedInAt]);
75
+ }
76
+ console.log(botStatesTable.toString());
77
+ console.log(botInfoTable.toString());
78
+ }
79
+ exports.terminalLogs = terminalLogs;
80
+ //# sourceMappingURL=terminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../../lib/discord/functions/terminal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { getSimilarCommands } from './similarity';
2
+ import { mongoConnect, getDb } from './mongoDb';
3
+ import { verseConnect } from './versedb';
4
+ export { getSimilarCommands, mongoConnect, getDb, verseConnect };
5
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/discord/functions/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,CAAA"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.verseConnect = exports.getDb = exports.mongoConnect = exports.getSimilarCommands = void 0;
4
+ const similarity_1 = require("./similarity");
5
+ Object.defineProperty(exports, "getSimilarCommands", { enumerable: true, get: function () { return similarity_1.getSimilarCommands; } });
6
+ const mongoDb_1 = require("./mongoDb");
7
+ Object.defineProperty(exports, "mongoConnect", { enumerable: true, get: function () { return mongoDb_1.mongoConnect; } });
8
+ Object.defineProperty(exports, "getDb", { enumerable: true, get: function () { return mongoDb_1.getDb; } });
9
+ const versedb_1 = require("./versedb");
10
+ Object.defineProperty(exports, "verseConnect", { enumerable: true, get: function () { return versedb_1.verseConnect; } });
11
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/discord/functions/utils.ts"],"names":[],"mappings":";;;AAAA,6CAAkD;AAGzC,mGAHA,+BAAkB,OAGA;AAF3B,uCAAgD;AAEnB,6FAFpB,sBAAY,OAEoB;AAAE,sFAFpB,eAAK,OAEoB;AADhD,uCAAwC;AACU,6FADzC,sBAAY,OACyC"}
@@ -0,0 +1,3 @@
1
+ import { LocalDb } from "../types/starter";
2
+ export declare function verseConnect(options: LocalDb): Promise<import("verse.db").connect>;
3
+ //# sourceMappingURL=versedb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versedb.d.ts","sourceRoot":"","sources":["../../../lib/discord/functions/versedb.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,wBAAsB,YAAY,CAAC,OAAO,EAAE,OAAO,uCAalD"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.verseConnect = void 0;
7
+ const verse_db_1 = __importDefault(require("verse.db"));
8
+ async function verseConnect(options) {
9
+ const connection = {
10
+ adapter: options.apaterType,
11
+ dataPath: options.path,
12
+ encryption: { secret: options.encryption || 'djs-builder' },
13
+ devLogs: {
14
+ enable: options.dev.enable,
15
+ path: options.dev.logsPath || ''
16
+ }
17
+ };
18
+ const db = new verse_db_1.default.connect(connection);
19
+ return db;
20
+ }
21
+ exports.verseConnect = verseConnect;
22
+ //# sourceMappingURL=versedb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versedb.js","sourceRoot":"","sources":["../../../lib/discord/functions/versedb.ts"],"names":[],"mappings":";;;;;;AAAA,wDAA+B;AAGxB,KAAK,UAAU,YAAY,CAAC,OAAgB;IAC/C,MAAM,UAAU,GAAG;QACf,OAAO,EAAE,OAAO,CAAC,UAAU;QAC3B,QAAQ,EAAE,OAAO,CAAC,IAAI;QACtB,UAAU,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU,IAAI,aAAa,EAAE;QAC3D,OAAO,EAAE;YACL,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM;YAC1B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE;SACnC;KACJ,CAAC;IAEF,MAAM,EAAE,GAAG,IAAI,kBAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IAC1C,OAAO,EAAE,CAAC;AACd,CAAC;AAbD,oCAaC"}
@@ -0,0 +1,97 @@
1
+ import { Client } from 'discord.js';
2
+ export interface BotOptions {
3
+ token?: string;
4
+ logs?: {
5
+ devLogs?: {
6
+ enable: boolean;
7
+ pathToWatch: any;
8
+ webhookURL: string;
9
+ mention?: string;
10
+ };
11
+ terminal?: boolean;
12
+ };
13
+ name?: string;
14
+ avatar?: string;
15
+ banner?: string;
16
+ BotInfo?: {
17
+ perms?: string[];
18
+ serverId?: string;
19
+ botInvite?: string;
20
+ serverInvite?: string;
21
+ ownerId?: string;
22
+ partners?: string[];
23
+ };
24
+ Status?: {
25
+ state: 'online' | 'dnd' | 'idle' | 'invisible' | 'Streaming' | any;
26
+ activities?: string[] | undefined;
27
+ type?: number;
28
+ delay?: number;
29
+ };
30
+ Database?: {
31
+ mongo?: MongoDbOptions;
32
+ verse?: LocalDb;
33
+ };
34
+ }
35
+ export interface SlashOptions {
36
+ path: string;
37
+ baseDir: any;
38
+ global?: boolean;
39
+ serverId?: string;
40
+ logsId?: string;
41
+ }
42
+ export interface PrefixOptions {
43
+ path: string;
44
+ baseDir: any;
45
+ prefix: string;
46
+ global?: boolean;
47
+ serverIds?: string[];
48
+ logsId?: string;
49
+ }
50
+ export interface MongoDbOptions {
51
+ mongoURI: string;
52
+ dbName?: string;
53
+ }
54
+ export interface LocalDb {
55
+ apaterType: 'json' | 'sql' | 'yaml';
56
+ path: string;
57
+ dev: {
58
+ enable: boolean;
59
+ logsPath?: string;
60
+ };
61
+ encryption?: string;
62
+ }
63
+ export interface AntiCrash {
64
+ enable: boolean;
65
+ webhookURL: string;
66
+ mention?: string;
67
+ }
68
+ export interface EventsOptions {
69
+ path: string;
70
+ baseDir: any;
71
+ logsId?: string;
72
+ recursive?: boolean;
73
+ eventBlacklist?: string[];
74
+ }
75
+ export interface Command {
76
+ name: string;
77
+ description?: string;
78
+ execute?: (...args: any[]) => void;
79
+ run?: (...args: any[]) => void;
80
+ aliases?: string[];
81
+ cooldown?: number;
82
+ usage?: string;
83
+ prefix?: boolean;
84
+ category?: string;
85
+ owner?: boolean;
86
+ }
87
+ export interface StarterOptions {
88
+ bot: BotOptions;
89
+ slash?: SlashOptions;
90
+ prefix?: PrefixOptions;
91
+ events?: EventsOptions;
92
+ anticrash?: AntiCrash;
93
+ }
94
+ export interface StarterInterface {
95
+ start(djs: Client, options: StarterOptions): Promise<any>;
96
+ }
97
+ //# sourceMappingURL=starter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"starter.d.ts","sourceRoot":"","sources":["../../../lib/discord/types/starter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=starter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"starter.js","sourceRoot":"","sources":["../../../lib/discord/types/starter.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { StarterOptions, StarterInterface, EventsOptions, Command, PrefixOptions, SlashOptions } from './starter';
2
+ export { StarterOptions, StarterInterface, EventsOptions, Command, PrefixOptions, SlashOptions };
3
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/discord/types/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACjH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAI,CAAA"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/discord/types/utils.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import { Starter } from "./events-handler/starter";
2
+ import { Components } from './builder/utils';
3
+ export { Starter, Components };
4
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/discord/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAA"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Components = exports.Starter = void 0;
4
+ const starter_1 = require("./events-handler/starter");
5
+ Object.defineProperty(exports, "Starter", { enumerable: true, get: function () { return starter_1.Starter; } });
6
+ const utils_1 = require("./builder/utils");
7
+ Object.defineProperty(exports, "Components", { enumerable: true, get: function () { return utils_1.Components; } });
8
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/discord/utils.ts"],"names":[],"mappings":";;;AAAA,sDAAmD;AAG1C,wFAHA,iBAAO,OAGA;AAFhB,2CAA6C;AAE3B,2FAFT,kBAAU,OAES"}
@@ -0,0 +1,12 @@
1
+ import { Starter, Components } from "./discord/utils";
2
+ export { Starter, Components };
3
+ declare const _default: {
4
+ Starter: typeof Starter;
5
+ Components: {
6
+ ButtonManager: typeof import("./discord/builder/components/Buttons").ButtonManager;
7
+ MenuManager: typeof import("./discord/builder/components/Menus").MenuManager;
8
+ PermissionChecker: typeof import("./discord/builder/permissions/perms").PermissionChecker;
9
+ };
10
+ };
11
+ export default _default;
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AA+BA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;;;;;;;;;AAC/B,wBAAuC"}
package/dist/index.js ADDED
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Components = exports.Starter = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const RED = "\x1b[31m";
11
+ const CYAN = "\x1b[36m";
12
+ const RESET = "\x1b[0m";
13
+ const packageJsonPath = path_1.default.resolve(process.cwd(), "package.json");
14
+ const packageJson = JSON.parse(fs_1.default.readFileSync(packageJsonPath, "utf8"));
15
+ const getLibraryVersion = function (library) {
16
+ const dependencies = packageJson.dependencies || {};
17
+ const devDependencies = packageJson.devDependencies || {};
18
+ const version = (dependencies[library] || devDependencies[library] || "").replace(/^(\^|~)/, "") || "Not installed";
19
+ return version;
20
+ };
21
+ axios_1.default
22
+ .get("https://registry.npmjs.com/-/v1/search?text=djs-builder")
23
+ .then(function (response) {
24
+ var _a, _b;
25
+ const version = (_b = (_a = response.data.objects[0]) === null || _a === void 0 ? void 0 : _a.package) === null || _b === void 0 ? void 0 : _b.version;
26
+ if (version && getLibraryVersion("djs-builder") !== version) {
27
+ console.error(CYAN +
28
+ "Error: Please update djs-builder to the latest version (" + version + ")." +
29
+ RESET);
30
+ }
31
+ })
32
+ .catch(function (error) { });
33
+ const utils_1 = require("./discord/utils");
34
+ Object.defineProperty(exports, "Starter", { enumerable: true, get: function () { return utils_1.Starter; } });
35
+ Object.defineProperty(exports, "Components", { enumerable: true, get: function () { return utils_1.Components; } });
36
+ exports.default = { Starter: utils_1.Starter, Components: utils_1.Components };
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,gDAAwB;AACxB,4CAAoB;AAEpB,MAAM,GAAG,GAAW,UAAU,CAAC;AAC/B,MAAM,IAAI,GAAW,UAAU,CAAC;AAChC,MAAM,KAAK,GAAW,SAAS,CAAC;AAEhC,MAAM,eAAe,GAAW,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;AAC5E,MAAM,WAAW,GAAQ,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;AAE9E,MAAM,iBAAiB,GAAG,UAAS,OAAe;IAC9C,MAAM,YAAY,GAAQ,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC;IACzD,MAAM,eAAe,GAAQ,WAAW,CAAC,eAAe,IAAI,EAAE,CAAC;IAC/D,MAAM,OAAO,GAAW,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC;IAC5H,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAEF,eAAK;KACA,GAAG,CAAC,yDAAyD,CAAC;KAC9D,IAAI,CAAC,UAAS,QAAa;;IACxB,MAAM,OAAO,GAAW,MAAA,MAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,0CAAE,OAAO,0CAAE,OAAO,CAAC;IACnE,IAAI,OAAO,IAAI,iBAAiB,CAAC,aAAa,CAAC,KAAK,OAAO,EAAE,CAAC;QAC1D,OAAO,CAAC,KAAK,CAAC,IAAI;YACd,0DAA0D,GAAG,OAAO,GAAG,IAAI;YAC3E,KAAK,CAAC,CAAC;IACf,CAAC;AACL,CAAC,CAAC;KACD,KAAK,CAAC,UAAS,KAAU,IAAG,CAAC,CAAC,CAAC;AAGpC,2CAAsD;AAE7C,wFAFA,eAAO,OAEA;AAAE,2FAFA,kBAAU,OAEA;AAC5B,kBAAe,EAAE,OAAO,EAAP,eAAO,EAAE,UAAU,EAAV,kBAAU,EAAE,CAAC"}
@@ -0,0 +1,111 @@
1
+ import { ButtonBuilder, ActionRowBuilder, ButtonStyle } from 'discord.js';
2
+
3
+ export class ButtonManager {
4
+ buttonsData: Array<{
5
+ label?: string;
6
+ style: ButtonStyle | string;
7
+ customId?: string;
8
+ emoji?: string;
9
+ url?: string;
10
+ disabled?: boolean;
11
+ }>;
12
+
13
+ constructor(buttonsData: Array<{
14
+ label?: string;
15
+ style: ButtonStyle | string;
16
+ customId?: string;
17
+ emoji?: string;
18
+ url?: string;
19
+ disabled?: boolean;
20
+ }>) {
21
+ this.buttonsData = buttonsData;
22
+ }
23
+
24
+ createButtons(): ButtonBuilder[] {
25
+ const duplicateCustomId = this.buttonsData
26
+ .map(({ customId }) => customId)
27
+ .find((id, index, array) => array.indexOf(id) !== index);
28
+
29
+ if (duplicateCustomId) {
30
+ throw new Error(`Duplicate customId found: ${duplicateCustomId}. Each customId must be unique.`);
31
+ }
32
+
33
+ const buttons = this.buttonsData.map(buttonInfo => {
34
+ const { label, style, customId, emoji, url, disabled } = buttonInfo;
35
+ const button = new ButtonBuilder();
36
+
37
+ if ((!customId && !url) || (customId && typeof customId !== 'string')) {
38
+ throw new Error('Invalid customId. Must be a non-empty string.');
39
+ }
40
+
41
+ if (customId) {
42
+ button.setCustomId(customId);
43
+ }
44
+
45
+ if (!style) {
46
+ throw new Error('Invalid style: Style option is required for the button.');
47
+ }
48
+
49
+ if (typeof style === 'string') {
50
+ if (!Object.values(ButtonStyle).includes(style)) {
51
+ throw new Error(`Invalid style: ${style}. Valid styles are ${Object.values(ButtonStyle).join(', ')}.`);
52
+ }
53
+ } else {
54
+ if (!Object.values(ButtonStyle).includes(style)) {
55
+ throw new Error(`Invalid style: ${style}. Valid styles are ${Object.values(ButtonStyle).join(', ')}.`);
56
+ }
57
+ button.setStyle(style);
58
+ }
59
+
60
+ if (url && style !== ButtonStyle.Link) {
61
+ throw new TypeError('Non-link buttons cannot have a URL');
62
+ }
63
+
64
+ if (url && style === ButtonStyle.Link) {
65
+ if (!url.startsWith('http')) {
66
+ throw new Error('Invalid URL format. Must start with "http" or "https".');
67
+ }
68
+ button.setURL(url);
69
+ }
70
+
71
+ if (emoji) {
72
+ button.setEmoji(emoji);
73
+ }
74
+
75
+ if (label) {
76
+ button.setLabel(label);
77
+ }
78
+
79
+ if (!url && !customId) {
80
+ throw new Error('Invalid Button: At least provide url or customId.');
81
+ }
82
+
83
+ if (disabled !== undefined) {
84
+ if (typeof disabled !== 'boolean') {
85
+ throw new Error('Invalid disabled: Must be a boolean (true/false).');
86
+ }
87
+ button.setDisabled(disabled);
88
+ }
89
+
90
+ return button;
91
+ });
92
+
93
+ const totalButtons = buttons.length;
94
+
95
+ if (totalButtons > 5) {
96
+ throw new Error(`Invalid Action Row: An action row can have at most 5 buttons. Current count: ${totalButtons}`);
97
+ }
98
+
99
+ return buttons;
100
+ }
101
+
102
+ ButtonBuild(): ActionRowBuilder {
103
+ const buttons = this.createButtons();
104
+
105
+ if (buttons.length === 0) {
106
+ throw new Error('Invalid Action Row: At least one button is required.');
107
+ }
108
+
109
+ return new ActionRowBuilder().addComponents(buttons);
110
+ }
111
+ }
@@ -0,0 +1,105 @@
1
+ import { StringSelectMenuBuilder, StringSelectMenuOptionBuilder, ActionRowBuilder } from 'discord.js';
2
+
3
+ export class MenuManager {
4
+ options: Array<{
5
+ label: string;
6
+ value: string;
7
+ description?: string;
8
+ emoji?: string;
9
+ default?: boolean;
10
+ }>;
11
+ customId: string;
12
+ placeholder: string;
13
+ minValues: number;
14
+ maxValues: number;
15
+ disabled: boolean;
16
+
17
+ constructor(
18
+ options: Array<{
19
+ label: string;
20
+ value: string;
21
+ description?: string;
22
+ emoji?: string;
23
+ default?: boolean;
24
+ }>,
25
+ customId: string,
26
+ placeholder: string,
27
+ minValues: number = 1,
28
+ maxValues: number = 1,
29
+ disabled: boolean = false
30
+ ) {
31
+ if (!options || !Array.isArray(options) || options.length === 0) {
32
+ throw new Error('Options are required and must be a non-empty array.');
33
+ }
34
+ if (minValues < 1) {
35
+ throw new Error('Minimum values must be 1 or greater.');
36
+ }
37
+ if (options.length > 25) {
38
+ throw new Error('Number of options cannot exceed 25.');
39
+ }
40
+ if (maxValues < 1) {
41
+ throw new Error('Maximum values must be 1 or greater.');
42
+ }
43
+ if (maxValues > options.length) {
44
+ throw new Error('Maximum values cannot exceed the number of options.');
45
+ }
46
+ if (!customId || typeof customId !== 'string') {
47
+ throw new Error('Custom ID is required and must be a non-empty string.');
48
+ }
49
+ if (!placeholder || typeof placeholder !== 'string') {
50
+ throw new Error('Placeholder is required and must be a non-empty string.');
51
+ }
52
+ const duplicateValue = options
53
+ .map(({ value }) => value)
54
+ .find((val, index, array) => array.indexOf(val) !== index);
55
+ if (duplicateValue) {
56
+ throw new Error(`Duplicate value found: ${duplicateValue}. Each value must be unique.`);
57
+ }
58
+ this.options = options;
59
+ this.customId = customId;
60
+ this.placeholder = placeholder;
61
+ this.minValues = minValues;
62
+ this.maxValues = maxValues;
63
+ this.disabled = disabled;
64
+ }
65
+
66
+ createSelectMenu() {
67
+ const selectMenu = new StringSelectMenuBuilder()
68
+ .setCustomId(this.customId)
69
+ .setPlaceholder(this.placeholder)
70
+ .setMinValues(this.minValues)
71
+ .setMaxValues(this.maxValues)
72
+ .setDisabled(this.disabled)
73
+ .addOptions(this.options.map(option => this.createSelectMenuOption(option)));
74
+ const row = new ActionRowBuilder().addComponents(selectMenu);
75
+ return row;
76
+ }
77
+
78
+ createSelectMenuOption({ label, value, description, emoji, default: isDefault }: {
79
+ label: string;
80
+ value: string;
81
+ description?: string;
82
+ emoji?: string;
83
+ default?: boolean;
84
+ }) {
85
+ if (!label || !value) {
86
+ throw new Error('Label and value are required for each option.');
87
+ }
88
+ const option = new StringSelectMenuOptionBuilder()
89
+ .setLabel(label)
90
+ .setValue(value);
91
+ if (description !== undefined) {
92
+ option.setDescription(description);
93
+ }
94
+ if (emoji) {
95
+ option.setEmoji(emoji);
96
+ }
97
+ if (isDefault) {
98
+ if (this.options.some(opt => opt.default)) {
99
+ throw new Error('Only one option can be set as default.');
100
+ }
101
+ option.setDefault(true);
102
+ }
103
+ return option;
104
+ }
105
+ }
@@ -0,0 +1,66 @@
1
+ import { Guild, PermissionResolvable, Snowflake } from 'discord.js';
2
+
3
+ export class PermissionChecker {
4
+ private validPermissions: Set<PermissionResolvable> = new Set([
5
+ 'CreateInstantInvite',
6
+ 'KickMembers',
7
+ 'BanMembers',
8
+ 'Administrator',
9
+ 'ManageChannels',
10
+ 'ManageGuild',
11
+ 'AddReactions',
12
+ 'ViewAuditLog',
13
+ 'PrioritySpeaker',
14
+ 'Stream',
15
+ 'ViewChannel',
16
+ 'SendMessages',
17
+ 'SendTTSMessages',
18
+ 'ManageMessages',
19
+ 'EmbedLinks',
20
+ 'AttachFiles',
21
+ 'ReadMessageHistory',
22
+ 'MentionEveryone',
23
+ 'UseExternalEmojis',
24
+ 'ViewGuildInsights',
25
+ 'Connect',
26
+ 'Speak',
27
+ 'MuteMembers',
28
+ 'DeafenMembers',
29
+ 'MoveMembers',
30
+ 'UseVAD',
31
+ 'ChangeNickname',
32
+ 'ManageNicknames',
33
+ 'ManageRoles',
34
+ 'ManageWebhooks',
35
+ 'ManageEmojisAndStickers',
36
+ 'ManageGuildExpressions',
37
+ 'UseApplicationCommands',
38
+ 'RequestToSpeak',
39
+ 'ManageEvents',
40
+ 'ManageThreads',
41
+ 'CreatePublicThreads',
42
+ 'CreatePrivateThreads',
43
+ 'UseExternalStickers',
44
+ 'SendMessagesInThreads',
45
+ 'UseEmbeddedActivities',
46
+ 'ModerateMembers',
47
+ 'ViewCreatorMonetizationAnalytics',
48
+ 'UseSoundboard',
49
+ 'UseExternalSounds',
50
+ 'SendVoiceMessages'
51
+ ]);
52
+
53
+ async checker(target: Snowflake, guild: Guild, requiredPermissions: PermissionResolvable[]): Promise<boolean> {
54
+ if (!requiredPermissions || !Array.isArray(requiredPermissions) || requiredPermissions.length === 0) {
55
+ throw new Error('Invalid requiredPermissions. Must be a non-empty array.');
56
+ }
57
+
58
+ const invalidPermissions = requiredPermissions.filter(permission => !this.validPermissions.has(permission));
59
+ if (invalidPermissions.length > 0) {
60
+ throw new Error(`Invalid permissions found: ${invalidPermissions.join(', ')}.`);
61
+ }
62
+
63
+ const member = await guild.members.fetch(target);
64
+ return member.permissions.has(requiredPermissions);
65
+ }
66
+ }