djs-builder 0.5.42 → 0.6.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 (156) hide show
  1. package/README.md +140 -303
  2. package/function/function.js +236 -0
  3. package/function/log.js +736 -0
  4. package/handler/helper.js +277 -0
  5. package/handler/starter.js +335 -0
  6. package/package.json +10 -42
  7. package/.tsbuildinfo +0 -1
  8. package/dist/discord/builder/components/Buttons.d.ts +0 -22
  9. package/dist/discord/builder/components/Buttons.d.ts.map +0 -1
  10. package/dist/discord/builder/components/Buttons.js +0 -91
  11. package/dist/discord/builder/components/Buttons.js.map +0 -1
  12. package/dist/discord/builder/components/Menus.d.ts +0 -31
  13. package/dist/discord/builder/components/Menus.d.ts.map +0 -1
  14. package/dist/discord/builder/components/Menus.js +0 -82
  15. package/dist/discord/builder/components/Menus.js.map +0 -1
  16. package/dist/discord/builder/permissions/perms.d.ts +0 -6
  17. package/dist/discord/builder/permissions/perms.d.ts.map +0 -1
  18. package/dist/discord/builder/permissions/perms.js +0 -66
  19. package/dist/discord/builder/permissions/perms.js.map +0 -1
  20. package/dist/discord/builder/system/Pagination.d.ts +0 -68
  21. package/dist/discord/builder/system/Pagination.d.ts.map +0 -1
  22. package/dist/discord/builder/system/Pagination.js +0 -256
  23. package/dist/discord/builder/system/Pagination.js.map +0 -1
  24. package/dist/discord/builder/system/collectors.d.ts +0 -27
  25. package/dist/discord/builder/system/collectors.d.ts.map +0 -1
  26. package/dist/discord/builder/system/collectors.js +0 -137
  27. package/dist/discord/builder/system/collectors.js.map +0 -1
  28. package/dist/discord/builder/utils.d.ts +0 -5
  29. package/dist/discord/builder/utils.d.ts.map +0 -1
  30. package/dist/discord/builder/utils.js +0 -10
  31. package/dist/discord/builder/utils.js.map +0 -1
  32. package/dist/discord/events-handler/eventLoader.d.ts +0 -13
  33. package/dist/discord/events-handler/eventLoader.d.ts.map +0 -1
  34. package/dist/discord/events-handler/eventLoader.js +0 -169
  35. package/dist/discord/events-handler/eventLoader.js.map +0 -1
  36. package/dist/discord/events-handler/events.d.ts +0 -8
  37. package/dist/discord/events-handler/events.d.ts.map +0 -1
  38. package/dist/discord/events-handler/events.js +0 -186
  39. package/dist/discord/events-handler/events.js.map +0 -1
  40. package/dist/discord/events-handler/login.d.ts +0 -9
  41. package/dist/discord/events-handler/login.d.ts.map +0 -1
  42. package/dist/discord/events-handler/login.js +0 -273
  43. package/dist/discord/events-handler/login.js.map +0 -1
  44. package/dist/discord/events-handler/prefix-register.d.ts +0 -23
  45. package/dist/discord/events-handler/prefix-register.d.ts.map +0 -1
  46. package/dist/discord/events-handler/prefix-register.js +0 -109
  47. package/dist/discord/events-handler/prefix-register.js.map +0 -1
  48. package/dist/discord/events-handler/prefix-responder.d.ts +0 -5
  49. package/dist/discord/events-handler/prefix-responder.d.ts.map +0 -1
  50. package/dist/discord/events-handler/prefix-responder.js +0 -155
  51. package/dist/discord/events-handler/prefix-responder.js.map +0 -1
  52. package/dist/discord/events-handler/prefixLoader.d.ts +0 -7
  53. package/dist/discord/events-handler/prefixLoader.d.ts.map +0 -1
  54. package/dist/discord/events-handler/prefixLoader.js +0 -74
  55. package/dist/discord/events-handler/prefixLoader.js.map +0 -1
  56. package/dist/discord/events-handler/slash-register.d.ts +0 -4
  57. package/dist/discord/events-handler/slash-register.d.ts.map +0 -1
  58. package/dist/discord/events-handler/slash-register.js +0 -85
  59. package/dist/discord/events-handler/slash-register.js.map +0 -1
  60. package/dist/discord/events-handler/slash-responder.d.ts +0 -3
  61. package/dist/discord/events-handler/slash-responder.d.ts.map +0 -1
  62. package/dist/discord/events-handler/slash-responder.js +0 -112
  63. package/dist/discord/events-handler/slash-responder.js.map +0 -1
  64. package/dist/discord/events-handler/slashLoader.d.ts +0 -7
  65. package/dist/discord/events-handler/slashLoader.d.ts.map +0 -1
  66. package/dist/discord/events-handler/slashLoader.js +0 -94
  67. package/dist/discord/events-handler/slashLoader.js.map +0 -1
  68. package/dist/discord/events-handler/starter.d.ts +0 -6
  69. package/dist/discord/events-handler/starter.d.ts.map +0 -1
  70. package/dist/discord/events-handler/starter.js +0 -85
  71. package/dist/discord/events-handler/starter.js.map +0 -1
  72. package/dist/discord/functions/anticrash.d.ts +0 -3
  73. package/dist/discord/functions/anticrash.d.ts.map +0 -1
  74. package/dist/discord/functions/anticrash.js +0 -55
  75. package/dist/discord/functions/anticrash.js.map +0 -1
  76. package/dist/discord/functions/devLogs.d.ts +0 -2
  77. package/dist/discord/functions/devLogs.d.ts.map +0 -1
  78. package/dist/discord/functions/devLogs.js +0 -137
  79. package/dist/discord/functions/devLogs.js.map +0 -1
  80. package/dist/discord/functions/logger.d.ts +0 -5
  81. package/dist/discord/functions/logger.d.ts.map +0 -1
  82. package/dist/discord/functions/logger.js +0 -57
  83. package/dist/discord/functions/logger.js.map +0 -1
  84. package/dist/discord/functions/mongoDb.d.ts +0 -4
  85. package/dist/discord/functions/mongoDb.d.ts.map +0 -1
  86. package/dist/discord/functions/mongoDb.js +0 -39
  87. package/dist/discord/functions/mongoDb.js.map +0 -1
  88. package/dist/discord/functions/similarity.d.ts +0 -3
  89. package/dist/discord/functions/similarity.d.ts.map +0 -1
  90. package/dist/discord/functions/similarity.js +0 -56
  91. package/dist/discord/functions/similarity.js.map +0 -1
  92. package/dist/discord/functions/terminal.d.ts +0 -2
  93. package/dist/discord/functions/terminal.d.ts.map +0 -1
  94. package/dist/discord/functions/terminal.js +0 -127
  95. package/dist/discord/functions/terminal.js.map +0 -1
  96. package/dist/discord/functions/utils.d.ts +0 -5
  97. package/dist/discord/functions/utils.d.ts.map +0 -1
  98. package/dist/discord/functions/utils.js +0 -11
  99. package/dist/discord/functions/utils.js.map +0 -1
  100. package/dist/discord/functions/versedb.d.ts +0 -3
  101. package/dist/discord/functions/versedb.d.ts.map +0 -1
  102. package/dist/discord/functions/versedb.js +0 -21
  103. package/dist/discord/functions/versedb.js.map +0 -1
  104. package/dist/discord/games/X-O.d.ts +0 -20
  105. package/dist/discord/games/X-O.d.ts.map +0 -1
  106. package/dist/discord/games/X-O.js +0 -166
  107. package/dist/discord/games/X-O.js.map +0 -1
  108. package/dist/discord/games/rps.d.ts +0 -21
  109. package/dist/discord/games/rps.d.ts.map +0 -1
  110. package/dist/discord/games/rps.js +0 -99
  111. package/dist/discord/games/rps.js.map +0 -1
  112. package/dist/discord/types/starter.d.ts +0 -144
  113. package/dist/discord/types/starter.d.ts.map +0 -1
  114. package/dist/discord/types/starter.js +0 -3
  115. package/dist/discord/types/starter.js.map +0 -1
  116. package/dist/discord/types/utils.d.ts +0 -3
  117. package/dist/discord/types/utils.d.ts.map +0 -1
  118. package/dist/discord/types/utils.js +0 -3
  119. package/dist/discord/types/utils.js.map +0 -1
  120. package/dist/discord/utils.d.ts +0 -15
  121. package/dist/discord/utils.d.ts.map +0 -1
  122. package/dist/discord/utils.js +0 -41
  123. package/dist/discord/utils.js.map +0 -1
  124. package/dist/index.d.ts +0 -4
  125. package/dist/index.d.ts.map +0 -1
  126. package/dist/index.js +0 -71
  127. package/dist/index.js.map +0 -1
  128. package/lib/discord/builder/components/Buttons.ts +0 -123
  129. package/lib/discord/builder/components/Menus.ts +0 -106
  130. package/lib/discord/builder/permissions/perms.ts +0 -66
  131. package/lib/discord/builder/system/Pagination.ts +0 -374
  132. package/lib/discord/builder/system/collectors.ts +0 -197
  133. package/lib/discord/builder/utils.ts +0 -9
  134. package/lib/discord/events-handler/eventLoader.ts +0 -166
  135. package/lib/discord/events-handler/events.ts +0 -160
  136. package/lib/discord/events-handler/login.ts +0 -265
  137. package/lib/discord/events-handler/prefix-register.ts +0 -117
  138. package/lib/discord/events-handler/prefix-responder.ts +0 -176
  139. package/lib/discord/events-handler/prefixLoader.ts +0 -83
  140. package/lib/discord/events-handler/slash-register.ts +0 -81
  141. package/lib/discord/events-handler/slash-responder.ts +0 -136
  142. package/lib/discord/events-handler/slashLoader.ts +0 -104
  143. package/lib/discord/events-handler/starter.ts +0 -85
  144. package/lib/discord/functions/anticrash.ts +0 -60
  145. package/lib/discord/functions/devLogs.ts +0 -128
  146. package/lib/discord/functions/logger.ts +0 -58
  147. package/lib/discord/functions/mongoDb.ts +0 -38
  148. package/lib/discord/functions/similarity.ts +0 -70
  149. package/lib/discord/functions/terminal.ts +0 -162
  150. package/lib/discord/functions/utils.ts +0 -4
  151. package/lib/discord/functions/versedb.ts +0 -17
  152. package/lib/discord/types/starter.ts +0 -158
  153. package/lib/discord/types/utils.ts +0 -2
  154. package/lib/discord/utils.ts +0 -17
  155. package/lib/index.ts +0 -37
  156. package/tsconfig.json +0 -21
package/dist/index.js DELETED
@@ -1,71 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- var __importDefault = (this && this.__importDefault) || function (mod) {
17
- return (mod && mod.__esModule) ? mod : { "default": mod };
18
- };
19
- Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.Djs_Collectors = exports.Pagination = exports.logWarning = exports.logSuccess = exports.logInfo = exports.logError = exports.processEventFile = exports.registerSlashCommands = exports.withRetry = exports.limitConcurrency = exports.countEventFiles = exports.processDirectory = exports.handleMessageCreate = exports.loadPrefix = exports.loadSlash = exports.loadEvents = exports.readCommands = exports.eventLoader = exports.prefixLoader = exports.slashLoader = exports.PermissionChecker = exports.MenuManager = exports.ButtonManager = exports.Starter = void 0;
21
- const path_1 = __importDefault(require("path"));
22
- const fs_1 = __importDefault(require("fs"));
23
- const packageJsonPath = path_1.default.resolve(process.cwd(), "package.json");
24
- const packageJson = JSON.parse(fs_1.default.readFileSync(packageJsonPath, "utf8"));
25
- const getLibraryVersion = function (library) {
26
- const dependencies = packageJson.dependencies || {};
27
- const devDependencies = packageJson.devDependencies || {};
28
- const version = (dependencies[library] || devDependencies[library] || "").replace(/^(\^|~)/, "") || "Not installed";
29
- return version;
30
- };
31
- fetch("https://registry.npmjs.com/-/v1/search?text=djs-builder")
32
- .then(response => {
33
- if (!response.ok) {
34
- throw new Error('Failed to fetch');
35
- }
36
- return response.json();
37
- })
38
- .then(data => {
39
- const version = data.objects[0]?.package?.version;
40
- if (version && getLibraryVersion("djs-builder") !== version) {
41
- console.error("Error: Please update djs-builder to the latest version (" + version + ").");
42
- }
43
- })
44
- .catch((e) => { });
45
- const utils_1 = require("./discord/utils");
46
- Object.defineProperty(exports, "Starter", { enumerable: true, get: function () { return utils_1.Starter; } });
47
- Object.defineProperty(exports, "ButtonManager", { enumerable: true, get: function () { return utils_1.ButtonManager; } });
48
- Object.defineProperty(exports, "MenuManager", { enumerable: true, get: function () { return utils_1.MenuManager; } });
49
- Object.defineProperty(exports, "PermissionChecker", { enumerable: true, get: function () { return utils_1.PermissionChecker; } });
50
- Object.defineProperty(exports, "slashLoader", { enumerable: true, get: function () { return utils_1.slashLoader; } });
51
- Object.defineProperty(exports, "prefixLoader", { enumerable: true, get: function () { return utils_1.prefixLoader; } });
52
- Object.defineProperty(exports, "eventLoader", { enumerable: true, get: function () { return utils_1.eventLoader; } });
53
- Object.defineProperty(exports, "readCommands", { enumerable: true, get: function () { return utils_1.readCommands; } });
54
- Object.defineProperty(exports, "loadEvents", { enumerable: true, get: function () { return utils_1.loadEvents; } });
55
- Object.defineProperty(exports, "loadSlash", { enumerable: true, get: function () { return utils_1.loadSlash; } });
56
- Object.defineProperty(exports, "loadPrefix", { enumerable: true, get: function () { return utils_1.loadPrefix; } });
57
- Object.defineProperty(exports, "handleMessageCreate", { enumerable: true, get: function () { return utils_1.handleMessageCreate; } });
58
- Object.defineProperty(exports, "processDirectory", { enumerable: true, get: function () { return utils_1.processDirectory; } });
59
- Object.defineProperty(exports, "countEventFiles", { enumerable: true, get: function () { return utils_1.countEventFiles; } });
60
- Object.defineProperty(exports, "limitConcurrency", { enumerable: true, get: function () { return utils_1.limitConcurrency; } });
61
- Object.defineProperty(exports, "withRetry", { enumerable: true, get: function () { return utils_1.withRetry; } });
62
- Object.defineProperty(exports, "registerSlashCommands", { enumerable: true, get: function () { return utils_1.registerSlashCommands; } });
63
- Object.defineProperty(exports, "processEventFile", { enumerable: true, get: function () { return utils_1.processEventFile; } });
64
- Object.defineProperty(exports, "logError", { enumerable: true, get: function () { return utils_1.logError; } });
65
- Object.defineProperty(exports, "logInfo", { enumerable: true, get: function () { return utils_1.logInfo; } });
66
- Object.defineProperty(exports, "logSuccess", { enumerable: true, get: function () { return utils_1.logSuccess; } });
67
- Object.defineProperty(exports, "logWarning", { enumerable: true, get: function () { return utils_1.logWarning; } });
68
- Object.defineProperty(exports, "Pagination", { enumerable: true, get: function () { return utils_1.Pagination; } });
69
- Object.defineProperty(exports, "Djs_Collectors", { enumerable: true, get: function () { return utils_1.Djs_Collectors; } });
70
- __exportStar(require("./discord/types/starter"), exports);
71
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,4CAAoB;AAEpB,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,OAAY;IAC3C,MAAM,YAAY,GAAG,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC;IACpD,MAAM,eAAe,GAAG,WAAW,CAAC,eAAe,IAAI,EAAE,CAAC;IAC1D,MAAM,OAAO,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC;IACpH,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAEF,KAAK,CAAC,yDAAyD,CAAC;KAC3D,IAAI,CAAC,QAAQ,CAAC,EAAE;IACb,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC3B,CAAC,CAAC;KACD,IAAI,CAAC,IAAI,CAAC,EAAE;IACT,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;IAClD,IAAI,OAAO,IAAI,iBAAiB,CAAC,aAAa,CAAC,KAAK,OAAO,EAAE,CAAC;QAC1D,OAAO,CAAC,KAAK,CAAC,0DAA0D,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;IAC/F,CAAC;AACL,CAAC,CAAC;KACD,KAAK,CAAC,CAAC,CAAM,EAAE,EAAE,GAAE,CAAC,CAAC,CAAC;AAG3B,2CAEsH;AAE7G,wFAJA,eAAO,OAIA;AAAE,8FAJA,qBAAa,OAIA;AAAE,4FAJA,mBAAW,OAIA;AAAE,kGAJA,yBAAiB,OAIA;AAAE,4FAJA,mBAAW,OAIA;AAAE,6FAJA,oBAAY,OAIA;AAAE,4FAJA,mBAAW,OAIA;AAAE,6FAJA,oBAAY,OAIA;AAAE,2FAJA,kBAAU,OAIA;AAC7H,0FAJA,iBAAS,OAIA;AAAE,2FAJA,kBAAU,OAIA;AAAE,oGAJA,2BAAmB,OAIA;AAAE,iGAJA,wBAAgB,OAIA;AAAE,gGAJA,uBAAe,OAIA;AAAE,iGAJA,wBAAgB,OAIA;AAAE,0FAJA,iBAAS,OAIA;AAAE,sGAJA,6BAAqB,OAIA;AAChI,iGAJA,wBAAgB,OAIA;AAAG,yFAJD,gBAAQ,OAIC;AAAE,wFAJD,eAAO,OAIC;AAAE,2FAJD,kBAAU,OAIC;AAAE,2FAJD,kBAAU,OAIC;AAAE,2FAJD,kBAAU,OAIC;AAAE,+FAJD,sBAAc,OAIC;AAC7F,0DAAwC"}
@@ -1,123 +0,0 @@
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
- let buttonStyle: ButtonStyle;
50
- switch (style) {
51
- case 'Primary':
52
- buttonStyle = ButtonStyle.Primary;
53
- break;
54
- case 'Secondary':
55
- buttonStyle = ButtonStyle.Secondary;
56
- break;
57
- case 'Success':
58
- buttonStyle = ButtonStyle.Success;
59
- break;
60
- case 'Danger':
61
- buttonStyle = ButtonStyle.Danger;
62
- break;
63
- case 'Link':
64
- buttonStyle = ButtonStyle.Link;
65
- break;
66
- default:
67
- throw new Error(`Invalid style: ${style}.`);
68
- }
69
-
70
- button.setStyle(buttonStyle);
71
-
72
- if (url && buttonStyle !== ButtonStyle.Link) {
73
- throw new TypeError('Non-link buttons cannot have a URL');
74
- }
75
-
76
- if (url && buttonStyle === ButtonStyle.Link) {
77
- if (!url.startsWith('http')) {
78
- throw new Error('Invalid URL format. Must start with "http" or "https".');
79
- }
80
- button.setURL(url);
81
- }
82
-
83
- if (emoji) {
84
- button.setEmoji(emoji);
85
- }
86
-
87
- if (label) {
88
- button.setLabel(label);
89
- }
90
-
91
- if (!url && !customId) {
92
- throw new Error('Invalid Button: At least provide url or customId.');
93
- }
94
-
95
- if (disabled !== undefined) {
96
- if (typeof disabled !== 'boolean') {
97
- throw new Error('Invalid disabled: Must be a boolean (true/false).');
98
- }
99
- button.setDisabled(disabled);
100
- }
101
-
102
- return button;
103
- });
104
-
105
- const totalButtons = buttons.length;
106
-
107
- if (totalButtons > 5) {
108
- throw new Error(`Invalid Action Row: An action row can have at most 5 buttons. Current count: ${totalButtons}`);
109
- }
110
-
111
- return buttons;
112
- }
113
-
114
- ButtonBuild(): ActionRowBuilder {
115
- const buttons = this.createButtons();
116
-
117
- if (buttons.length === 0) {
118
- throw new Error('Invalid Action Row: At least one button is required.');
119
- }
120
-
121
- return new ActionRowBuilder().addComponents(buttons);
122
- }
123
- }
@@ -1,106 +0,0 @@
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
- const defaultCount = this.options.filter(opt => opt.default).length;
99
- if (defaultCount > 1) {
100
- throw new Error('Only one option can be set as default.');
101
- }
102
- option.setDefault(true);
103
- }
104
- return option;
105
- }
106
- }
@@ -1,66 +0,0 @@
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
- }