From c87eeaa9e887f185869aec29872e3819fbb61b6e Mon Sep 17 00:00:00 2001 From: dalbodeule <11470513+dalbodeule@users.noreply.github.com> Date: Thu, 15 Aug 2024 07:02:39 +0900 Subject: [PATCH] apiDiscordRoutes fix. - add guildRole appends. --- .../webserver/utils/DiscordGuildCache.kt | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/utils/DiscordGuildCache.kt b/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/utils/DiscordGuildCache.kt index 83f9438..537eb97 100644 --- a/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/utils/DiscordGuildCache.kt +++ b/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/utils/DiscordGuildCache.kt @@ -29,6 +29,9 @@ object DiscordGuildCache { if(guild == null || guild.timestamp.plusSeconds(EXP_SECONDS).isBefore(now) || !guild.isBotAvailable) { fetchAllGuilds() } + if(guild?.guild?.roles?.isEmpty() == true) { + guild.guild.roles = fetchGuildRoles(guildId) + } } } return cache[guildId]?.guild @@ -61,6 +64,25 @@ object DiscordGuildCache { return result.body>() } + private suspend fun fetchGuildRoles(guildId: String): List { + if(DiscordRatelimits.isLimited()) { + delay(DiscordRatelimits.getRateReset()) + } + val result = applicationHttpClient.get("https://discord.com/api/guilds/${guildId}/roles") { + headers { + append(HttpHeaders.Authorization, "Bot ${dotenv["DISCORD_TOKEN"]}") + } + } + + val rateLimit = result.headers["X-RateLimit-Limit"]?.toIntOrNull() + val remaining = result.headers["X-RateLimit-Remaining"]?.toIntOrNull() + val resetAfter = result.headers["X-RateLimit-Reset-After"]?.toDoubleOrNull()?.toLong()?.plus(1L) + + DiscordRatelimits.setRateLimit(rateLimit, remaining, resetAfter) + + return result.body>() + } + private suspend fun fetchAllGuilds() { var lastGuildId: String? = null while (true) { @@ -105,5 +127,5 @@ data class Guild( val name: String, val icon: String?, val banner: String?, - val roles: List = emptyList(), + var roles: List = emptyList(), ) \ No newline at end of file