From d0a236f9fb118040ef0c8220e64232c6e5207796 Mon Sep 17 00:00:00 2001 From: D3vision Date: Sun, 29 Jan 2023 16:39:29 +0100 Subject: [PATCH] - Skipping guild slash commands update when guild is unavailable - Adding my personal test guild --- options.json | 3 ++- src/middleware/rest/SlashCommandManager.js | 24 ++++++++++++++-------- src/structure/storage/providers/Mongodb.js | 4 ++-- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/options.json b/options.json index 2f9ffaf..5480c03 100644 --- a/options.json +++ b/options.json @@ -32,7 +32,8 @@ "developerGuilds": [ "264527028751958016", "207880433432657920", - "992757341848080486" + "992757341848080486", + "1069272779100266598" ] } }, diff --git a/src/middleware/rest/SlashCommandManager.js b/src/middleware/rest/SlashCommandManager.js index 7955bcb..3ef6acd 100644 --- a/src/middleware/rest/SlashCommandManager.js +++ b/src/middleware/rest/SlashCommandManager.js @@ -13,7 +13,7 @@ class SlashCommandManager { this.rest = new REST({ version: '9' }) .setToken(process.env.DISCORD_TOKEN); - + this.hashPath = path.join(process.cwd(), '/commandHash.json'); this.hash = fs.existsSync(this.hashPath) ? JSON.parse(fs.readFileSync(this.hashPath, { encoding: 'utf-8' })) : @@ -24,28 +24,34 @@ class SlashCommandManager { async _handleMessage({ commands, ...message }) { if (message.type === 'global') { await this.global(commands, message.clientId); - } else if(message.type === 'guild') { + } else if (message.type === 'guild') { await this.guild(commands, { guilds: message.guilds, clientId: message.clientId }); } } async guild(commands, { guilds = [], clientId }) { - + if (!guilds.length) guilds = this.client._options.discord.slashCommands.developerGuilds; - + const cmdHash = hash(commands); for (const guild of [...guilds]) { + // Skip guild if unavailable + const res = await this.rest.get(Routes.guild(guild)).catch(() => { return null }); + if (!res) { + guilds.splice(guilds.indexOf(guild), 1); + continue; + } // Skip guild update if hash is already up to date if (this.hash.guilds[guild] === cmdHash) guilds.splice(guilds.indexOf(guild), 1); // else update hash else this.hash.guilds[guild] = cmdHash; } - + this.client.logger.write('info', `Commands hash: ${cmdHash}, ${guilds.length} out of date`); if (!guilds.length) return; const promises = []; //fs.writeFileSync(path.join(process.cwd(), 'commands.json'), JSON.stringify(commands)); - for(const guild of guilds) { + for (const guild of guilds) { promises.push(this.rest.put( Routes.applicationGuildCommands(clientId, guild), { body: commands } @@ -84,7 +90,7 @@ class SlashCommandManager { this.client.logger.error(`Failed commands:\n${str}`); } - if(!result) return null; + if (!result) return null; this.saveHash(); this.client.logger.debug(`Refreshed guild slash commands for guild${guilds.length === 1 ? '' : 's'}: ${guilds.join(' ')}`); @@ -96,7 +102,7 @@ class SlashCommandManager { const cmdHash = hash(commands); const upToDate = this.hash.global === cmdHash; - this.client.logger.info(`Commands hash: ${cmdHash}, ${upToDate?'not ':''}updating`); + this.client.logger.info(`Commands hash: ${cmdHash}, ${upToDate ? 'not ' : ''}updating`); if (upToDate) return; this.hash.global = cmdHash; @@ -108,7 +114,7 @@ class SlashCommandManager { { body: commands } ); this.client.logger.debug('Finished global refresh for slash commands.'); - } catch(error) { + } catch (error) { return this.client.logger.error(`Failed to refresh slash commands globally.\n${error.stack || error}`); } diff --git a/src/structure/storage/providers/Mongodb.js b/src/structure/storage/providers/Mongodb.js index 33fc470..7b1ea72 100644 --- a/src/structure/storage/providers/Mongodb.js +++ b/src/structure/storage/providers/Mongodb.js @@ -10,11 +10,11 @@ class MongoDBProvider extends Provider { config }); - const { MONGODB_HOST, MONGODB_USERNAME, MONGODB_PASSWORD, MONGODB_DATABASE } = process.env; + const { MONGODB_HOST, MONGODB_USERNAME, MONGODB_PASSWORD, MONGODB_DATABASE, MONGODB_AUTH_SOURCE } = process.env; this.database = MONGODB_DATABASE; // const { database } = this.config; const auth = MONGODB_USERNAME ? `${MONGODB_USERNAME}:${MONGODB_PASSWORD}@`:''; - this.URI = `mongodb://${auth}${MONGODB_HOST}/${this.database}?authSource=${this.database}`; + this.URI = `mongodb://${auth}${MONGODB_HOST}/${this.database}?authSource=${MONGODB_AUTH_SOURCE || this.database}`; }