mirror of
https://github.com/dalbodeule/chibot-chzzk-bot.git
synced 2025-06-09 07:18:22 +00:00
commit
568c3638c6
@ -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(),
|
||||||
)
|
)
|
Loading…
x
Reference in New Issue
Block a user