djs-builder 0.3.12 → 0.4.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 (46) hide show
  1. package/.tsbuildinfo +1 -1
  2. package/dist/discord/events-handler/login.d.ts.map +1 -1
  3. package/dist/discord/events-handler/login.js +21 -1
  4. package/dist/discord/events-handler/login.js.map +1 -1
  5. package/dist/discord/events-handler/prefix-register.d.ts +9 -1
  6. package/dist/discord/events-handler/prefix-register.d.ts.map +1 -1
  7. package/dist/discord/events-handler/prefix-register.js +19 -8
  8. package/dist/discord/events-handler/prefix-register.js.map +1 -1
  9. package/dist/discord/events-handler/prefix-responder.d.ts.map +1 -1
  10. package/dist/discord/events-handler/prefix-responder.js +9 -0
  11. package/dist/discord/events-handler/prefix-responder.js.map +1 -1
  12. package/dist/discord/events-handler/prefixLoader.d.ts +15 -0
  13. package/dist/discord/events-handler/prefixLoader.d.ts.map +1 -0
  14. package/dist/discord/events-handler/prefixLoader.js +97 -0
  15. package/dist/discord/events-handler/prefixLoader.js.map +1 -0
  16. package/dist/discord/events-handler/slash-register.d.ts.map +1 -1
  17. package/dist/discord/events-handler/slash-register.js +1 -0
  18. package/dist/discord/events-handler/slash-register.js.map +1 -1
  19. package/dist/discord/events-handler/slashLoader.d.ts +3 -0
  20. package/dist/discord/events-handler/slashLoader.d.ts.map +1 -0
  21. package/dist/discord/events-handler/slashLoader.js +88 -0
  22. package/dist/discord/events-handler/slashLoader.js.map +1 -0
  23. package/dist/discord/events-handler/starter.d.ts.map +1 -1
  24. package/dist/discord/events-handler/starter.js +3 -1
  25. package/dist/discord/events-handler/starter.js.map +1 -1
  26. package/dist/discord/types/starter.d.ts +2 -0
  27. package/dist/discord/types/starter.d.ts.map +1 -1
  28. package/dist/discord/utils.d.ts +3 -1
  29. package/dist/discord/utils.d.ts.map +1 -1
  30. package/dist/discord/utils.js +5 -1
  31. package/dist/discord/utils.js.map +1 -1
  32. package/dist/index.d.ts +3 -2
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +3 -2
  35. package/dist/index.js.map +1 -1
  36. package/lib/discord/events-handler/login.ts +16 -2
  37. package/lib/discord/events-handler/prefix-register.ts +22 -10
  38. package/lib/discord/events-handler/prefix-responder.ts +12 -1
  39. package/lib/discord/events-handler/prefixLoader.ts +76 -0
  40. package/lib/discord/events-handler/slash-register.ts +1 -0
  41. package/lib/discord/events-handler/slashLoader.ts +83 -0
  42. package/lib/discord/events-handler/starter.ts +3 -1
  43. package/lib/discord/types/starter.ts +6 -4
  44. package/lib/discord/utils.ts +3 -2
  45. package/lib/index.ts +3 -3
  46. package/package.json +2 -2
@@ -0,0 +1,76 @@
1
+ import { Collection } from 'discord.js';
2
+ import { promises as fsPromises } from 'fs';
3
+ import { join, resolve } from 'path';
4
+ import { Command } from '../types/utils';
5
+
6
+ export const commands = new Collection<string, Command>();
7
+ export const aliases = new Collection<string, string>();
8
+ export const commandNames = new Set<string>();
9
+
10
+ export async function prefixLoader(client: any): Promise<Array<{ name: string; usage: string | undefined; description: string | undefined; aliases: string[] | undefined; cooldown: number | undefined; developer: boolean | undefined; owner: boolean | undefined }>> {
11
+ const commandDetails: Array<{ name: string; usage: string | undefined; description: string | undefined; aliases: string[] | undefined; cooldown: number | undefined; developer: boolean | undefined; owner: boolean | undefined }> = [];
12
+ const botData = new Collection<string, string | string[]>();
13
+ const prefixPath = botData.get('prefixPath') as string;
14
+
15
+ try {
16
+ const resolvedPath = resolve(process.cwd(), prefixPath);
17
+ await fsPromises.access(resolvedPath);
18
+ const files = await fsPromises.readdir(resolvedPath, { withFileTypes: true });
19
+
20
+ for (const file of files) {
21
+ const filePath = join(resolvedPath, file.name);
22
+
23
+ if (file.isDirectory()) {
24
+ const subCommandDetails = await prefixLoader(client);
25
+ commandDetails.push(...subCommandDetails);
26
+ } else if (file.isFile()) {
27
+ try {
28
+ const commandModule = await import(filePath);
29
+ const command: Command = commandModule.default || commandModule;
30
+
31
+ if (command && (command.execute || command.run)) {
32
+ const defaultCommand: Command = {
33
+ description: "No description provided.",
34
+ cooldown: undefined,
35
+ usage: "No usage information provided.",
36
+ aliases: [],
37
+ developer: false,
38
+ owner: false,
39
+ ...command
40
+ };
41
+
42
+ commands.set(defaultCommand.name, defaultCommand);
43
+ commandNames.add(defaultCommand.name);
44
+
45
+ if (defaultCommand.aliases && Array.isArray(defaultCommand.aliases)) {
46
+ defaultCommand.aliases.forEach(alias => {
47
+ aliases.set(alias, defaultCommand.name);
48
+ commandNames.add(alias);
49
+ });
50
+ }
51
+
52
+ commandDetails.push({
53
+ name: defaultCommand.name,
54
+ usage: defaultCommand.usage || 'No usage information provided.',
55
+ description: defaultCommand.description || 'No description provided.',
56
+ aliases: defaultCommand.aliases || [],
57
+ cooldown: defaultCommand.cooldown,
58
+ developer: defaultCommand.developer,
59
+ owner: defaultCommand.owner,
60
+ });
61
+ }
62
+ } catch (error: any) {
63
+ console.error(`Error in file: ${filePath}`);
64
+ console.error(error.message);
65
+ }
66
+ }
67
+ }
68
+ client.prefixCommands = commandDetails;
69
+ client.prefixSize = commandDetails.length;
70
+ return commandDetails;
71
+ } catch (error: any) {
72
+ console.error(`⚠️ Error reading directory: ${prefixPath}`);
73
+ console.error(error.message);
74
+ return [];
75
+ }
76
+ }
@@ -72,6 +72,7 @@ export async function registerSlashCommands(client: any, token: string, slash: S
72
72
  console.error('⚠️ Error registering slash commands:', error.message);
73
73
  }
