@@ -10,6 +10,10 @@ import net.dv8tion.jda.api.utils.cache.CacheFlag
1010import net.dv8tion.jda.api.utils.messages.MessageRequest
1111import org.springframework.context.annotation.Bean
1212import 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
1317import javax.security.auth.login.LoginException
1418import 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