From 1be1b6942572c3e224f21e7180db1a5ab4a70b3a Mon Sep 17 00:00:00 2001 From: dalbodeule <11470513+dalbodeule@users.noreply.github.com> Date: Sat, 3 Aug 2024 23:44:10 +0900 Subject: [PATCH] some change on LiveStatus logics - add LiveStatus table - in ChzzkHandler.kt (UserHandler), _isActive variable to bind LiveStatusService --- .../chzzk_bot/chatbot/chzzk/ChzzkHandler.kt | 7 ++++- .../mori/chzzk_bot/chatbot/discord/Discord.kt | 1 - .../space/mori/chzzk_bot/common/Connector.kt | 3 +- .../chzzk_bot/common/models/LiveStatus.kt | 19 ++++++++++++ .../common/services/LiveStatusService.kt | 30 +++++++++++++++++++ 5 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 common/src/main/kotlin/space/mori/chzzk_bot/common/models/LiveStatus.kt create mode 100644 common/src/main/kotlin/space/mori/chzzk_bot/common/services/LiveStatusService.kt 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 7b001c8..93d034d 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 @@ -13,6 +13,7 @@ import space.mori.chzzk_bot.common.events.CoroutinesEventBus import space.mori.chzzk_bot.common.events.TimerEvent import space.mori.chzzk_bot.common.events.TimerType import space.mori.chzzk_bot.common.models.User +import space.mori.chzzk_bot.common.services.LiveStatusService import space.mori.chzzk_bot.common.services.TimerConfigService import space.mori.chzzk_bot.common.services.UserService import space.mori.chzzk_bot.common.utils.convertChzzkDateToLocalDateTime @@ -96,11 +97,15 @@ class UserHandler( val channel: ChzzkChannel, val logger: Logger, private var user: User, - private var _isActive: Boolean = false, var streamStartTime: LocalDateTime?, ) { private lateinit var messageHandler: MessageHandler private val dispatcher: CoroutinesEventBus by inject(CoroutinesEventBus::class.java) + private var _isActive: Boolean + get() = LiveStatusService.getLiveStatus(user)?.status ?: false + set(value) { + LiveStatusService.updateOrCreate(user, value) + } var listener: ChzzkChat = chzzk.chat(channel.channelId) .withAutoReconnect(true) diff --git a/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/discord/Discord.kt b/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/discord/Discord.kt index 40f8af4..f637de9 100644 --- a/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/discord/Discord.kt +++ b/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/discord/Discord.kt @@ -40,7 +40,6 @@ class Discord: ListenerAdapter() { val embed = EmbedBuilder() embed.setTitle(status.content.liveTitle, "https://chzzk.naver.com/live/${user.token}") embed.setDescription("${user.username} 님이 방송을 시작했습니다.") - embed.setUrl(status.content.channel.channelImageUrl) embed.setTimestamp(Instant.now()) embed.setAuthor(user.username, "https://chzzk.naver.com/live/${user.token}", status.content.channel.channelImageUrl) embed.addField("카테고리", status.content.liveCategoryValue, true) diff --git a/common/src/main/kotlin/space/mori/chzzk_bot/common/Connector.kt b/common/src/main/kotlin/space/mori/chzzk_bot/common/Connector.kt index 6e72289..b2f763c 100644 --- a/common/src/main/kotlin/space/mori/chzzk_bot/common/Connector.kt +++ b/common/src/main/kotlin/space/mori/chzzk_bot/common/Connector.kt @@ -31,7 +31,8 @@ object Connector { DailyCounters, PersonalCounters, Managers, - TimerConfigs + TimerConfigs, + LiveStatuses ) transaction { diff --git a/common/src/main/kotlin/space/mori/chzzk_bot/common/models/LiveStatus.kt b/common/src/main/kotlin/space/mori/chzzk_bot/common/models/LiveStatus.kt new file mode 100644 index 0000000..9553a06 --- /dev/null +++ b/common/src/main/kotlin/space/mori/chzzk_bot/common/models/LiveStatus.kt @@ -0,0 +1,19 @@ +package space.mori.chzzk_bot.common.models + +import org.jetbrains.exposed.dao.IntEntity +import org.jetbrains.exposed.dao.IntEntityClass +import org.jetbrains.exposed.dao.id.EntityID +import org.jetbrains.exposed.dao.id.IntIdTable +import org.jetbrains.exposed.sql.ReferenceOption + +object LiveStatuses: IntIdTable("live_statuses") { + val user = reference("user", Users, onDelete = ReferenceOption.CASCADE) + val status = bool("status") +} + +class LiveStatus(id: EntityID) : IntEntity(id) { + companion object : IntEntityClass(LiveStatuses) + + var user by User referencedOn LiveStatuses.user + var status by LiveStatuses.status +} \ No newline at end of file diff --git a/common/src/main/kotlin/space/mori/chzzk_bot/common/services/LiveStatusService.kt b/common/src/main/kotlin/space/mori/chzzk_bot/common/services/LiveStatusService.kt new file mode 100644 index 0000000..d0a0a1b --- /dev/null +++ b/common/src/main/kotlin/space/mori/chzzk_bot/common/services/LiveStatusService.kt @@ -0,0 +1,30 @@ +package space.mori.chzzk_bot.common.services + +import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq +import org.jetbrains.exposed.sql.transactions.transaction +import space.mori.chzzk_bot.common.models.LiveStatus +import space.mori.chzzk_bot.common.models.LiveStatuses +import space.mori.chzzk_bot.common.models.User + +object LiveStatusService { + fun updateOrCreate(user: User, status: Boolean): LiveStatus { + return transaction { + return@transaction when(val liveStatus = LiveStatus.find(LiveStatuses.user eq user.id).firstOrNull()) { + null -> LiveStatus.new { + this.user = user + this.status = status + } + else -> { + liveStatus.status = status + liveStatus + } + } + } + } + + fun getLiveStatus(user: User): LiveStatus? { + return transaction { + LiveStatus.find(LiveStatuses.user eq user.id).firstOrNull() + } + } +} \ No newline at end of file