apiDiscordRoutes fix.

- add guildRole appends.
This commit is contained in:
dalbodeule 2024-08-15 07:02:39 +09:00
parent 91422aefce
commit c87eeaa9e8
No known key found for this signature in database
GPG Key ID: EFA860D069C9FA65

View File

@ -29,6 +29,9 @@ object DiscordGuildCache {
if(guild == null || guild.timestamp.plusSeconds(EXP_SECONDS).isBefore(now) || !guild.isBotAvailable) { if(guild == null || guild.timestamp.plusSeconds(EXP_SECONDS).isBefore(now) || !guild.isBotAvailable) {
fetchAllGuilds() fetchAllGuilds()
} }
if(guild?.guild?.roles?.isEmpty() == true) {
guild.guild.roles = fetchGuildRoles(guildId)
}
} }
} }
return cache[guildId]?.guild return cache[guildId]?.guild
@ -61,6 +64,25 @@ object DiscordGuildCache {
return result.body<List<DiscordGuildListAPI>>() 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() { private suspend fun fetchAllGuilds() {
var lastGuildId: String? = null var lastGuildId: String? = null
while (true) { while (true) {
@ -105,5 +127,5 @@ data class Guild(
val name: String, val name: String,
val icon: String?, val icon: String?,
val banner: String?, val banner: String?,
val roles: List<GuildRole> = emptyList(), var roles: List<GuildRole> = emptyList(),
) )