74
74
 
75
+ client.slashCommands = slashCommands;
75
76
  client.slashSize = slashCommands.size;
76
77
  return slashCommands;
77
78
  }
@@ -0,0 +1,83 @@
1
+ import { Collection, Guild } from 'discord.js';
2
+ import { REST } from '@discordjs/rest';
3
+ import { Routes } from 'discord-api-types/v10';
4
+ import { readdir } from 'fs/promises';
5
+ import path from 'path';
6
+ export async function slashLoader(client: any): Promise<Collection<string, any>> {
7
+ const botData = new Collection<string, string | string[]>();
8
+
9
+ const slashCommandsPath = botData.get('slashCommands') as string;
10
+ const serverIdSlash = botData.get('serverIdSlash') as string;
11
+ const globalSlash = botData.get('globalSlash') as string;
12
+ const botToken = botData.get('botToken') as string;
13
+
14
+
15
+ if (!botToken) {
16
+ throw new Error("⚠️ \x1b[33m%sPlease provide valid bot token to register slash commands.\x1b[0m");
17
+ }
18
+
19
+ const slashCommands = new Collection<string, any>();
20
+ const rest = new REST({ version: '10' }).setToken(botToken);
21
+
22
+ try {
23
+ const resolvedPath = path.join(process.cwd(), slashCommandsPath);
24
+ const dirents = await readdir(resolvedPath, { withFileTypes: true });
25
+
26
+ for (const dirent of dirents) {
27
+ if (dirent.isDirectory()) {
28
+ const folderPath = path.join(resolvedPath, dirent.name);
29
+ const files = await readdir(folderPath);
30
+
31
+ for (const file of files) {
32
+ try {
33
+ const command = require(path.join(folderPath, file));
34
+ if (command.data) {
35
+ if (command.cooldown && !isNaN(command.cooldown)) {
36
+ command.data.cooldown = command.cooldown || 0;
37
+ }
38
+ slashCommands.set(command.data.name, command);
39
+ }
40
+ } catch (error: any) {
41
+ console.error(`⚠️ Error in file: ${path.join(folderPath, file)}`);
42
+ console.error(error.message);
43
+ }
44
+ }
45
+ } else {
46
+ try {
47
+ const command = require(path.join(resolvedPath, dirent.name));
48
+ if (command.data) {
49
+ if (command.cooldown && !isNaN(command.cooldown)) {
50
+ command.data.cooldown = command.cooldown || 0;
51
+ }
52
+ slashCommands.set(command.data.name, command);
53
+ }
54
+ } catch (error: any) {
55
+ console.error(`⚠️ Error in file: ${path.join(resolvedPath, dirent.name)}`);
56
+ console.error(error.message);
57
+ }
58
+ }
59
+ }
60
+
61
+ if (globalSlash === 'true' && !serverIdSlash) {
62
+ const slashCommandArray = Array.from(slashCommands.values()).map(command => command.data.toJSON());
63
+ await rest.put(Routes.applicationCommands((client.user?.id || '')), { body: slashCommandArray, headers: { Authorization: `Bot ${botToken}` } });
64
+ } else if (globalSlash === 'false' && serverIdSlash) {
65
+ const guild = client.guilds.cache.get(serverIdSlash) as Guild | undefined;
66
+ if (guild) {
67
+ const slashCommandArray = Array.from(slashCommands.values()).map(command => command.data.toJSON());
68
+ await rest.put(Routes.applicationGuildCommands((client.user?.id || ''), guild.id), { body: slashCommandArray, headers: { Authorization: `Bot ${botToken}` } });
69
+ } else {
70
+ console.error(`⚠️ Guild with ID ${serverIdSlash} not found.`);
71
+ }
72
+ } else {
73
+ const slashCommandArray = Array.from(slashCommands.values()).map(command => command.data.toJSON());
74
+ await rest.put(Routes.applicationCommands((client.user?.id || '')), { body: slashCommandArray, headers: { Authorization: `Bot ${botToken}` } });
75
+ }
76
+ } catch (error: any) {
77
+ console.error('⚠️ Error registering slash commands:', error.message);
78
+ }
79
+
80
+ client.slashCommands = slashCommands;
81
+ client.slashSize = slashCommands.size;
82
+ return slashCommands;
83
+ }
@@ -1,6 +1,7 @@
1
1
  import { StarterOptions, StarterInterface } from '../types/utils';
