fix: command register function fixed

This commit is contained in:
Project_IO 2024-09-19 22:31:06 +09:00
parent 0e8fdee886
commit 34426e5975
8 changed files with 76 additions and 30 deletions

View file

@ -92,35 +92,21 @@ class CommandHandler(val guildId: Long = 0L) : ListenerAdapter() {
if (command is UserContext) { if (command is UserContext) {
if (guild == null) { if (guild == null) {
jda.updateCommands().addCommands( jda.upsertCommand(Commands.user(data.name)).queue()
Commands.context(Command.Type.USER, data.name),
Commands.message(data.name)
).queue()
println("Register User Context Command: /${data.name}") println("Register User Context Command: /${data.name}")
} else { } else {
guild.updateCommands().addCommands( guild.upsertCommand(Commands.user(data.name)).queue()
Commands.context(Command.Type.USER, data.name),
Commands.message(data.name)
).queue()
println("Register '${guild.id}' Guild's User Context Command: /${data.name}") println("Register '${guild.id}' Guild's User Context Command: /${data.name}")
} }
} }
if (command is MessageContext) { if (command is MessageContext) {
if (guild == null) { if (guild == null) {
jda.updateCommands().addCommands( jda.upsertCommand(Commands.message(data.name))
Commands.context(Command.Type.MESSAGE, data.name),
Commands.message(data.name)
)
println("Register Message Context Command: /${data.name}") println("Register Message Context Command: /${data.name}")
} else { } else {
guild.updateCommands().addCommands( guild.upsertCommand(Commands.message(data.name))
Commands.context(Command.Type.MESSAGE, data.name),
Commands.message(data.name)
)
println("Register '${guild.id}' Guild's Message Context Command: /${data.name}") println("Register '${guild.id}' Guild's Message Context Command: /${data.name}")
} }
} }

View file

@ -1,22 +1,25 @@
package net.projecttl.p.x32 package net.projecttl.p.x32
import net.dv8tion.jda.api.JDA import net.dv8tion.jda.api.JDA
import net.projecttl.p.x32.command.Reload
import net.projecttl.p.x32.config.DefaultConfig import net.projecttl.p.x32.config.DefaultConfig
import net.projecttl.p.x32.func.loadDefault import net.projecttl.p.x32.func.loadDefault
import net.projecttl.p.x32.handler.Ready import net.projecttl.p.x32.func.handler.Ready
import net.projecttl.p.x32.kernel.CoreKernel import net.projecttl.p.x32.kernel.CoreKernel
import org.slf4j.Logger import org.slf4j.Logger
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
lateinit var jda: JDA lateinit var jda: JDA
lateinit var kernel: CoreKernel
val logger: Logger = LoggerFactory.getLogger(Px32::class.java) val logger: Logger = LoggerFactory.getLogger(Px32::class.java)
fun main() { fun main() {
println("Px32 version v${DefaultConfig.version}") println("Px32 version v${DefaultConfig.version}")
val kernel = CoreKernel(System.getenv("TOKEN")) kernel = CoreKernel(System.getenv("TOKEN"))
val handler = kernel.getGlobalCommandHandler()
kernel.addHandler(Ready) kernel.addHandler(Ready)
val handler = kernel.getGlobalCommandHandler() handler.addCommand(Reload)
loadDefault(handler) loadDefault(handler)
jda = kernel.build() jda = kernel.build()

View file

@ -0,0 +1,23 @@
package net.projecttl.p.x32.command
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent
import net.dv8tion.jda.api.interactions.commands.build.CommandData
import net.dv8tion.jda.internal.interactions.CommandDataImpl
import net.projecttl.p.x32.api.command.GlobalCommand
import net.projecttl.p.x32.kernel
object Reload : GlobalCommand {
override val data = CommandData.fromData(CommandDataImpl("reload", "플러그인을 다시 불러 옵니다").toData())
override suspend fun execute(ev: SlashCommandInteractionEvent) {
try {
kernel.reload()
} catch (ex: Exception) {
ex.printStackTrace()
ev.reply(":warning: 플러그인을 다시 불러오는 도중에 오류가 발생 했어요. 자세한 내용은 콘솔을 확인해 주세요!").queue()
return
}
ev.reply(":white_check_mark: 플러그인을 다시 불러 왔어요!\n불러온 플러그인 수: ${kernel.plugins().size}").queue()
}
}

View file

@ -3,6 +3,7 @@ package net.projecttl.p.x32.kernel
import net.dv8tion.jda.api.JDA import net.dv8tion.jda.api.JDA
import net.dv8tion.jda.api.JDABuilder import net.dv8tion.jda.api.JDABuilder
import net.dv8tion.jda.api.hooks.ListenerAdapter import net.dv8tion.jda.api.hooks.ListenerAdapter
import net.projecttl.p.x32.api.Plugin
import net.projecttl.p.x32.api.command.CommandHandler import net.projecttl.p.x32.api.command.CommandHandler
import net.projecttl.p.x32.logger import net.projecttl.p.x32.logger
@ -23,6 +24,10 @@ class CoreKernel(token: String) {
handlers.remove(handler) handlers.remove(handler)
} }
fun plugins(): List<Plugin> {
return PluginLoader.getPlugins().map { it.value }
}
fun build(): JDA { fun build(): JDA {
handlers.map { handlers.map {
builder.addEventListeners(it) builder.addEventListeners(it)
@ -54,4 +59,17 @@ class CoreKernel(token: String) {
return jda return jda
} }
}
fun reload() {
val plugins = PluginLoader.getPlugins()
plugins.forEach { (c, p) ->
logger.info("Reload plugin ${c.name} v${c.version}")
p.destroy()
}
PluginLoader.load()
plugins.forEach { (_, p) ->
p.onLoad()
}
}
}

View file

@ -17,6 +17,10 @@ object PluginLoader {
} }
} }
fun getPlugins(): Map<PluginConfig, Plugin> {
return plugins.toMap()
}
fun load() { fun load() {
parentDir.listFiles()?.forEach { file -> parentDir.listFiles()?.forEach { file ->
if (file.name.endsWith(".jar")) { if (file.name.endsWith(".jar")) {
@ -45,10 +49,6 @@ object PluginLoader {
} }
} }
fun getPlugins(): Map<PluginConfig, Plugin> {
return plugins.toMap()
}
fun destroy() { fun destroy() {
plugins.forEach { (config, plugin) -> plugins.forEach { (config, plugin) ->
logger.info("disable ${config.name} plugin...") logger.info("disable ${config.name} plugin...")
@ -61,4 +61,4 @@ object PluginLoader {
} }
} }
} }
} }

