@@ -5,6 +5,7 @@ import dev.kord.core.behavior.GuildBehavior
55import dev.kord.core.event.role.RoleCreateEvent
66import dev.kord.core.event.role.RoleDeleteEvent
77import dev.kord.core.event.role.RoleUpdateEvent
8+ import dev.kord.core.exception.EntityNotFoundException
89import dev.kord.rest.request.KtorRequestException
910import dev.kordex.core.extensions.Extension
1011import dev.kordex.core.extensions.ephemeralSlashCommand
@@ -25,7 +26,6 @@ import java.sql.Connection
2526import java.sql.DriverManager
2627import java.sql.SQLException
2728import java.util.function.Predicate
28- import kotlin.collections.HashSet
2929
3030const 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