Skip to content

Commit eb76318

Browse files
committed
Refactor getMemberRolesFromCluster method
1 parent 76f22d1 commit eb76318

File tree

3 files changed

+44
-37
lines changed

3 files changed

+44
-37
lines changed

foxy/src/main/kotlin/net/cakeyfox/foxy/profile/ProfileRender.kt

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import net.cakeyfox.foxy.profile.ProfileUtils.getOrFetchFromCache
1212
import net.cakeyfox.foxy.profile.badge.BadgeUtils
1313
import net.cakeyfox.foxy.profile.config.ProfileConfig
1414
import net.cakeyfox.foxy.database.data.*
15-
import net.cakeyfox.foxy.utils.ClusterUtils.getMemberRolesFromCluster
15+
import net.cakeyfox.foxy.utils.ClusterUtils.getMemberRolesFromGuildOrCluster
1616
import net.dv8tion.jda.api.entities.User
1717
import java.awt.Color
1818
import java.awt.Graphics2D
@@ -219,20 +219,13 @@ class ProfileRender(
219219
val defaultBadges = getOrFetchFromCache(
220220
ProfileCacheManager.badgesCache,
221221
"default"
222-
) {
223-
context.database.profile.getBadges()
224-
}
225-
226-
val roles = try {
227-
context.foxy.shardManager.getGuildById(Constants.SUPPORT_SERVER_ID)
228-
?.retrieveMember(user)
229-
?.await()
230-
?.roles
231-
?.map { it.id }
232-
} catch (_: Exception) {
233-
null
234-
} ?: context.foxy.getMemberRolesFromCluster(context.foxy, Constants.SUPPORT_SERVER_ID.toLong(), user.idLong) ?: emptyList()
222+
) { context.database.profile.getBadges() }
235223

224+
val roles = context.foxy.getMemberRolesFromGuildOrCluster(
225+
context.foxy,
226+
Constants.SUPPORT_SERVER_ID.toLong(),
227+
user.idLong
228+
)
236229

237230
val userBadges = roles.let { BadgeUtils.getBadges(context, it, defaultBadges, data) }
238231

foxy/src/main/kotlin/net/cakeyfox/foxy/profile/ProfileUtils.kt

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package net.cakeyfox.foxy.profile
22

33
import com.github.benmanes.caffeine.cache.Cache
4-
import dev.minn.jda.ktx.coroutines.await
54
import kotlinx.coroutines.Dispatchers
65
import kotlinx.coroutines.withContext
76
import net.cakeyfox.common.Constants
@@ -10,7 +9,7 @@ import net.cakeyfox.foxy.database.data.FoxyUser
109
import net.cakeyfox.foxy.database.data.Layout
1110
import net.cakeyfox.foxy.interactions.commands.CommandContext
1211
import net.cakeyfox.foxy.profile.badge.BadgeUtils
13-
import net.cakeyfox.foxy.utils.ClusterUtils.getMemberRolesFromCluster
12+
import net.cakeyfox.foxy.utils.ClusterUtils.getMemberRolesFromGuildOrCluster
1413
import net.dv8tion.jda.api.entities.User
1514

1615
object ProfileUtils {
@@ -25,28 +24,21 @@ object ProfileUtils {
2524
}
2625
}
2726

28-
suspend fun getBadgeAssets(data: FoxyUser, user: User, context: CommandContext): List<Badge> {
27+
suspend fun getBadgeAssets(data: FoxyUser, user: User, context: CommandContext): List<Badge> {
2928
val defaultBadges = getOrFetchFromCache(
3029
ProfileCacheManager.badgesCache,
3130
"default"
3231
) {
3332
context.database.profile.getBadges()
3433
}
3534

36-
val roles = try {
37-
context.foxy.shardManager.getGuildById(Constants.SUPPORT_SERVER_ID)
38-
?.retrieveMember(user)
39-
?.await()
40-
?.roles
41-
?.map { it.id } ?: run {
42-
context.foxy.getMemberRolesFromCluster(context.foxy, Constants.SUPPORT_SERVER_ID.toLong(), user.idLong)
43-
}
44-
} catch (_: Exception) {
45-
null
46-
}
35+
val roles = context.foxy.getMemberRolesFromGuildOrCluster(
36+
context.foxy,
37+
Constants.SUPPORT_SERVER_ID.toLong(),
38+
user.idLong
39+
)
4740

48-
val userBadges = roles?.let { BadgeUtils.getBadges(context, it, defaultBadges, data) }
49-
?: BadgeUtils.getFallbackBadges(defaultBadges, data)
41+
val userBadges = roles.let { BadgeUtils.getBadges(context, it, defaultBadges, data) }
5042

5143
if (userBadges.isEmpty()) {
5244
return emptyList()

foxy/src/main/kotlin/net/cakeyfox/foxy/utils/ClusterUtils.kt

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -115,10 +115,25 @@ object ClusterUtils {
115115
}
116116
}
117117

118-
suspend fun FoxyInstance.getMemberRolesFromCluster(foxy: FoxyInstance, guildId: Long, memberId: Long): List<String> {
118+
suspend fun FoxyInstance.getMemberRolesFromGuildOrCluster(foxy: FoxyInstance, guildId: Long, memberId: Long): List<String> {
119119
val shardId = getShardIdFromGuildId(guildId, foxy.config.discord.totalShards)
120120
val cluster = getClusterByShardId(foxy, shardId)
121121
val rolesResponse = cachedRoles.getIfPresent(memberId)
122+
val guildShardId = getShardIdFromGuildId(guildId, foxy.config.discord.totalShards)
123+
val guildCluster = getClusterByShardId(foxy, guildShardId)
124+
125+
if (guildCluster.id == foxy.currentCluster.id) {
126+
logger.debug { "Fetching member roles from current cluster for guild $guildId and member $memberId" }
127+
val guild = foxy.shardManager.getGuildById(guildId)
128+
if (guild != null) {
129+
val member = guild.retrieveMemberById(memberId).await()
130+
val roles = member.roles.map { it.id }
131+
cachedRoles.put(memberId, roles)
132+
return roles
133+
} else {
134+
return emptyList()
135+
}
136+
}
122137

123138
if (rolesResponse != null) {
124139
// Return cached roles to avoid unnecessary API calls
@@ -189,14 +204,21 @@ object ClusterUtils {
189204
}
190205
}
191206

192-
suspend fun testGetMemberFromGuild(foxy: FoxyInstance, guildId: String?, memberId: Long): CustomMemberResponse? {
207+
suspend fun testGetMemberRolesFromGuild(
208+
foxy: FoxyInstance,
209+
guildId: String?,
210+
memberId: Long
211+
): List<String> {
212+
println("Testing fetching member roles from guild $guildId and member $memberId")
193213
val cluster = foxy.currentCluster
194-
val fetchedInfo = getFromAnotherCluster(foxy, cluster, "/api/v1/guilds/$guildId/$memberId")
195-
println(fetchedInfo)
196-
return if (fetchedInfo == null) {
197-
null
214+
val fetchedRoles = getFromAnotherCluster(foxy, cluster, "/api/v1/guilds/$guildId/users/$memberId/roles")
215+
216+
println(fetchedRoles)
217+
218+
return if (fetchedRoles == null) {
219+
emptyList()
198220
} else {
199-
json.decodeFromString(fetchedInfo)
221+
json.decodeFromString(fetchedRoles)
200222
}
201223
}
202224
}

0 commit comments

Comments
 (0)