add AddCommand.kt

This commit is contained in:
dalbodeule 2024-06-12 22:35:24 +09:00
parent 4b7fe25b21
commit e1b7b37c85
No known key found for this signature in database
GPG Key ID: EFA860D069C9FA65
5 changed files with 69 additions and 2 deletions

5
.idea/misc.xml generated
View File

@ -1,5 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="EntryPointsManager">
<list size="1">
<item index="0" class="java.lang.String" itemvalue="space.mori.chzzk_bot.discord.Command" />
</list>
</component>
<component name="ExternalStorageConfigurationManager" enabled="true" /> <component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="FrameworkDetectionExcludesConfiguration"> <component name="FrameworkDetectionExcludesConfiguration">
<file type="web" url="file://$PROJECT_DIR$" /> <file type="web" url="file://$PROJECT_DIR$" />

View File

@ -29,9 +29,17 @@ object ChzzkHandler {
handler.disable() 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 lateinit var messageHandler: MessageHandler
private var listener: ChzzkChat = chzzk.chat(channel.channelId) 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() { internal fun disable() {
listener.closeBlocking() listener.closeBlocking()
} }
internal fun reloadCommand() {
messageHandler.reloadCommand()
}
} }

View File

@ -6,6 +6,7 @@ import space.mori.chzzk_bot.services.UserService
import xyz.r2turntrue.chzzk4j.chat.ChatMessage import xyz.r2turntrue.chzzk4j.chat.ChatMessage
import xyz.r2turntrue.chzzk4j.chat.ChzzkChat import xyz.r2turntrue.chzzk4j.chat.ChzzkChat
import xyz.r2turntrue.chzzk4j.types.channel.ChzzkChannel import xyz.r2turntrue.chzzk4j.types.channel.ChzzkChannel
class MessageHandler( class MessageHandler(
private val channel: ChzzkChannel, private val channel: ChzzkChannel,
private val logger: Logger, private val logger: Logger,
@ -14,6 +15,10 @@ class MessageHandler(
private val commands = mutableMapOf<String, () -> Unit>() private val commands = mutableMapOf<String, () -> Unit>()
init { init {
reloadCommand()
}
internal fun reloadCommand() {
val user = UserService.getUser(channel.channelId) val user = UserService.getUser(channel.channelId)
?: throw RuntimeException("User not found. it's bug? ${channel.channelName} - ${channel.channelId}") ?: throw RuntimeException("User not found. it's bug? ${channel.channelName} - ${channel.channelId}")
val commands = CommandService.getCommands(user) val commands = CommandService.getCommands(user)

View File

@ -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())
}
}
}

View File

@ -42,7 +42,7 @@ object Register: CommandInterface {
try { try {
UserService.saveUser(chzzkChannel.channelName, chzzkChannel.channelId, event.user.idLong) UserService.saveUser(chzzkChannel.channelName, chzzkChannel.channelId, event.user.idLong)
ChzzkHandler.addUser(chzzkChannel) ChzzkHandler.addUser(chzzkChannel)
event.hook.sendMessage("등록이 완료되었습니다. ${chzzkChannel.channelId} - ${chzzkChannel.channelName}") event.hook.sendMessage("등록이 완료되었습니다. `${chzzkChannel.channelId}` - `${chzzkChannel.channelName}`")
} catch(e: Exception) { } catch(e: Exception) {
event.hook.sendMessage("에러가 발생했습니다.").queue() event.hook.sendMessage("에러가 발생했습니다.").queue()
logger.debug(e.stackTraceToString()) logger.debug(e.stackTraceToString())