Skip to content

Commit 71c8c7d

Browse files
committed
Role manager: fix case where user left the discord
1 parent f20d4ce commit 71c8c7d

File tree

1 file changed

+19
-10
lines changed

1 file changed

+19
-10
lines changed

botfest/src/main/kotlin/net/modfest/botfest/extensions/RoleManager.kt

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import dev.kord.core.behavior.GuildBehavior
55
import dev.kord.core.event.role.RoleCreateEvent
66
import dev.kord.core.event.role.RoleDeleteEvent
77
import dev.kord.core.event.role.RoleUpdateEvent
8+
import dev.kord.core.exception.EntityNotFoundException
89
import dev.kord.rest.request.KtorRequestException
910
import dev.kordex.core.extensions.Extension
1011
import dev.kordex.core.extensions.ephemeralSlashCommand
@@ -25,7 +26,6 @@ import java.sql.Connection
2526
import java.sql.DriverManager
2627
import java.sql.SQLException
2728
import java.util.function.Predicate
28-
import kotlin.collections.HashSet
2929

3030
const val TABLE_NAME = "members"
3131

@@ -46,11 +46,13 @@ class RoleManager : Extension(), KordExKoinComponent {
4646

4747
// Ensure the table exists
4848
conn.createStatement().use {
49-
it.executeUpdate("""
49+
it.executeUpdate(
50+
"""
5051
CREATE TABLE IF NOT EXISTS $TABLE_NAME (
5152
member INTEGER PRIMARY KEY
5253
) STRICT;
53-
""".trimIndent())
54+
""".trimIndent()
55+
)
5456
}
5557

5658
return@lazy conn;
@@ -202,10 +204,15 @@ class RoleManager : Extension(), KordExKoinComponent {
202204
val guild = kord.getGuild(MAIN_GUILD_ID)
203205
// Iterate asynchronously
204206
members.asFlow().flowOn(Dispatchers.IO).collect { member ->
205-
val currentRoles = if (force) {
206-
kord.rest.guild.getGuildMember(MAIN_GUILD_ID, member).roles.toSet()
207-
} else {
208-
guild.getMember(member).roleIds
207+
val currentRoles = try {
208+
if (force) {
209+
kord.rest.guild.getGuildMember(MAIN_GUILD_ID, member).roles.toSet()
210+
} else {
211+
guild.getMember(member).roleIds
212+
}
213+
} catch (_: EntityNotFoundException) {
214+
// Welp, they left the discord. I guess that's equivalent to having no roles.
215+
listOf()
209216
}
210217
database.createStatement().use { stmnt ->
211218
if (currentRoles.isEmpty()) {
@@ -228,12 +235,14 @@ class RoleManager : Extension(), KordExKoinComponent {
228235
private fun getCachedRoles(user: Snowflake): Set<Snowflake> {
229236
database.createStatement().use { stmnt ->
230237
val query = roles!!.map { "`$it`" }.joinToString(",")
231-
var res = stmnt.executeQuery("""
238+
var res = stmnt.executeQuery(
239+
"""
232240
SELECT $query FROM $TABLE_NAME WHERE member = ${user.value.toLong()}
233-
""".trimIndent())
241+
""".trimIndent()
242+
)
234243
val set = HashSet<Snowflake>()
235244
for (i in 0..<roles!!.size) {
236-
if (res.getInt(i+1) >= 1) {
245+
if (res.getInt(i + 1) >= 1) {
237246
set.add(roles!![i])
238247
}
239248
}

0 commit comments

Comments
 (0)