2
2
  import { mongoConnect, getDb, verseConnect } from '../functions/utils';
3
3
  import { loadEvents } from './events';
4
+ const wait = require('node:timers/promises').setTimeout;
4
5
  import { login } from './login';
5
6
  import { AntiCrash } from '../functions/anticrash';
6
7
 
@@ -11,7 +12,7 @@ export class Starter implements StarterInterface {
11
12
 
12
13
  try {
13
14
  if (options.bot?.Database?.mongo) {
14
- await mongoConnect(options.bot.Database.mongo.mongoURI, options.bot.Database.mongo.dbName || 'djshandler');
15
+ await mongoConnect(options.bot.Database.mongo.mongoURI, options.bot.Database.mongo.dbName || 'djsbuilder');
15
16
  mongoDb = await getDb();
16
17
  }
17
18
  if (options.bot?.Database?.verse) {
@@ -31,6 +32,7 @@ export class Starter implements StarterInterface {
31
32
  await this.handleStartupError(error, djs, options);
32
33
  }
33
34
 
35
+ await wait(2_000)
34
36
  return {
35
37
  mongodb: mongoDb,
36
38
  versedb: verseDb,
@@ -16,11 +16,12 @@ export interface BotOptions {
16
16
  banner?: string;
17
17
  BotInfo?: {
18
18
  perms?: string[];
19
- serverId?: string
20
- botInvite?: string
21
- serverInvite?: string
22
- ownerId?: string
19
+ serverId?: string;
20
+ botInvite?: string;
21
+ serverInvite?: string;
22
+ ownerId?: string;
23
23
  partners?: string[];
24
+ developers?: string[];
24
25
  };
25
26
  Status?: {
26
27
  state: 'online' | 'dnd' | 'idle' | 'invisible' | 'Streaming' | any;
@@ -100,6 +101,7 @@ export interface Command {
100
101
  aliases?: string[];
101
102
  cooldown?: number;
102
103
  usage?: string;
104
+ developer?: boolean;
103
105
  prefix?: boolean;
104
106
  category?: string;
105
107
  owner?: boolean;
@@ -1,4 +1,5 @@
1
1
  import { Starter } from "./events-handler/starter";
2
2
  import { ButtonManager, MenuManager, PermissionChecker } from './builder/utils';
3
-
4
- export { Starter, ButtonManager, MenuManager, PermissionChecker }
3
+ import { prefixLoader } from "./events-handler/prefixLoader";
4
+ import { slashLoader } from "./events-handler/slashLoader";
5
+ export { Starter, ButtonManager, MenuManager, PermissionChecker, prefixLoader, slashLoader }
package/lib/index.ts CHANGED
@@ -27,7 +27,7 @@ fetch("https://registry.npmjs.com/-/v1/search?text=djs-builder")
27
27
  .catch((e: any) => {});
28
28
 
29
29
 
30
- import { Starter, ButtonManager, MenuManager, PermissionChecker } from "./discord/utils";
30
+ import { Starter, ButtonManager, MenuManager, PermissionChecker, slashLoader, prefixLoader} from "./discord/utils";
31
31
 
32
- export { Starter, ButtonManager, MenuManager, PermissionChecker };
33
- export default { Starter, ButtonManager, MenuManager, PermissionChecker };
32
+ export { Starter, ButtonManager, MenuManager, PermissionChecker, slashLoader };
33
+ export default { Starter, ButtonManager, MenuManager, PermissionChecker,prefixLoader };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "djs-builder",
3
- "version": "0.3.12",
3
+ "version": "0.4.1",
4
4
  "description": "Discord.js bot builder. Supports Ts and Js.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -32,7 +32,7 @@
32
32
  "dependencies": {
33
33
  "cli-table": "^0.3.11",
34
34
  "colorette": "^2.0.20",
35
- "discord.js": "^14.15.2",
35
+ "discord.js": "^14.15.3",
36
36
  "mongodb": "^6.5.0",
37
37
  "verse.db": "^2.0.4"
38
38
  },