djs-builder
TypeScript icon, indicating that this package has built-in type declarations

0.5.42 • Public • Published

Example Image

Typing SVG

Welcome to the Discord Bot Utilities package! 🥏 This package provides a set of utility classes/interfaces to simplify 🎍 common tasks when developing Discord bots using the Discord.js library ✨.

Table of Contents

  1. Starter
  2. ButtonManager
  3. MenuManager
  4. PermissionChecker
  5. Options

Typing SVG

Starter provides functionality for initializing and starting a Discord bot 🤖.

Features:

  • 🛠️ Handler for slash and prefix commands all in just two lines 🔩
  • 📜 A list displaying all information(number of commands, events, and comprehensive bot) 🔍
  • 🧰 Event handler in just one line 🎊
  • ⚠️ Anti-crash system with error lock 📃
  • 🔋 Direct connection with MongoDB 📥
  • 📑 Logging for slash and prefix command usage with comprehensive information 🧭

⚠️ NOTE: Any option you don't want, just DELETE 🗑️ the option LINE ➖!

Quick setup ⚡
    const { Starter } = require('djs-builder'); // cjs module .js

    const { Client, GatewayIntentBits, Partials } = require('discord.js');
    const client = new Client({
      intents: Object.keys(GatewayIntentBits).map((a) => {
        return GatewayIntentBits[a];
      }),
    });

    // Define starter options
    const starterOptions = {
        bot: {
            token: 'YOUR_BOT_TOKEN', // [OPTIONAL] Discord bot token
            logs: {
                terminal: true // [OPTIONAL] Log messages to terminal
            },
            Status: {
                state: 'online', // Required: Bot presence state ['online', 'offline', 'dnd', 'idle', 'Streaming']
                activities: ['Game 1', 'Game 2'], // [OPTIONAL] Bot activities
                type: 0, // [OPTIONAL] Bot activity type
                delay: 60000 // [OPTIONAL] Activity rotation delay in milliseconds
            },
            Database: {
              mongo: {
                mongoURI: 'mongodb://localhost:27017', // Required: MongoDB connection URI
                dbName: 'your_database_name' // [OPTIONAL] MongoDB database name
              },
              verse: {
                adapterType: 'json', // Required: Database adapter type ['json', 'yaml', 'sql']
                path: '/database/folder', // Required: Path to database folder [Note: "Not path to file!"]
                dev: {
                    enable: true, // Required: Enable development mode
                    logsPath: '/path/to/logs' // [OPTIONAL] Path to development logs [Note: "It will create logs file for database executions logs!"]
                },
                secure: { enable: false, secret:'your_encryption_key'} // [OPTIONAL] To secure Data File by encrypting it with secret key
              }
            }
        },
        slash: {
            path: './path/to/slash_commands', // Required: Path to slash commands
            global: true, // [OPTIONAL] Register slash commands globally
            serverId: '123456789012345678', // [OPTIONAL] Discord server ID
            logsId: '123456789012345678' // [OPTIONAL] Logs channel ID
        },
        prefix: {
            path: './path/to/prefixes', // Required: Path to prefix settings
            prefix: '!', // Required: Default bot prefix
            global: true, // [OPTIONAL] Use global prefix
            serverIds: ['123456789012345678'], // [OPTIONAL] Discord server IDs
            logsId: '123456789012345678' // [OPTIONAL] Logs channel ID
        },
        events: {
            path: './path/to/events', // Required: Path to event handlers
            recursive: true, // [OPTIONAL] Enable recursive event loading
            eventBlacklist: ['path/to the event/file.js', 'path/to the event/file.js'] // [OPTIONAL] Blacklisted events
        },
        anticrash: {
            enable: true, // Required: Enable anti-crash feature
            webhookURL: 'https://your.crash.webhook.url', // Required: Webhook URL for crash alerts
            mention: '<@123456789012345678>' // [OPTIONAL] User ID to mention in crash alerts
        }
    };

    const bot = new Starter();
    bot.start(client, starterOptions);
