Merge pull request #82 from dalbodeule/develop

apiDiscordRoutes fix.
This commit is contained in:
JinU Choi 2024-08-15 07:04:09 +09:00 committed by GitHub
commit 568c3638c6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -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<List<DiscordGuildListAPI>>()
}
private suspend fun fetchGuildRoles(guildId: String): List<GuildRole> {
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<List<GuildRole>>()
}
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<GuildRole> = emptyList(),
var roles: List<GuildRole> = emptyList(),
)