This will only work if a guild grants your bot the applications.commands scope
The previous developer (coolmlgplayer-js) has asked me to continue to maintain this gist, as she has quit development.
| //This example will create a global slash command called 'ping' | |
| const { Client } = require('discord.js'); | |
| const bot = new Client(); | |
| const SlashCommandManager = require('./SlashCommandManager'); | |
| bot.SlashCommandManager = new SlashCommandManager(bot); | |
| bot.once('ready', async () => { | |
| const commandExists = await bot.SlashCommandManager.globalCommandExists('ping'); | |
| if (!commandExists) bot.SlashCommandManager.createGlobalCommand({ | |
| name: 'ping', | |
| description: 'pong' | |
| }).catch(console.error); | |
| }); | |
| bot.ws.on('INTERACTION_CREATE', async interaction => { | |
| switch (interaction.data.name) { | |
| case "ping": | |
| bot.SlashCommandManager.respond(interaction, { | |
| type: 3, | |
| data: { | |
| content: 'Pong!', | |
| flags: 1 << 6 | |
| } | |
| }); | |
| break; | |
| default: | |
| bot.SlashCommandManager.respond(interaction, { | |
| type: 3, | |
| data: { | |
| content: `No handler found for \`/${interaction.data.name}\``, | |
| flags: 1 << 6 | |
| } | |
| }); | |
| break; | |
| }; | |
| }); | |
| bot.login('TOKEN'); |
| module.exports = class SlashCommandManager { | |
| constructor(client) { | |
| this.client = client; | |
| }; | |
| async createGlobalCommand(data = {}) { | |
| return this.client.api.applications(this.client.user.id).commands.post({ | |
| data: data | |
| }); | |
| } | |
| async createGuildCommand(guild, data = {}) { | |
| if (!guild || !guild.id) throw new TypeError('No guild provided!'); | |
| if (!this.client.guilds.cache.has(guild.id)) throw new TypeError('Invalid guild provided!'); | |
| return this.client.api.applications(this.client.user.id).guilds(guild.id).commands.post({ | |
| data: data | |
| }); | |
| } | |
| async globalCommandExists(command_id) { | |
| const commands = await this.client.api.applications(this.client.user.id).commands.get(); | |
| return commands.some(c => c.id === command_id || c.name === command_id); | |
| } | |
| async guildCommandExists(guild, command_id) { | |
| if (!guild || !guild.id) throw new TypeError('No guild provided!'); | |
| if (!this.client.guilds.cache.has(guild.id)) throw new TypeError('Invalid guild provided!'); | |
| const commands = await this.client.api.applications(this.client.user.id).guilds(guild.id).commands.get(); | |
| return commands.some(c => c.id === command_id || c.name === command_id); | |
| } | |
| async deleteGlobalCommand(command_id) { | |
| const commands = await this.client.api.applications(this.client.user.id).commands.get(); | |
| const command = commands.find(c => c.id === command_id || c.name === command_id); | |
| if (command) command_id = command.id | |
| else throw new TypeError('Invalid Command'); | |
| return this.client.api.applications(this.client.user.id).commands(command_id).delete(); | |
| } | |
| async deleteGuildCommand(guild, command_id) { | |
| if (!guild || !guild.id) throw new TypeError('No guild provided!'); | |
| if (!this.client.guilds.cache.has(guild.id)) throw new TypeError('Invalid guild provided!'); | |
| const commands = await this.client.api.applications(this.client.user.id).guilds(guild.id).commands.get(); | |
| const command = commands.find(c => c.id === command_id || c.name === command_id); | |
| if (command) command_id = command.id | |
| else throw new TypeError('Invalid Command'); | |
| return this.client.api.applications(this.client.user.id).guilds(guild.id).commands(command_id).delete(); | |
| } | |
| async respond(interaction, data = {}) { | |
| return this.client.api | |
| .interactions(interaction.id, interaction.token) | |
| .callback.post({ | |
| data: data | |
| }); | |
| } | |
| }; |
how to use in cmd handler plz help me