ALL Options ⚙️
    const { Starter } = require('djs-builder'); // cjs module .js

    const { Client, GatewayIntentBits, Partials } = require('discord.js');
    const client = new Client({
      intents: Object.keys(GatewayIntentBits).map((a) => {
        return GatewayIntentBits[a];
      }),
    });

    // OR
    import { Starter } from 'djs-builder'; // Ejs module .mjs or Ts

    import { Client, GatewayIntentBits, Partials, PermissionFlagsBits } from 'discord.js';

    const intentsArray = Object.keys(GatewayIntentBits)
        .map((a) => GatewayIntentBits[a as keyof typeof GatewayIntentBits]);
    const intents = intentsArray.reduce((acc, curr) => acc | curr, 0);

    const client = new Client({
        intents,
        partials: Object.values(Partials) as Partials[],
    });

    // Define starter options
    const starterOptions = {
        bot: {

        token: 'YOUR_BOT_TOKEN', // [OPTIONAL] Discord bot token
        logs: {
            devLogs: {
                enable: true, // Required: Enable developer logs
                pathToWatch: '/path/to/watch', // Required: Path to watch for file changes
                webhookURL: 'https://your.webhook.url', // Required: Webhook URL for logging
                mention: '<@123456789012345678>' // [OPTIONAL] User ID to mention in logs
            },
            terminal: true // [OPTIONAL] Log messages to terminal
        },
        name: 'Your Bot Name', // [OPTIONAL] Bot name
        avatar: 'https://your.bot/avatar.png', // [OPTIONAL] Bot avatar URL or local path image
        banner: 'https://your.bot/banner.png', // [OPTIONAL] Bot banner URL or local path image
        BotInfo: {
            perms: ['SendMessages', 'BotMessages'], // [OPTIONAL] Bot permissions to work in any server
            serverId: '123456789012345678', // [OPTIONAL] Discord server ID
            botInvite: 'https://discord.com/invite/your-bot-invite', // [OPTIONAL] Bot invite URL
            serverInvite: 'https://discord.com/invite/your-server-invite', // [OPTIONAL] Server invite URL
            ownerId: '123456789012345678', // [OPTIONAL] Bot owner's user ID
            partners: ['partner1', 'partner2'] // [OPTIONAL] Bot partners
        },
        Status: {
            state: 'online', // Required: Bot presence state ['online', 'offline', 'dnd', 'idle', 'Streaming']
            activities: ['Game 1', 'Game 2'], // [OPTIONAL] Bot activities
            type: 0, // [OPTIONAL] Bot activity type
            delay: 60000 // [OPTIONAL] Activity rotation delay in milliseconds
        },
        Database: {
            mongo: {
                mongoURI: 'mongodb://localhost:27017', // Required: MongoDB connection URI
                dbName: 'your_database_name' // [OPTIONAL] MongoDB database name
            },
            verse: {
                adapterType: 'json', // Required: Database adapter type ['json', 'yaml', 'sql']
                path: '/database/folder', // Required: Path to database folder [Note: "Not path to file!"]
                dev: {
                    enable: true, // Required: Enable development mode
                    logsPath: '/path/to/logs' // [OPTIONAL] Path to development logs [Note: "It will create logs file for database executions logs!"]
                },
                secure: { enable: false, secret:'your_encryption_key'} // [OPTIONAL] To secure Data File by encrypting it with secret key
            }
        }
    },
    slash: {
        path: './path/to/slash_commands', // Required: Path to slash commands
        global: true, // [OPTIONAL] Register slash commands globally
        serverId: '123456789012345678', // [OPTIONAL] Discord server ID
        logsId: '123456789012345678' // [OPTIONAL] Logs channel ID
    },
    prefix: {
        path: './path/to/prefixes', // Required: Path to prefix settings
        prefix: '!', // Required: Default bot prefix
        global: true, // [OPTIONAL] Use global prefix
        serverIds: ['123456789012345678'], // [OPTIONAL] Discord server IDs
        logsId: '123456789012345678' // [OPTIONAL] Logs channel ID
    },
    events: {
        path: './path/to/events', // Required: Path to event handlers
        recursive: true, // [OPTIONAL] Enable recursive event loading
        eventBlacklist: ['path/to the event/file.js', 'path/to the event/file.js'] // [OPTIONAL] Blacklisted events
    },
    anticrash: {
        enable: true, // Required: Enable anti-crash feature
        webhookURL: 'https://your.crash.webhook.url', // Required: Webhook URL for crash alerts
        mention: '<@123456789012345678>' // [OPTIONAL] User ID to mention in crash alerts
    }
};

// Define the starter instance
const bot = new Starter();

async function botStart() {
const botstarted = await bot.start(client, starterOptions);
    const mongodb = await botstarted.mongodb;
    const versedb = await botstarted.versedb;
    const slashSize = await botstarted.slashSize;
    const prefixSize = await botstarted.prefixSize;
    const eventSize = await botstarted.eventSize;
    return {
        getDb: mongodb,
        db: versedb,
        slashSize: slashSize,
        prefixSize: prefixSize,
        eventSize: eventSize
    }
}
module.exports = { botStart };
// Or
export { botStart };
  • Usage for the returned values from botStart() funtion:
const { botStart } = require('path/to/file/where botStart is exported from');
// Or
import { botStart } from 'path/to/file/where botStart is exported from';

async function test() {
    const client = await botStart();

    // Usage for mongoDb
    const db = await client.getDb;
    await db.collection('collectionName'); // See more usage at https://www.mongodb.com

    // Usage for verseDb
    const db = await client.db;
    await db.load('collectionName'); // See more usage at https://versedb.jedi-studio.com

    // Usage for slashSize/prefixSize/eventSize
    console.log(`loaded slash Commands: ${client.slashSize}`);
    console.log(`loaded prefix Commands: ${client.prefixSize}`);
    console.log(`loaded events: ${client.eventSize}`);
}

test()

Typing SVG

