From ca44c07071e6801fde6c52e9904841427d067275 Mon Sep 17 00:00:00 2001 From: Taken Date: Sun, 19 Nov 2023 13:43:18 +0100 Subject: [PATCH] Added autodeploy function to developmet mode --- commands/config.js | 1 + commands/setup.js | 1 + events/ready/sendOnlineMessage.js | 1 - index.js | 4 +- utils/autodeploy.js | 76 +++++++++++++++++++++++++++++++ 5 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 utils/autodeploy.js diff --git a/commands/config.js b/commands/config.js index 4ec149c..40ad951 100644 --- a/commands/config.js +++ b/commands/config.js @@ -7,6 +7,7 @@ module.exports = { name: "config", description: "Configure the bot", type: "slash", + dev: true, data: new SlashCommandBuilder() .setName("config") diff --git a/commands/setup.js b/commands/setup.js index 5f27c40..95bfc06 100644 --- a/commands/setup.js +++ b/commands/setup.js @@ -5,6 +5,7 @@ module.exports = { name: "setup", description: "Used for setup of the bot.", type: "slash", + dev: true, data: new SlashCommandBuilder() .setName("setup") diff --git a/events/ready/sendOnlineMessage.js b/events/ready/sendOnlineMessage.js index f3b6283..352fafe 100644 --- a/events/ready/sendOnlineMessage.js +++ b/events/ready/sendOnlineMessage.js @@ -8,7 +8,6 @@ module.exports = { execute(client) { if (process.env.NODE_ENV !== 'dev') { - console.log("Logged in as " + client.user.tag + "!"); const channel = client.channels.cache.get(botLogChannel); const embedColor = Number(color.replace('#', '0x')) diff --git a/index.js b/index.js index e8958bb..29ac2d0 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,6 @@ -const { Client, GatewayIntentBits, Partials, ActivityType, Events, Collection } = require('discord.js'); +const { Client, GatewayIntentBits, Partials, Collection } = require('discord.js'); const { loadSlashCommands, loadMessageEvents, loadContextMenu, loadModalEvents, loadButtonEvents, loadReadyEvents, loadInteractionEvents } = require('./utils/eventHandler.js') +const { autoDeployCommands } = require('./utils/autodeploy.js'); require('dotenv').config(); const mongoURI = process.env.MONGOURI; const { connect } = require('mongoose'); @@ -7,6 +8,7 @@ const { connect } = require('mongoose'); if (process.env.NODE_ENV === 'dev') { console.log("Running in development mode."); var token = process.env.DEVTOKEN; + autoDeployCommands() } else { console.log("Running in production mode."); var token = process.env.PRODTOKEN; diff --git a/utils/autodeploy.js b/utils/autodeploy.js new file mode 100644 index 0000000..ddaaed5 --- /dev/null +++ b/utils/autodeploy.js @@ -0,0 +1,76 @@ +const { REST, Routes } = require('discord.js'); +const fs = require('fs'); +require('dotenv').config(); +const token = process.env.DEVTOKEN; +const clientId = process.env.DEVID; +const guildId = process.env.GUILDID; + +async function autoDeployCommands() { + const commands = []; + const commandFiles = fs.readdirSync('./commands/').filter(file => file.endsWith('.js')); + const contentMenuCommands = fs.readdirSync('./commands-contextmenu/').filter(file => file.endsWith('.js')); + const commandsTesting = fs.readdirSync('./commands-testing/').filter(file => file.endsWith('.js')); + + for (const file of commandFiles) { + const command = require(`../commands/${file}`); + if (command.dev) { + commands.push(command.data.toJSON()); + } + } + + for (const file of contentMenuCommands) { + const command = require(`../commands-contextmenu/${file}`); + if (command.dev) { + commands.push(command.data.toJSON()); + } + } + + for (const file of commandsTesting) { + const command = require(`../commands-testing/${file}`); + if (command.dev) { + commands.push(command.data.toJSON()); + } + } + + const rest = new REST({ version: '10' }).setToken(token); + + const currentCommands = await rest.get( + Routes.applicationGuildCommands(clientId, guildId), + ) + + const currentCommandsInfo = currentCommands.map(command => { + return { + name: command.name, + description: command.description, + } + }) + + const newCommandsInfo = commands.map(command => { + return { + name: command.name, + description: command.description, + } + }) + + if (JSON.stringify(currentCommandsInfo) === JSON.stringify(newCommandsInfo)) { + console.log('Commands are the same, skipping deploy.') + return + } + + (async () => { + try { + console.log(`Started refreshing ${commands.length} application (/) commands.`); + + const data = await rest.put( + Routes.applicationGuildCommands(clientId, guildId), + { body: commands }, + ); + + console.log(`Successfully reloaded ${data.length} application (/) commands.`); + } catch (error) { + console.error(error); + } + })() +} + +module.exports = { autoDeployCommands }