Skip to content

Commit 8567e47

Browse files
committed
Logout on exit with DisposableBean.
1 parent 5b59b61 commit 8567e47

File tree

1 file changed

+26
-19
lines changed

1 file changed

+26
-19
lines changed

src/main/kotlin/dev/arbjerg/ukulele/jda/JdaConfig.kt

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ import net.dv8tion.jda.api.utils.cache.CacheFlag
1010
import net.dv8tion.jda.api.utils.messages.MessageRequest
1111
import org.springframework.context.annotation.Bean
1212
import org.springframework.context.annotation.Configuration
13+
import org.springframework.beans.factory.DisposableBean
14+
import org.springframework.stereotype.Component
15+
import java.io.File
16+
import java.time.Instant
1317
import javax.security.auth.login.LoginException
1418
import kotlin.concurrent.thread
1519

@@ -55,25 +59,28 @@ class JdaConfig {
5559
throw RuntimeException("Failed to log in to Discord! Is your token invalid?", e)
5660
}
5761

58-
Runtime.getRuntime().addShutdownHook(thread(start = false) {
59-
val logFile = java.io.File("shutdown-debug.log")
60-
logFile.appendText("Shutdown hook started at ${java.time.Instant.now()}\n")
61-
try {
62-
shardManager.setStatus(OnlineStatus.OFFLINE)
63-
logFile.appendText("Set status to OFFLINE\n")
64-
shardManager.guildCache.forEach {
65-
if (it.audioManager.isConnected) it.audioManager.closeAudioConnection()
66-
}
67-
logFile.appendText("Closed audio connections\n")
68-
shardManager.shutdown()
69-
logFile.appendText("Called shardManager.shutdown()\n")
70-
shardManager.shards.forEach { it.awaitShutdown() }
71-
logFile.appendText("Awaited shutdown. Complete.\n")
72-
} catch (e: Exception) {
73-
logFile.appendText("Error in shutdown hook: ${e.stackTraceToString()}\n")
74-
}
75-
})
76-
7762
return shardManager
7863
}
64+
}
65+
66+
@Component
67+
class JdaLifecycleManager(private val shardManager: ShardManager) : DisposableBean {
68+
override fun destroy() {
69+
val logFile = File("shutdown-debug.log")
70+
logFile.appendText("Spring DisposableBean destroy() started at ${Instant.now()}\n")
71+
try {
72+
shardManager.setStatus(OnlineStatus.OFFLINE)
73+
logFile.appendText("Set status to OFFLINE\n")
74+
shardManager.guildCache.forEach {
75+
if (it.audioManager.isConnected) it.audioManager.closeAudioConnection()
76+
}
77+
logFile.appendText("Closed audio connections\n")
78+
shardManager.shutdown()
79+
logFile.appendText("Called shardManager.shutdown()\n")
80+
shardManager.shards.forEach { it.awaitShutdown() }
81+
logFile.appendText("Awaited shutdown. Complete.\n")
82+
} catch (e: Exception) {
83+
logFile.appendText("Error in shutdown hook: ${e.stackTraceToString()}\n")
84+
}
85+
}
7986
}

0 commit comments

Comments
 (0)