Build 🔵Button , 🧾Menu or 🏅PermissionChecker

  • Easyest ✨
  • Fastest ⚡
  • Clear 🧵

Than the discord.js

🔵 ButtonManager

🔵 ButtonManager is a utility class for managing the creation of Discord buttons ✨.

const { ButtonManager } = require('djs-builder'); // Cjs module .js
// OR
import { ButtonManager } from 'djs-builder'; // Ejs module .mjs or Ts

// Define button data
const buttonsData = [
  {
    customId: 'button1',
    style: 'Primary',// style: Primary, Secondary, Link, Danger, Success
    label: 'Primary Button',
    emoji: '😃',  // Emoji for the button
    disabled: false,  // Whether the button is disabled
  },
  {
    customId: 'button2',
    style: 'Secondary',
    label: 'Secondary Button',
    emoji: '🚀',
    disabled: true,
  },
  {
    style: 'Link',
    label: 'Link Button',
    url: 'https://example.com',  // URL for link-style button
    emoji: '🔗',
  },
];

// Create an instance of ButtonManager
const actionRow = new ButtonManager(buttonsData);

// Buttons Row add it into components
const row = actionRow.ButtonBuild();

// Exmaple 
const message = await interaction.channel.send({ content: 'Here are some buttons:', components: [row] });
// OR
const message = await message.channel.send({ content: 'Here are some buttons:', components: [row] });
🧾 MenuManager

🧾 MenuManager facilitates the creation of select menus (dropdown menus) in Discord ✨.

const { MenuManager } = require('djs-builder'); // Cjs module .js
// OR
import { MenuManager } from 'djs-builder'; // Ejs module .mjs or ts

// Define select menu options
const selectMenuOptions = [
  { label: 'Option 1', value: 'option1', description: 'Description for Option 1', emoji: '🌟', default: true },
  { label: 'Option 2', value: 'option2', description: 'Description for Option 2', emoji: '🚀' },
  { label: 'Option 3', value: 'option3', description: 'Description for Option 3', emoji: '🔗' },
];

// Create an instance of SelectMenuManager
const selectMenuManager = new MenuManager(
  selectMenuOptions,
  'customSelectMenuId',  // Custom ID for the select menu
  'Select an option',    // Placeholder text for the select menu
  1,                      // Minimum number of selected values
  2,                       // Maximum number of selected values
  false                   // Disabled state for meny (true or false)
);

// Create a select menu with the specified options
const selectMenuRow = selectMenuManager.createSelectMenu();

// Define a message with the select menu
 message.reply({
  content: 'Please choose an option:',
  components: [selectMenuRow],
});

// Define a interaction with the select menu
 interaction.reply({
  content: 'Please choose an option:',
  components: [selectMenuRow],
});
🏅 PermissionChecker

PermissionChecker provides functionality for checking user permissions in a Discord guild ✨.

const { PermissionChecker } =  require('djs-builder'); // Cjs module .js
// OR
import { PermissionChecker } from 'djs-builder'; // Ejs module .mjs or ts

const perms = new PermissionChecker();

// Interaction case
const userId = interaction.user.id;
const guild = interaction.guild;
// Message Case
const guild = message.guild;
const memberId = message.author.id;

// Usage:

const permToCheck = ['ManageGuild', 'BanMembers']
perms.checker(userId, guild, permToCheck)

Options:

  • Slash 🔧
Options
  • Cooldown ⏳
  • Prefix ➕
Options
  • Cooldown ⏳
  • Owner 👑
  • Usage 🙎‍♂️
  • Description 📜
  • Category 📁
  • Events 🎊
Options
  • intializer
  • retryAttempts
  • execute once
  • execute for specific times
  • timeout
  • name

Contributions

Contributions are welcome! If you have any suggestions, bug reports, or feature requests, feel free to contact us on discord.

Discord Banner Package Sidebar

Versions

Current Tags

VersionDownloads (Last 7 Days)Tag
0.5.428latest

Version History

VersionDownloads (Last 7 Days)Published
0.5.428
0.5.410
0.5.400
0.5.324
0.5.310
0.5.200
0.5.100
0.5.90
0.5.80
0.5.70
0.5.60
0.5.50
0.5.40
0.5.30
0.5.20
0.5.10
0.5.00
0.4.110
0.4.100
0.4.90
0.4.855
0.4.840
0.4.830
0.4.820
0.4.810
0.4.80
0.4.70
0.4.60
0.4.50
0.4.40
0.4.30
0.4.20
0.4.10
0.4.00
0.3.122
0.3.111
0.3.10
0.3.00
0.2.90
0.2.811
0.2.80
0.2.70
0.2.60
0.2.50
0.2.40
0.2.30
0.2.20
0.2.10
0.2.00
0.1.50
0.1.40
0.1.30
0.1.20
0.1.10
0.1.00

Package Sidebar

Install

npm i djs-builder

Weekly Downloads

21

Version

0.5.42

License

MIT

Unpacked Size

462 kB

Total Files

152

Last publish

Collaborators

  • zenith-79