- Skipping guild slash commands update when guild is unavailable

- Adding my personal test guild
This commit is contained in:
D3vision 2023-01-29 16:39:29 +01:00
parent d73d1b4798
commit d0a236f9fb
3 changed files with 19 additions and 12 deletions

View File

@ -32,7 +32,8 @@
"developerGuilds": [
"264527028751958016",
"207880433432657920",
"992757341848080486"
"992757341848080486",
"1069272779100266598"
]
}
},

View File

@ -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}`);
}

View File

@ -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}`;
}