UNPKG

discord.js-casanova

Version:

discord.js-casanova is a discord.js framework that sets up your bot as quickly as possible! all you have to do is write the commands and events! *There is a way to disable the command handler and event handler.*

272 lines (222 loc) 9.48 kB
<div align="center"> <br /> <p> <a href="https://www.npmjs.com/package/discord-js-casanova"><img src="https://img.shields.io/npm/v/discord.js-casanova.svg" alt="NPM Version" /></a> <a href="https://www.npmjs.com/package/discord.js-casanova"><img src="https://img.shields.io/npm/dt/discord.js-casanova.svg" alt="NPM Downloads" /></a> </p> <p> <a href="https://nodei.co/npm/discord.js-casanova/"><img src="https://nodei.co/npm/discord.js-casanova.png?downloads=true" alt="NPM Install Info" /></a> </p> </div> **NOTE: If you're using typescript with this package and having problems or have any questions please join the [support server](https://discord.gg/b2ScJAYRGp)** ## Features #### Completely modular commands, and events. - Reading files recursively from directories. - Handle commands and events easily. ### Command Features. - Cooldowns! (In seconds). - Utility Functions! - Aliases! - Client and Member permissions! - Guild, and owner only commands! - Nsfw commands! #### Command Handler Feautres. - prefix - can be a string, an array, or a function! - defaultCooldown - The default cooldown for commands! `optional`. - ignoreCooldown - Let specific users bypass the cooldown on commands! `optional`. - strict - Whether or not to be strict on command execution `optional` | `default=false`. - Base Client, and Member permissions. - Check base permissions for each client and member. `optional`. #### Command Handler Events. - cooldown - Emitted when a user is on cooldown. - commandUsed - Emitted when a user uses a command. - missingPermissions - Emitted when the member or client is missing permissions. - commandBlocked - emitted when a command is blocked due to `nsfw | ownerOnly | guildOnly | disabled`. - commandError - emitted when an error occurs within a command. ### Event Handler Events. - eventError(event, errorMessage) - emitted when an error occurs within an event. #### Command Handler Event paramaters **`Note: command is the used command. message: is the Message object.`** - cooldown(message, command, timeLeft) *note: timeLeft is in milliseconds.* - commandUsed(message, command). - missingPermissions(message, command, missing, type) *note: `missing` are the missing permissions and `type` is either client or member.* - commandBlocked(message, command, reason) *note: reason being "nsfw OR guildOnly OR ownerOnly OR disabled"* - commandError(message, command, errorMessage) ## Getting Started! #### The Client ```js // First we import the Client from discord.js-casanova. const { CasanovaClient } = require("discord.js-casanova"); // Then we create our client! class Client extends CasanovaClient { // constructor constructor() { // super call super({ // here are the Casanova Client options. token: "Your bot token here.", handlers: ["command", "event"], // this option just enables the command and event handlers if you want to use only the command handler you can just put command in the array. owners: [""] // The owner IDS NOTE: Required if you want to use the ownerOnly command option. }, { // Here goes your regular discord.js client options }) } // This is a function to log the bot in. async start() { try { await this.build(); return console.log(`${this.user.tag} is online!`); } catch (e) { console.error(e); } } } // Now that we've created our client let's log the bot in! const client = new Client(); client.start(); // Now you're bot is online! ``` #### Setting up the command handler. Well now that we've created our client let's set up the command handler. ```js // First let's import The command handler from discord.js-casanova! const { CasanovaClient, CommandHandler } = require("discord.js-casanova"); class Client extends CasanovaClient { constructor() { super( { token: "Your bot token here.", handlers: ["command", "event"], owners: [""], }, {} ); // Then inside the clients constructor create a property and name it whatever you want in this example I'm naming it "commandHandler". this.commandHandler = new CommandHandler(this, { commandDirectory: "The command folder directory the base being the main directory.", prefix: (message) => { return "+"; // Notice this function MUST return a string! }, // here is your prefix note this can be a string, array, or a function baseClientPermissions: ["Base client permissions."], baseMemberPermissions: ["Base member permissions."], blockBots: true, // Whether or not to block bots. blockClient: true, // Whether or not to block the client. defaultCooldown: 3, // The default cooldown for commands. ignoreCooldown: [""], // Array of people who can ignore the cooldown. setCommandClient: true, // default to true || This is mostly for typescript users if you set this to false you won't be able to access the client via `this.client`! strict: true, // default to false. Whether to be strict about the command's execution. }, {}); // second paramater is "ops" it's an object that allows you to add whatever you want. } async start() { try { await this.build(); return console.log(`${this.user.tag} is online!`); } catch (e) { console.error(e); } } } ``` #### Setting up the event handler! ```js // Now for the event handler we have to import it first! const { CasanovaClient, CommandHandler, EventHandler, } = require("discord.js-casanova"); class Client extends CasanovaClient { constructor() { super( { token: "Your bot token here.", handlers: ["command", "event"], owners: [""], }, {} ); this.commandHandler = new CommandHandler(this, { commandDirectory: "The command folder directory the base being the main directory.", prefix: (message) => { return "+"; }, baseClientPermissions: ["Base client permissions."], baseMemberPermissions: ["Base member permissions."], blockBots: true, blockClient: true, defaultCooldown: 3, ignoreCooldown: [""], setCommandClient: true, strict: true, }, {}); // Then we make a property again call it whatever you want but i'm calling it eventHandler for this example. this.eventHandler = new EventHandler(this, { eventDirectory: "The event folder directory the base being the main directory.", }, {}); // second paramater is "opts" it's an object that allows you to add whatever you want. } async start() { try { await this.build(); return console.log(`${this.user.tag} is online!`); } catch (e) { console.error(e); } } } ``` #### Creating your first command! Notice: This should be in each file in the commands directory. ```js // Now for your first command! // first we've gotta import the command base! const { CommandBase } = require("discord.js-casanova"); module.exports = class PingCommand extends CommandBase { constructor() { super({ name: "ping", // the name of the command. aliases: ["p"], // The aliases for the command <optional>. category: "Utils", // Category. <optional> clientPermissions: ["client permissions"], // <optional> cooldown: 4, // 0 for no cooldown <>. description: "description", // <optional> guildOnly: true, // <optional> default=true memberPermissions: ["member permissions"], // <optional> nsfw: false, // <optional> default=false ownerOnly: false, // <optional> default=false usage: "usage", // <optional> }, {}); // second paramater is "opts" it's an object that allows you to add whatever you want. } // Now every command Has to have an execute function. execute(message, args) { console.log(args); console.log(message.content); console.log(this.client.user.tag); // `this.client` being your client. } }; ``` #### Creating your first event! Notice: This should be in each file in the events directory. ```js // Now we gotta import the event base! const { EventBase } = require("discord.js-casanova"); module.exports = class SomeEvent extends EventBase { constructor() { super({ name: "Name of the event.", once: false, // <optional> Whether the event should be emitted once or not. }); } // Every event has to have an execute function. execute(...parms) { console.log(this.client.user.tag); } }; ``` ## Problems / issues If you ever run into any issue with this package please join our [support server](https://discord.gg/b2ScJAYRGp) and feel free to ping me! ## Contributing. Pull requests are welcome by anybody. bugs and reports can go in the [issues](https://github.com/TakenKills/discord.js-casanova/issues) section or in the support server.