kakashi-handler
v0.0.3
Published
a discord handler with topgg voteonly, commands, buttons, message commands, contextmenu handler
Downloads
7
Maintainers
Readme
KAKASHI HANDLER
Installation
npm install kakashi-handler
Documentation
- Creating the main file index.js
- dotenv link
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
- Normal vote message without embed and without server button
- Vote message with embed and without server button
- Cooldown Embed without server button
- Permission Message and without server button