View file

@ -2,9 +2,11 @@ package net.projecttl.p.x32.func
import net.projecttl.p.x32.api.command.CommandHandler import net.projecttl.p.x32.api.command.CommandHandler
import net.projecttl.p.x32.func.command.Avatar import net.projecttl.p.x32.func.command.Avatar
import net.projecttl.p.x32.func.command.MsgLength
import net.projecttl.p.x32.func.command.Ping import net.projecttl.p.x32.func.command.Ping
fun loadDefault(handler: CommandHandler) = with(handler) { fun loadDefault(handler: CommandHandler) = with(handler) {
addCommand(Avatar) addCommand(Avatar)
addCommand(MsgLength)
addCommand(Ping) addCommand(Ping)
} }

View file

@ -0,0 +1,15 @@
package net.projecttl.p.x32.func.command
import net.dv8tion.jda.api.events.interaction.command.MessageContextInteractionEvent
import net.dv8tion.jda.api.interactions.commands.build.CommandData
import net.dv8tion.jda.internal.interactions.CommandDataImpl
import net.projecttl.p.x32.api.command.MessageContext
object MsgLength : MessageContext {
override val data = CommandData.fromData(CommandDataImpl("length", "메시지의 길이를 확인 합니다.").toData())
override suspend fun execute(ev: MessageContextInteractionEvent) {
val target = ev.target
ev.reply("${target.jumpUrl} 메시지의 길이:\n\t${target.contentRaw.split("\\s+").size}").queue()
}
}

View file

@ -1,11 +1,10 @@
package net.projecttl.p.x32.handler package net.projecttl.p.x32.func.handler
import net.dv8tion.jda.api.events.session.ReadyEvent import net.dv8tion.jda.api.events.session.ReadyEvent
import net.dv8tion.jda.api.hooks.ListenerAdapter import net.dv8tion.jda.api.hooks.ListenerAdapter
import net.projecttl.p.x32.logger
object Ready : ListenerAdapter() { object Ready : ListenerAdapter() {
override fun onReady(ev: ReadyEvent) { override fun onReady(ev: ReadyEvent) {
logger.info("Logged in as ${ev.jda.selfUser.asTag}") println("Logged in as ${ev.jda.selfUser.asTag}")
} }
} }