From e1b7b37c859f8f773cec359fc508f28bee425355 Mon Sep 17 00:00:00 2001 From: dalbodeule <11470513+dalbodeule@users.noreply.github.com> Date: Wed, 12 Jun 2024 22:35:24 +0900 Subject: [PATCH] add AddCommand.kt --- .idea/misc.xml | 5 +++ .../mori/chzzk_bot/chzzk/ChzzkHandler.kt | 14 +++++- .../mori/chzzk_bot/chzzk/MessageHandler.kt | 5 +++ .../chzzk_bot/discord/commands/AddCommand.kt | 45 +++++++++++++++++++ .../chzzk_bot/discord/commands/Register.kt | 2 +- 5 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 src/main/kotlin/space/mori/chzzk_bot/discord/commands/AddCommand.kt diff --git a/.idea/misc.xml b/.idea/misc.xml index 1c5d820..3bdf336 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,5 +1,10 @@ + + + + + diff --git a/src/main/kotlin/space/mori/chzzk_bot/chzzk/ChzzkHandler.kt b/src/main/kotlin/space/mori/chzzk_bot/chzzk/ChzzkHandler.kt index 783cb2c..cbb8925 100644 --- a/src/main/kotlin/space/mori/chzzk_bot/chzzk/ChzzkHandler.kt +++ b/src/main/kotlin/space/mori/chzzk_bot/chzzk/ChzzkHandler.kt @@ -29,9 +29,17 @@ object ChzzkHandler { handler.disable() } } + + internal fun reloadCommand(chzzkChannel: ChzzkChannel) { + val handler = handlers.firstOrNull { it.channel == chzzkChannel } + if (handler != null) + handler.reloadCommand() + else + throw RuntimeException("${chzzkChannel.channelName} doesn't have handler") + } } -class UserHandler(private val channel: ChzzkChannel, private val logger: Logger) { +class UserHandler(val channel: ChzzkChannel, private val logger: Logger) { private lateinit var messageHandler: MessageHandler private var listener: ChzzkChat = chzzk.chat(channel.channelId) @@ -66,4 +74,8 @@ class UserHandler(private val channel: ChzzkChannel, private val logger: Logger) internal fun disable() { listener.closeBlocking() } + + internal fun reloadCommand() { + messageHandler.reloadCommand() + } } \ No newline at end of file diff --git a/src/main/kotlin/space/mori/chzzk_bot/chzzk/MessageHandler.kt b/src/main/kotlin/space/mori/chzzk_bot/chzzk/MessageHandler.kt index bb4261c..0f552cb 100644 --- a/src/main/kotlin/space/mori/chzzk_bot/chzzk/MessageHandler.kt +++ b/src/main/kotlin/space/mori/chzzk_bot/chzzk/MessageHandler.kt @@ -6,6 +6,7 @@ import space.mori.chzzk_bot.services.UserService import xyz.r2turntrue.chzzk4j.chat.ChatMessage import xyz.r2turntrue.chzzk4j.chat.ChzzkChat import xyz.r2turntrue.chzzk4j.types.channel.ChzzkChannel + class MessageHandler( private val channel: ChzzkChannel, private val logger: Logger, @@ -14,6 +15,10 @@ class MessageHandler( private val commands = mutableMapOf Unit>() init { + reloadCommand() + } + + internal fun reloadCommand() { val user = UserService.getUser(channel.channelId) ?: throw RuntimeException("User not found. it's bug? ${channel.channelName} - ${channel.channelId}") val commands = CommandService.getCommands(user) diff --git a/src/main/kotlin/space/mori/chzzk_bot/discord/commands/AddCommand.kt b/src/main/kotlin/space/mori/chzzk_bot/discord/commands/AddCommand.kt new file mode 100644 index 0000000..2a079dc --- /dev/null +++ b/src/main/kotlin/space/mori/chzzk_bot/discord/commands/AddCommand.kt @@ -0,0 +1,45 @@ +package space.mori.chzzk_bot.discord.commands + +import net.dv8tion.jda.api.JDA +import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent +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.slf4j.LoggerFactory +import space.mori.chzzk_bot.discord.Command +import space.mori.chzzk_bot.discord.CommandInterface +import space.mori.chzzk_bot.services.CommandService +import space.mori.chzzk_bot.services.UserService + +@Command +object AddCommand : CommandInterface { + private val logger = LoggerFactory.getLogger(this::class.java) + override val name: String = "add" + override val command = Commands.slash(name, "명령어를 추가합니다.") + .addOptions(OptionData(OptionType.STRING, "label", "작동할 명령어를 입력하세요.", true)) + .addOptions(OptionData(OptionType.STRING, "content", "표시될 텍스트를 입력하세요.", true)) + + override fun run(event: SlashCommandInteractionEvent, bot: JDA) { + val label = event.getOption("label")?.asString + val content = event.getOption("content")?.asString + + if(label == null || content == null) { + event.hook.sendMessage("명령어와 텍스트는 필수 입력입니다.").queue() + return + } + + val user = UserService.getUser(event.user.idLong) + if(user == null) { + event.hook.sendMessage("치지직 계정을 찾을 수 없습니다.").queue() + return + } + + try { + CommandService.saveCommand(user, label, content) + event.hook.sendMessage("등록이 완료되었습니다. $label = $content").queue() + } catch (e: Exception) { + event.hook.sendMessage("에러가 발생했습니다.").queue() + logger.debug(e.stackTraceToString()) + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/space/mori/chzzk_bot/discord/commands/Register.kt b/src/main/kotlin/space/mori/chzzk_bot/discord/commands/Register.kt index 8e23a86..18aa558 100644 --- a/src/main/kotlin/space/mori/chzzk_bot/discord/commands/Register.kt +++ b/src/main/kotlin/space/mori/chzzk_bot/discord/commands/Register.kt @@ -42,7 +42,7 @@ object Register: CommandInterface { try { UserService.saveUser(chzzkChannel.channelName, chzzkChannel.channelId, event.user.idLong) ChzzkHandler.addUser(chzzkChannel) - event.hook.sendMessage("등록이 완료되었습니다. ${chzzkChannel.channelId} - ${chzzkChannel.channelName}") + event.hook.sendMessage("등록이 완료되었습니다. `${chzzkChannel.channelId}` - `${chzzkChannel.channelName}`") } catch(e: Exception) { event.hook.sendMessage("에러가 발생했습니다.").queue() logger.debug(e.stackTraceToString())