diff --git a/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/discord/commands/AddCommand.kt b/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/discord/commands/AddCommand.kt index 772de12..f9c0b16 100644 --- a/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/discord/commands/AddCommand.kt +++ b/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/discord/commands/AddCommand.kt @@ -5,6 +5,7 @@ import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEve import net.dv8tion.jda.api.interactions.commands.OptionType import net.dv8tion.jda.api.interactions.commands.build.Commands import net.dv8tion.jda.api.interactions.commands.build.OptionData +import org.jetbrains.exposed.sql.transactions.transaction import org.slf4j.LoggerFactory import space.mori.chzzk_bot.chatbot.chzzk.ChzzkHandler import space.mori.chzzk_bot.chatbot.chzzk.Connector @@ -39,8 +40,15 @@ object AddCommand : CommandInterface { } if (manager != null) { - user = manager.user - ManagerService.updateManager(user, event.user.idLong, event.user.effectiveName) + transaction { + user = manager.user + } + user?.let { ManagerService.updateManager(it, event.user.idLong, event.user.effectiveName) } + } + + if (user == null) { + event.hook.sendMessage("에러가 발생했습니다.").queue() + return } val commands = CommandService.getCommands(user!!) @@ -49,10 +57,10 @@ object AddCommand : CommandInterface { return } - val chzzkChannel = Connector.getChannel(user.token) + val chzzkChannel = Connector.getChannel(user!!.token) try { - CommandService.saveCommand(user, label, content, failContent ?: "") + CommandService.saveCommand(user!!, label, content, failContent ?: "") try { ChzzkHandler.reloadCommand(chzzkChannel!!) } catch (_: Exception) {} diff --git a/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/discord/commands/AlertCommand.kt b/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/discord/commands/AlertCommand.kt index dcc9098..25fa024 100644 --- a/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/discord/commands/AlertCommand.kt +++ b/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/discord/commands/AlertCommand.kt @@ -5,6 +5,7 @@ import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEve import net.dv8tion.jda.api.interactions.commands.OptionType import net.dv8tion.jda.api.interactions.commands.build.Commands import net.dv8tion.jda.api.interactions.commands.build.OptionData +import org.jetbrains.exposed.sql.transactions.transaction import org.slf4j.LoggerFactory import space.mori.chzzk_bot.chatbot.chzzk.ChzzkHandler import space.mori.chzzk_bot.chatbot.chzzk.Connector @@ -31,14 +32,21 @@ object AlertCommand : CommandInterface { } if (manager != null) { - user = manager.user - ManagerService.updateManager(user, event.user.idLong, event.user.effectiveName) + transaction { + user = manager.user + } + user?.let { ManagerService.updateManager(it, event.user.idLong, event.user.effectiveName) } + } + + if (user == null) { + event.hook.sendMessage("에러가 발생했습니다.").queue() + return } val chzzkChannel = Connector.getChannel(user!!.token) try { - val newUser = UserService.updateLiveAlert(user.id.value, channel?.guild?.idLong ?: 0L, channel?.idLong ?: 0L, content ?: "") + val newUser = UserService.updateLiveAlert(user!!.id.value, channel?.guild?.idLong ?: 0L, channel?.idLong ?: 0L, content ?: "") try { ChzzkHandler.reloadUser(chzzkChannel!!, newUser) } catch (_: Exception) {} diff --git a/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/discord/commands/RemoveCommand.kt b/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/discord/commands/RemoveCommand.kt index 5bd8c41..377413d 100644 --- a/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/discord/commands/RemoveCommand.kt +++ b/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/discord/commands/RemoveCommand.kt @@ -5,6 +5,7 @@ import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEve import net.dv8tion.jda.api.interactions.commands.OptionType import net.dv8tion.jda.api.interactions.commands.build.Commands import net.dv8tion.jda.api.interactions.commands.build.OptionData +import org.jetbrains.exposed.sql.transactions.transaction import org.slf4j.LoggerFactory import space.mori.chzzk_bot.chatbot.chzzk.ChzzkHandler import space.mori.chzzk_bot.chatbot.chzzk.Connector @@ -35,14 +36,21 @@ object RemoveCommand : CommandInterface { } if (manager != null) { - user = manager.user - ManagerService.updateManager(user, event.user.idLong, event.user.effectiveName) + transaction { + user = manager.user + } + user?.let { ManagerService.updateManager(it, event.user.idLong, event.user.effectiveName) } + } + + if (user == null) { + event.hook.sendMessage("에러가 발생했습니다.").queue() + return } val chzzkChannel = Connector.getChannel(user!!.token) try { - CommandService.removeCommand(user, label) + CommandService.removeCommand(user!!, label) try { ChzzkHandler.reloadCommand(chzzkChannel!!) } catch (_: Exception) {} diff --git a/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/discord/commands/UpdateCommand.kt b/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/discord/commands/UpdateCommand.kt index 3d9c03d..e1f8e0f 100644 --- a/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/discord/commands/UpdateCommand.kt +++ b/chatbot/src/main/kotlin/space/mori/chzzk_bot/chatbot/discord/commands/UpdateCommand.kt @@ -5,6 +5,7 @@ import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEve import net.dv8tion.jda.api.interactions.commands.OptionType import net.dv8tion.jda.api.interactions.commands.build.Commands import net.dv8tion.jda.api.interactions.commands.build.OptionData +import org.jetbrains.exposed.sql.transactions.transaction import org.slf4j.LoggerFactory import space.mori.chzzk_bot.chatbot.chzzk.ChzzkHandler import space.mori.chzzk_bot.chatbot.chzzk.Connector @@ -39,14 +40,21 @@ object UpdateCommand : CommandInterface { } if (manager != null) { - user = manager.user - ManagerService.updateManager(user, event.user.idLong, event.user.effectiveName) + transaction { + user = manager.user + } + user?.let { ManagerService.updateManager(it, event.user.idLong, event.user.effectiveName) } + } + + if (user == null) { + event.hook.sendMessage("에러가 발생했습니다.").queue() + return } val chzzkChannel = Connector.getChannel(user!!.token) try { - CommandService.updateCommand(user, label, content, failContent ?: "") + CommandService.updateCommand(user!!, label, content, failContent ?: "") chzzkChannel?.let { ChzzkHandler.reloadCommand(it) } event.hook.sendMessage("등록이 완료되었습니다. $label = $content").queue() } catch (e: Exception) { diff --git a/common/src/main/kotlin/space/mori/chzzk_bot/common/services/ManagerService.kt b/common/src/main/kotlin/space/mori/chzzk_bot/common/services/ManagerService.kt index 796ce59..1f913c1 100644 --- a/common/src/main/kotlin/space/mori/chzzk_bot/common/services/ManagerService.kt +++ b/common/src/main/kotlin/space/mori/chzzk_bot/common/services/ManagerService.kt @@ -1,5 +1,7 @@ package space.mori.chzzk_bot.common.services +import org.jetbrains.exposed.dao.load +import org.jetbrains.exposed.dao.with import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq import org.jetbrains.exposed.sql.and import org.jetbrains.exposed.sql.transactions.transaction @@ -23,14 +25,16 @@ object ManagerService { } fun updateManager(user: User, discordId: Long, name: String): Manager { - if (user.liveAlertGuild == null) - throw RuntimeException("${user.username} has no liveAlertGuild") + return transaction { + if (user.liveAlertGuild == null) + throw RuntimeException("${user.username} has no liveAlertGuild") - val manager = getUser(user.liveAlertGuild!!, discordId) ?: throw RuntimeException("$name isn't manager.") + val manager = getUser(user.liveAlertGuild!!, discordId) ?: throw RuntimeException("$name isn't manager.") - manager.lastUserName = name + manager.lastUserName = name - return manager + manager + } } fun getUser(guildId: Long, discordId: Long): Manager? { @@ -38,19 +42,19 @@ object ManagerService { val manager = Manager.find( (Managers.discordGuildId eq guildId) and (Managers.managerId eq discordId), ) - - val result = manager.firstOrNull() - - result?.eagerLoad() - result + .with(Manager::user) + .firstOrNull() + manager } } fun getAllUsers(guildId: Long): List { return transaction { - val result = Manager.find(Managers.discordGuildId eq guildId).toList() + val result = Manager.find(Managers.discordGuildId eq guildId) + .with(Manager::user) + .toList() - result.forEach { it.eagerLoad() } + result.forEach { it.load(Manager::user) } result } @@ -72,8 +76,4 @@ object ManagerService { managerRow } } - - fun Manager.eagerLoad() { - this.user - } } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index da20dc7..d7b3d85 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ kotlin.code.style=official group = space.mori -version = 1.1.1 +version = 1.1.2 org.gradle.jvmargs=-Dfile.encoding=UTF-8 org.gradle.console=plain