From cc23ac03e78f582ac55748f3c991188f4bd4d8a4 Mon Sep 17 00:00:00 2001 From: dalbodeule <11470513+dalbodeule@users.noreply.github.com> Date: Mon, 5 Aug 2024 13:25:28 +0900 Subject: [PATCH] =?UTF-8?q?some=20improve=20WSApis=20-=20with=20WSSongList?= =?UTF-8?q?Routes.kt,=20data=20receive=20logics.=20-=20else=20WSAPI's=20lo?= =?UTF-8?q?gger=20name=20changed.=20-=20MessageHandler.kt=20"!=EB=85=B8?= =?UTF-8?q?=EB=9E=98=EC=8B=9C=EC=9E=91"=20command=20improved.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chzzk_bot/chatbot/chzzk/MessageHandler.kt | 10 ++-- .../webserver/routes/WSSongListRoutes.kt | 56 +++++++++++-------- .../webserver/routes/WSSongRoutes.kt | 2 +- .../webserver/routes/WSTimerRoutes.kt | 2 +- 4 files changed, 40 insertions(+), 30 deletions(-) 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 ea31ef6..b269d54 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 @@ -263,13 +263,13 @@ class MessageHandler( SongConfigService.updateSession(user, session, password) - bot.getUserById(user.token)?.let { it -> - val channel = it.openPrivateChannel() - channel.onSuccess { privateChannel -> - privateChannel.sendMessage("여기로 접속해주세요! https://nabot,mori.space/songlist/${session}.\n인증번호는 ||$password|| 입니다.").queue() + + bot.retrieveUserById(user.discord).queue { discordUser -> + discordUser?.openPrivateChannel()?.queue { channel -> + channel.sendMessage("여기로 접속해주세요! https://nabot,mori.space/songlist/${session}.\n인증번호는 ||$password|| 입니다.") + .queue() } } - } internal fun handle(msg: ChatMessage, user: User) { diff --git a/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/WSSongListRoutes.kt b/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/WSSongListRoutes.kt index 7442893..e0971cb 100644 --- a/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/WSSongListRoutes.kt +++ b/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/WSSongListRoutes.kt @@ -8,11 +8,13 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.channels.ClosedReceiveChannelException import kotlinx.coroutines.launch import kotlinx.serialization.Serializable +import kotlinx.serialization.json.Json import org.koin.java.KoinJavaComponent.inject import org.slf4j.LoggerFactory import space.mori.chzzk_bot.common.events.* import space.mori.chzzk_bot.common.services.SongConfigService import space.mori.chzzk_bot.common.services.SongListService +import space.mori.chzzk_bot.common.services.UserService import space.mori.chzzk_bot.common.utils.getYoutubeVideo import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.ConcurrentLinkedQueue @@ -20,7 +22,7 @@ import java.util.concurrent.ConcurrentLinkedQueue fun Routing.wsSongListRoutes() { val sessions = ConcurrentHashMap>() val status = ConcurrentHashMap() - val logger = LoggerFactory.getLogger(this.javaClass.name) + val logger = LoggerFactory.getLogger("WSSongListRoutes") val dispatcher: CoroutinesEventBus by inject(CoroutinesEventBus::class.java) @@ -68,7 +70,7 @@ fun Routing.wsSongListRoutes() { for (frame in incoming) { when(frame) { is Frame.Text -> { - val data = receiveDeserialized() + val data = frame.readText().let { Json.decodeFromString(it) } if(data.maxQueue != null && data.maxQueue > 0) SongConfigService.updateQueueLimit(user, data.maxQueue) if(data.maxUserLimit != null && data.maxUserLimit > 0) SongConfigService.updatePersonalLimit(user, data.maxUserLimit) @@ -76,18 +78,20 @@ fun Routing.wsSongListRoutes() { if(data.url != null) { val youtubeVideo = getYoutubeVideo(data.url) - - dispatcher.post( - SongEvent( - user.token, - SongType.ADD, - user.token, - user.username, - youtubeVideo?.name, - youtubeVideo?.author, - youtubeVideo?.length - ) - ) + if(youtubeVideo != null) { + CoroutineScope(Dispatchers.Default).launch { + SongListService.saveSong(user, user.token, data.url, youtubeVideo.name, youtubeVideo.author, youtubeVideo.length, user.username) + dispatcher.post(SongEvent( + user.token, + SongType.ADD, + user.token, + user.username, + youtubeVideo.name, + youtubeVideo.author, + youtubeVideo.length + )) + } + } } if(data.remove != null && data.remove > 0) { val songs = SongListService.getSong(user) @@ -125,15 +129,21 @@ fun Routing.wsSongListRoutes() { dispatcher.subscribe(SongEvent::class) { logger.debug("SongEvent: {} / {} {}", it.uid, it.type, it.name) CoroutineScope(Dispatchers.Default).launch { - sessions[it.uid]?.forEach { ws -> - ws.sendSerialized(SongResponse( - it.type.value, - it.uid, - it.reqUid, - it.name, - it.author, - it.time - )) + val user = UserService.getUser(it.uid) + if(user != null) { + val session = SongConfigService.getConfig(user) + sessions[session.token]?.forEach { ws -> + ws.sendSerialized( + SongResponse( + it.type.value, + it.uid, + it.reqUid, + it.name, + it.author, + it.time + ) + ) + } } } } diff --git a/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/WSSongRoutes.kt b/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/WSSongRoutes.kt index 25b301e..7b60655 100644 --- a/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/WSSongRoutes.kt +++ b/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/WSSongRoutes.kt @@ -18,7 +18,7 @@ import java.util.concurrent.ConcurrentLinkedQueue fun Routing.wsSongRoutes() { val sessions = ConcurrentHashMap>() val status = ConcurrentHashMap() - val logger = LoggerFactory.getLogger(this.javaClass.name) + val logger = LoggerFactory.getLogger("WSSongRoutes") fun addSession(uid: String, session: WebSocketServerSession) { sessions.computeIfAbsent(uid) { ConcurrentLinkedQueue() }.add(session) diff --git a/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/WSTimerRoutes.kt b/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/WSTimerRoutes.kt index 1f228e8..4b055e5 100644 --- a/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/WSTimerRoutes.kt +++ b/webserver/src/main/kotlin/space/mori/chzzk_bot/webserver/routes/WSTimerRoutes.kt @@ -19,7 +19,7 @@ import java.util.concurrent.ConcurrentLinkedQueue fun Routing.wsTimerRoutes() { val sessions = ConcurrentHashMap>() val status = ConcurrentHashMap() - val logger = LoggerFactory.getLogger(this.javaClass.name) + val logger = LoggerFactory.getLogger("WSTimerRoutes") fun addSession(uid: String, session: WebSocketServerSession) { sessions.computeIfAbsent(uid) { ConcurrentLinkedQueue() }.add(session)