0.0.3 • Published 15 days ago

kakashi-handler v0.0.3

Weekly downloads
-
License
-
Repository
-
Last release
15 days ago

KAKASHI HANDLER

Installation

  npm install kakashi-handler

Documentation

const { Client, Partials, GatewayIntentBits } = require("discord.js");
require('dotenv').config()
/// Requiring the handler
const {Kakashi} = require('kakashi-handler');

/// creating the client
const client = new Client(
  {
    intents: [GatewayIntentBits.Guilds,GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent, GatewayIntentBits.GuildMembers],
    partials: [Partials.Channel, Partials.Message, Partials.User, Partials.GuildMember, Partials.Reaction],
    allowedMentions: {
      parse: ['users']
    },
  }
);
/// Using the Handlers

Kakashi.Create(client, {
  Vote: {
    url: 'https://top.gg/bot/760923630212874251/vote', // your bot vote url
    webhook: {
      token: 'topggwebtoken', // your topgg token
      path: '/dblwebhook', // web path
      port: 8081, // web port
      auth: 'kakashi-self-handler' // web auth
    },
    // vote embed is for customizing vote embed message which will be sent when user is required to vote before using command
    embed: {
      enabled: true, // To use embed or not
      message: 'Hey please vote first', // your custom vote message to send this will overwrite emoji you should use emoji inside message if you want
      emoji: '<:emoji_24:959075020217405550>', //custom emoji for default embed message
      footer: false, //whether to send footer
    },
    // vote button is for customizing vote button emoji and whether to send the button or not
    button: {
      enabled: true, // whether to send vote url button with mesage
      emoji: '1158760255476486225' // custom emoji id for button
    }
  },
  Events: {
    path: './src/events/' // your path to events
  },
  GlobalCommands : {
    path: './src/scommands', // your path to guildcommands
    clientId: '1230503138629259418', // your bot id
    token: process.env.kakashitoken // your bot token
  },
  MessageCommands: {
    path: './src/commands' // your path to Messagecommand
  },
  // cooldown is for customizing cooldown message and button
  Cooldown: {
      // embed is for customizing your embed or rather not to send embed
    embed: {
      enabled: true, // To use embed or not
      message: 'Please wait remainingtime to use this command again', // your custom cooldown message to send this will overwrite emoji you should use emoji inside message if you want
// please use remainingtime text to send time
      footer: true, //whether to send footer
      emoji: '<:emoji_24:959075020217405550>', // custom emoji for default embed message
    },
    // cooldown button is for customizing support server button emoji and whether to send the button or not
    button: {
      enabled: true, // enable support server button or not
    },
  },
  //support is for defining your server url and support server button customization
  Support: {
    server: 'https://discord.gg/mTxBX87Bdr', // your support server url
    button: {
      enabled: true, // here enabling this button the handler will send support server button on perms error and vote message
      emoji: '1128799007452430387' // custom emoji id for button
    }
  },
  Components: {
    path: './src/interaction'
  },
})
client.login(process.env.kakashitoken)
  • Interaction Event
module.exports = {
  name: "interactionCreate",
  async execute(interaction, client) {
    try{
    await client.Interaction(interaction)
    } catch(err) {
      return console.log(err)
    }
  },
};
  • Interaction event with vote only bypass
const badge = require('./src/mongo/badge'); /// Remember you have to set the userid as _userid: 'id',and also if user have data then they can skip vote requirements
module.exports = {
  name: "interactionCreate",
  async execute(interaction, client) {
    try{
    await client.Interaction(interaction, await badge)
    } catch(err) {
      return console.log(err)
    }
  },
};

Note: You can do same on Message Event to for bypass.

  • Message Event
const prefix = '!'; /// prefix for bot
module.exports = {
  name: "messageCreate",
  async execute(message, client) {
    try{
    await client.Message(message, prefix)
    } catch(err) {
      return console.log(err)
    }
  },
};
  • Slash command Example
const {SlashCommandBuilder} = require('discord.js')
module.exports = {
    data: new SlashCommandBuilder()
        .setName('ping')
        .setDescription('Get pong reply'),
        category: 'Bot', /// optional can be usefull in help command
        cooldown: '7', /// 7 second cooldown the cooldown is optional.
        voteonly: true, /// sets this command to only run when user has voted
        defer: true, /// whether to defer reply or not
        ephemeral: true, //if defer that ephemeral true or false
    async execute(interaction, client) {
        interaction.editReply({
            content: 'pong',
            ephemeral: true
        })
    }
}
  • Context Menu Example
const { ContextMenuCommandBuilder, ApplicationCommandType } = require('discord.js');
    module.exports = {
        data: new ContextMenuCommandBuilder()
            .setName('ping')
            .setType(ApplicationCommandType.User)
        ,
        async execute(interaction) {
            interaction.reply({content: 'pong', ephemeral: true})
        }
    }

Note: You should put context menu commands inside same as slash commands folder

  • Message Command Example
const { EmbedBuilder } = require('discord.js')
module.exports = {
  name: 'embed',
  description: 'Return embed',
  aliases: ['embed-create', 'em'],
  userPerms: [PermissionsBitField.Flags.SendMessages,],
	botPerms: [PermissionsBitField.Flags.EmbedLinks, PermissionsBitField.Flags.UseExternalEmojis, PermissionsBitField.Flags.EmbedLinks],
	cooldown: 20,
  voteonly: true,
  async execute(message, client, args) {
    const embed = new EmbedBuilder()
      .setColor('Green')
      .setTitle(`${message.author.username}`)
      .setDescription(`this is an embed`);
    await message.reply({
      embeds: [embed],
    })

  }
}
  • Button Example
module.exports = {
  data: {
    name: 'ok-button', /// customID 
    cooldown: '15' /// 15 second cooldown the cooldown is optional.
    voteonly: true, /// it wil only run this button if the user has voted
  },
  async execute(interaction, client) {
    interaction.reply({
      content: 'This button is working',
      ephemeral: true
    })
  }
}

Information

For other components like select menu and other handler same use customID on name

The handler only handles mongo schemas so you need to connect to mongo yourself

If you dont want cooldowns on your command dont put the cooldown: '7' part on your commands, buttons

Screenshots

  • vote button with everything customized npm.io
  • Normal vote message without embed and without server button

npm.io

  • Vote message with embed and without server button

npm.io

  • Cooldown Embed without server button

Cooldown embed screenshot

  • Permission Message and without server button

npm.io

Authors

Discord

Support

Discord