From af9c3a2cf57f8a19bfecfb913d783e0beb141265 Mon Sep 17 00:00:00 2001 From: dalbodeule <11470513+dalbodeule@users.noreply.github.com> Date: Tue, 24 Jun 2025 16:46:46 +0900 Subject: [PATCH] [hotfix] refactor badge checks; adjust listener initialization logic. --- .../chzzk_bot/chatbot/chzzk/ChzzkHandler.kt | 17 ++++++----- .../chzzk_bot/chatbot/chzzk/MessageHandler.kt | 28 +++++++++++-------- 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/chzzk/ChzzkHandler.kt b/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/chzzk/ChzzkHandler.kt index 4be7c91..3d05647 100644 --- a/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/chzzk/ChzzkHandler.kt +++ b/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/chzzk/ChzzkHandler.kt @@ -233,9 +233,17 @@ class UserHandler( client.loginAsync().await() listener = ChzzkSessionBuilder(client).buildUserSession() - listener.createAndConnectAsync()?.await() + listener.createAndConnectAsync().await() + listener.subscribeAsync(ChzzkSessionSubscriptionType.CHAT)?.await() - delay(1000L) + delay(5000L) + + messageHandler = MessageHandler(this@UserHandler) + logger.info("${user.username} message handler init.") + listener.on(SessionChatMessageEvent::class.java) { + messageHandler.handle(it.message, user) + } + logger.info("${user.username} is connected.") val timer = TimerConfigService.getConfig(user) if (timer?.option == TimerType.UPTIME.value) @@ -253,11 +261,6 @@ class UserHandler( null ) ) - - messageHandler = MessageHandler(this@UserHandler) - listener.on(SessionChatMessageEvent::class.java) { - messageHandler.handle(it.message, user) - } } internal suspend fun disable() { diff --git a/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/chzzk/MessageHandler.kt b/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/chzzk/MessageHandler.kt index 7b31244..65caeee 100644 --- a/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/chzzk/MessageHandler.kt +++ b/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/chzzk/MessageHandler.kt @@ -37,11 +37,13 @@ class MessageHandler( init { reloadCommand() - dispatcher.subscribe(SongEvent::class) { - if(it.type == SongType.STREAM_OFF) { - val user = UserService.getUser(channel.channelId) - if(! user?.let { usr -> SongListService.getSong(usr) }.isNullOrEmpty()) { - SongListService.deleteUser(user) + CoroutineScope(Dispatchers.Default).launch { + dispatcher.subscribe(SongEvent::class) { + if(it.type == SongType.STREAM_OFF) { + val user = UserService.getUser(channel.channelId) + if(! user?.let { usr -> SongListService.getSong(usr) }.isNullOrEmpty()) { + SongListService.deleteUser(user) + } } } } @@ -87,7 +89,7 @@ class MessageHandler( } private fun manageAddCommand(msg: SessionChatMessage, user: User) { - if (msg.profile.badges.none { it.imageUrl.contains("manager") || it.imageUrl.contains("streamer") }) { + if (msg.profile.badges.none { it.isModerator() }) { handler.sendChat("매니저만 명령어를 추가할 수 있습니다.") return } @@ -108,7 +110,7 @@ class MessageHandler( } private fun manageUpdateCommand(msg: SessionChatMessage, user: User) { - if (msg.profile.badges.none { it.imageUrl.contains("manager") || it.imageUrl.contains("streamer") }) { + if (msg.profile.badges.none { it.isModerator() }) { handler.sendChat("매니저만 명령어를 추가할 수 있습니다.") return } @@ -130,7 +132,7 @@ class MessageHandler( } private fun manageRemoveCommand(msg: SessionChatMessage, user: User) { - if (msg.profile.badges.none { it.imageUrl.contains("manager") || it.imageUrl.contains("streamer") }) { + if (msg.profile.badges.none { it.isModerator() }) { handler.sendChat("매니저만 명령어를 삭제할 수 있습니다.") return } @@ -147,7 +149,7 @@ class MessageHandler( } private fun timerCommand(msg: SessionChatMessage, user: User) { - if (msg.profile.badges.none { it.imageUrl.contains("manager") || it.imageUrl.contains("streamer") }) { + if (msg.profile.badges.none { it.isModerator() }) { handler.sendChat("매니저만 이 명령어를 사용할 수 있습니다.") return } @@ -297,7 +299,7 @@ class MessageHandler( } private fun songStartCommand(msg: SessionChatMessage, user: User) { - if (msg.profile.badges.none { it.imageUrl.contains("manager") || it.imageUrl.contains("streamer") }) { + if (msg.profile.badges.none { it.isModerator() }) { handler.sendChat("매니저만 이 명령어를 사용할 수 있습니다.") return } @@ -316,7 +318,7 @@ class MessageHandler( } private fun categoryChangeCommand(msg: SessionChatMessage, user: User) { - if (msg.profile.badges.none { it.imageUrl.contains("manager") || it.imageUrl.contains("streamer") }) { + if (msg.profile.badges.none { it.isModerator() }) { handler.sendChat("매니저만 이 명령어를 사용할 수 있습니다.") return } @@ -430,3 +432,7 @@ class MessageHandler( return result } } + +fun SessionChatMessage.Profile.Badge.isManager() = imageUrl.contains("manager") +fun SessionChatMessage.Profile.Badge.isStreamer() = imageUrl.contains("streamer") +fun SessionChatMessage.Profile.Badge.isModerator() = isManager() || isStreamer() \ No newline at end of file