mirror of
https://github.com/devproje/px32-bot.git
synced 2024-11-26 02:33:05 +00:00
feat: middle save
This commit is contained in:
parent
e9a57c9f6a
commit
bc4c985735
14 changed files with 146 additions and 48 deletions
|
@ -2,7 +2,7 @@ kotlin.code.style=official
|
|||
org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8
|
||||
|
||||
group=net.projecttl
|
||||
version=0.1.0-SNAPSHOT
|
||||
version=0.2.0-SNAPSHOT
|
||||
|
||||
ktor_version=2.3.12
|
||||
log4j_version=2.23.1
|
||||
|
|
|
@ -8,6 +8,13 @@ import net.dv8tion.jda.api.events.interaction.command.UserContextInteractionEven
|
|||
import net.dv8tion.jda.api.hooks.ListenerAdapter
|
||||
import net.dv8tion.jda.api.interactions.commands.build.Commands
|
||||
|
||||
fun commandHandler(block: (CommandHandler) -> Unit): CommandHandler {
|
||||
val handler = CommandHandler()
|
||||
block.invoke(handler)
|
||||
|
||||
return handler
|
||||
}
|
||||
|
||||
class CommandHandler(val guildId: Long = 0L) : ListenerAdapter() {
|
||||
private val commands = mutableListOf<CommandExecutor>()
|
||||
|
||||
|
@ -106,10 +113,10 @@ class CommandHandler(val guildId: Long = 0L) : ListenerAdapter() {
|
|||
|
||||
if (command is MessageContext) {
|
||||
if (guild == null) {
|
||||
jda.upsertCommand(Commands.message(data.name))
|
||||
jda.upsertCommand(Commands.message(data.name)).queue()
|
||||
println("Register Message Context Command: /${data.name}")
|
||||
} else {
|
||||
guild.upsertCommand(Commands.message(data.name))
|
||||
guild.upsertCommand(Commands.message(data.name)).queue()
|
||||
println("Register '${guild.id}' Guild's Message Context Command: /${data.name}")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,9 +14,7 @@ repositories {
|
|||
|
||||
dependencies {
|
||||
implementation(project(":${rootProject.name}-api"))
|
||||
implementation(project(":px32-bot-module"))
|
||||
testImplementation(platform("org.junit:junit-bom:5.10.0"))
|
||||
testImplementation("org.junit.jupiter:junit-jupiter")
|
||||
implementation(project(":${rootProject.name}-module"))
|
||||
}
|
||||
|
||||
tasks {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package net.projecttl.p.x32
|
||||
|
||||
import net.dv8tion.jda.api.JDA
|
||||
import net.projecttl.p.x32.command.Info
|
||||
import net.projecttl.p.x32.command.PluginCommand
|
||||
import net.projecttl.p.x32.command.Reload
|
||||
import net.projecttl.p.x32.config.Config
|
||||
|
@ -25,6 +26,7 @@ fun main() {
|
|||
kernel = CoreKernel(Config.token)
|
||||
val handler = kernel.getCommandContainer()
|
||||
|
||||
handler.addCommand(Info)
|
||||
handler.addCommand(Reload)
|
||||
handler.addCommand(PluginCommand)
|
||||
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
package net.projecttl.p.x32.command
|
||||
|
||||
import net.dv8tion.jda.api.JDAInfo
|
||||
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.config.DefaultConfig
|
||||
import net.projecttl.p.x32.kernel.PluginLoader
|
||||
import java.lang.management.ManagementFactory
|
||||
|
||||
object Info : GlobalCommand {
|
||||
override val data: CommandData = CommandData.fromData(
|
||||
CommandDataImpl("info","봇의 정보를 표시 합니다").toData()
|
||||
)
|
||||
|
||||
override suspend fun execute(ev: SlashCommandInteractionEvent) {
|
||||
val rb = ManagementFactory.getRuntimeMXBean()
|
||||
val r = Runtime.getRuntime()
|
||||
|
||||
val size = PluginLoader.getPlugins().size
|
||||
|
||||
val info = """
|
||||
Px32Bot v${DefaultConfig.version}, JDA `v${JDAInfo.VERSION}`,
|
||||
`Java ${System.getProperty("java.version")}` and `Kotlin ${KotlinVersion.CURRENT}` System on `${System.getProperty("os.name")}`
|
||||
|
||||
Process Started on <t:${(System.currentTimeMillis() - rb.uptime)/ 1000L}:R>
|
||||
Bot Process Running on PID `${rb.pid}`
|
||||
|
||||
Assigned `${r.maxMemory() / 1048576}MB` of Max Memories at this Bot
|
||||
Using `${(r.totalMemory() - r.freeMemory()) / 1048576}MB` at this Bot
|
||||
|
||||
Total $size plugin${if (size > 1) "s" else ""} loaded
|
||||
""".trimIndent()
|
||||
|
||||
ev.reply(info).queue()
|
||||
}
|
||||
}
|
|
@ -3,22 +3,31 @@ package net.projecttl.p.x32.kernel
|
|||
import net.dv8tion.jda.api.JDA
|
||||
import net.dv8tion.jda.api.JDABuilder
|
||||
import net.dv8tion.jda.api.hooks.ListenerAdapter
|
||||
import net.dv8tion.jda.api.requests.GatewayIntent
|
||||
import net.projecttl.p.x32.api.Plugin
|
||||
import net.projecttl.p.x32.api.command.CommandHandler
|
||||
import net.projecttl.p.x32.config.Config
|
||||
import net.projecttl.p.x32.func.General
|
||||
import net.projecttl.p.x32.func.BundleModule
|
||||
import net.projecttl.p.x32.jda
|
||||
import net.projecttl.p.x32.logger
|
||||
|
||||
class CoreKernel(token: String) {
|
||||
var memLock = false
|
||||
private set
|
||||
private val builder = JDABuilder.createDefault(token)
|
||||
private val builder = JDABuilder.createDefault(token, listOf(
|
||||
GatewayIntent.GUILD_PRESENCES,
|
||||
GatewayIntent.GUILD_MEMBERS,
|
||||
GatewayIntent.MESSAGE_CONTENT,
|
||||
GatewayIntent.GUILD_VOICE_STATES,
|
||||
GatewayIntent.GUILD_EMOJIS_AND_STICKERS,
|
||||
GatewayIntent.SCHEDULED_EVENTS
|
||||
))
|
||||
private val handlers = mutableListOf<ListenerAdapter>()
|
||||
private val commandContainer = CommandHandler()
|
||||
|
||||
private fun include() {
|
||||
if (Config.bundle) {
|
||||
val b = General()
|
||||
val b = BundleModule()
|
||||
PluginLoader.putModule(b.config, b)
|
||||
}
|
||||
}
|
||||
|
@ -50,6 +59,7 @@ class CoreKernel(token: String) {
|
|||
}
|
||||
|
||||
handlers.map {
|
||||
logger.info("Load event listener: ${it::class.simpleName}")
|
||||
builder.addEventListeners(it)
|
||||
}
|
||||
builder.addEventListeners(commandContainer)
|
||||
|
|
|
@ -2,8 +2,8 @@ plugins {
|
|||
id("java")
|
||||
}
|
||||
|
||||
group = "net.projecttl"
|
||||
version = "0.1.0-SNAPSHOT"
|
||||
group = rootProject.group
|
||||
version = rootProject.version
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
package net.projecttl.p.x32.func
|
||||
|
||||
import net.projecttl.p.x32.api.Plugin
|
||||
import net.projecttl.p.x32.api.command.commandHandler
|
||||
import net.projecttl.p.x32.func.command.*
|
||||
import net.projecttl.p.x32.func.handler.Ready
|
||||
|
||||
lateinit var instance: BundleModule
|
||||
|
||||
class BundleModule : Plugin() {
|
||||
override fun onLoad() {
|
||||
instance = this
|
||||
|
||||
logger.info("Created by Project_IO")
|
||||
logger.info("Hello! This is Px32's general module!")
|
||||
|
||||
addHandler(Ready)
|
||||
addHandler(commandHandler { handler ->
|
||||
handler.addCommand(Avatar)
|
||||
handler.addCommand(MsgLength)
|
||||
handler.addCommand(MsgPurge)
|
||||
handler.addCommand(Ping)
|
||||
})
|
||||
}
|
||||
|
||||
override fun destroy() {
|
||||
logger.info("bye!")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1,14 +1,21 @@
|
|||
package net.projecttl.p.x32.func
|
||||
|
||||
import java.io.File
|
||||
import java.io.FileInputStream
|
||||
import java.util.*
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
object Conf {
|
||||
private fun useDef(): DefDel {
|
||||
return DefDel()
|
||||
}
|
||||
|
||||
private fun useConf(): ConfDel {
|
||||
return ConfDel()
|
||||
}
|
||||
|
||||
val owner: String by useConf()
|
||||
val version: String by useDef()
|
||||
}
|
||||
|
||||
private class ConfDel {
|
||||
|
@ -23,3 +30,15 @@ private class ConfDel {
|
|||
return props.getProperty(property.name).toString()
|
||||
}
|
||||
}
|
||||
|
||||
class DefDel {
|
||||
private val props = Properties()
|
||||
|
||||
init {
|
||||
props.load(this.javaClass.getResourceAsStream("/default.properties"))
|
||||
}
|
||||
|
||||
operator fun getValue(thisRef: Any?, property: KProperty<*>): String {
|
||||
return props.getProperty(property.name).toString()
|
||||
}
|
||||
}
|
|
@ -1,33 +0,0 @@
|
|||
package net.projecttl.p.x32.func
|
||||
|
||||
import net.projecttl.p.x32.api.Plugin
|
||||
import net.projecttl.p.x32.api.command.CommandHandler
|
||||
import net.projecttl.p.x32.func.command.Avatar
|
||||
import net.projecttl.p.x32.func.command.MsgLength
|
||||
import net.projecttl.p.x32.func.command.MsgPurge
|
||||
import net.projecttl.p.x32.func.command.Ping
|
||||
import net.projecttl.p.x32.func.handler.Ready
|
||||
|
||||
|
||||
class General : Plugin() {
|
||||
override fun onLoad() {
|
||||
logger.info("Created by Project_IO")
|
||||
logger.info("Hello! This is Px32's general module!")
|
||||
|
||||
addHandler(Ready)
|
||||
addHandler(with(CommandHandler()) {
|
||||
addCommand(Avatar)
|
||||
addCommand(MsgLength)
|
||||
addCommand(Ping)
|
||||
addCommand(MsgPurge)
|
||||
|
||||
this
|
||||
})
|
||||
}
|
||||
|
||||
override fun destroy() {
|
||||
logger.info("bye!")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -10,6 +10,6 @@ object MsgLength : MessageContext {
|
|||
|
||||
override suspend fun execute(ev: MessageContextInteractionEvent) {
|
||||
val target = ev.target
|
||||
ev.reply("${target.jumpUrl} 메시지의 길이:\n\t${target.contentRaw.split("\\s+").size}").queue()
|
||||
ev.reply("${target.jumpUrl} 메시지의 길이: ${target.contentRaw.length}").queue()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package net.projecttl.p.x32.func.command
|
||||
|
||||
import Conf
|
||||
import net.projecttl.p.x32.func.Conf
|
||||
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.CommandData
|
||||
|
|
|
@ -1,10 +1,36 @@
|
|||
package net.projecttl.p.x32.func.handler
|
||||
|
||||
import kotlinx.coroutines.DelicateCoroutinesApi
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import net.dv8tion.jda.api.OnlineStatus
|
||||
import net.dv8tion.jda.api.entities.Activity
|
||||
import net.dv8tion.jda.api.events.session.ReadyEvent
|
||||
import net.dv8tion.jda.api.hooks.ListenerAdapter
|
||||
import net.projecttl.p.x32.func.Conf
|
||||
import net.projecttl.p.x32.func.instance
|
||||
|
||||
object Ready : ListenerAdapter() {
|
||||
@OptIn(DelicateCoroutinesApi::class)
|
||||
override fun onReady(ev: ReadyEvent) {
|
||||
val list = listOf(
|
||||
Activity.playing("${ev.jda.selfUser.name} v${Conf.version}"),
|
||||
Activity.listening("${ev.guildTotalCount}개의 서버와 함께 서비스 하는 중")
|
||||
)
|
||||
println("Logged in as ${ev.jda.selfUser.asTag}")
|
||||
|
||||
GlobalScope.launch {
|
||||
do {
|
||||
list.forEach { act ->
|
||||
try {
|
||||
ev.jda.presence.setPresence(OnlineStatus.ONLINE, act)
|
||||
} catch (ex: Exception) {
|
||||
instance.logger.error(ex.message)
|
||||
}
|
||||
delay(1000 * 10L)
|
||||
}
|
||||
} while (true)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "${project.name}",
|
||||
"name": "bundle-module",
|
||||
"version": "${project.version}",
|
||||
"main": "net.projecttl.p.x32.func.General"
|
||||
"main": "net.projecttl.p.x32.func.BundleModule"
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue