diff --git a/bot/src/main/kotlin/io/github/null2264/tsukumogami/bot/Main.kt b/bot/src/main/kotlin/io/github/null2264/tsukumogami/bot/Main.kt index 0b1b878..f36f020 100644 --- a/bot/src/main/kotlin/io/github/null2264/tsukumogami/bot/Main.kt +++ b/bot/src/main/kotlin/io/github/null2264/tsukumogami/bot/Main.kt @@ -1,10 +1,8 @@ package io.github.null2264.tsukumogami.bot import co.touchlab.kermit.Logger -import io.github.null2264.tsukumogami.bot.core.di.appModule import io.github.null2264.tsukumogami.bot.core.module.generalModule import io.github.null2264.tsukumogami.core.bot -import org.koin.core.context.GlobalContext.startKoin suspend fun main() { diff --git a/bot/src/main/kotlin/io/github/null2264/tsukumogami/bot/core/module/GeneralModule.kt b/bot/src/main/kotlin/io/github/null2264/tsukumogami/bot/core/module/GeneralModule.kt index 3b0176e..ef0f70e 100644 --- a/bot/src/main/kotlin/io/github/null2264/tsukumogami/bot/core/module/GeneralModule.kt +++ b/bot/src/main/kotlin/io/github/null2264/tsukumogami/bot/core/module/GeneralModule.kt @@ -1,5 +1,6 @@ package io.github.null2264.tsukumogami.bot.core.module +import dev.kord.core.entity.effectiveName import io.github.null2264.tsukumogami.bot.core.module.arguments.Test2Arguments import io.github.null2264.tsukumogami.bot.core.module.arguments.TestArguments import io.github.null2264.tsukumogami.core.module.api.botModules @@ -18,6 +19,7 @@ val generalModule = botModules("General") { groups("group") { commands("test", alias = setOf("t")) { ctx -> ctx.reply("Hello world ${ctx.command?.module?.name}") + ctx.reply("Bot: ${ctx.bot.self().effectiveName}") } } } diff --git a/core/src/main/kotlin/io/github/null2264/tsukumogami/core/Bot.kt b/core/src/main/kotlin/io/github/null2264/tsukumogami/core/Bot.kt index 82c03b8..8ba2790 100644 --- a/core/src/main/kotlin/io/github/null2264/tsukumogami/core/Bot.kt +++ b/core/src/main/kotlin/io/github/null2264/tsukumogami/core/Bot.kt @@ -3,6 +3,7 @@ package io.github.null2264.tsukumogami.core import co.touchlab.kermit.Logger import dev.kord.core.Kord import dev.kord.core.entity.Message +import dev.kord.core.entity.User import dev.kord.core.event.gateway.ReadyEvent import dev.kord.core.event.message.MessageCreateEvent import dev.kord.core.on @@ -28,6 +29,8 @@ open class Bot internal constructor(): IGroup, TsukumogamiKoinComponent { internal lateinit var token: String override val allCommands: MutableMap = mutableMapOf() + suspend fun self() = client.getSelf().asUser() + fun addModule(module: BotModule) { modules[module.name] = module.install(this) } @@ -75,7 +78,7 @@ open class Bot internal constructor(): IGroup, TsukumogamiKoinComponent { private fun getContext(message: Message): Context { val parsed = message.content.parsePrefixAndCommand() - val context = Context(this, message, parsed?.first) + val context = Context(message, parsed?.first) context.command = getCommand(parsed?.second) if (context.command != null) context.invokedWith = parsed?.second return context diff --git a/core/src/main/kotlin/io/github/null2264/tsukumogami/core/BotBuilder.kt b/core/src/main/kotlin/io/github/null2264/tsukumogami/core/BotBuilder.kt index 51fc4f7..a86de89 100644 --- a/core/src/main/kotlin/io/github/null2264/tsukumogami/core/BotBuilder.kt +++ b/core/src/main/kotlin/io/github/null2264/tsukumogami/core/BotBuilder.kt @@ -9,6 +9,7 @@ import io.github.null2264.tsukumogami.core.koin.TsukumogamiKoinContext import io.github.null2264.tsukumogami.core.module.BotModule import kotlin.reflect.KFunction import kotlinx.coroutines.runBlocking +import org.koin.core.module.Module as KoinModule import org.koin.dsl.bind class BotBuilder internal constructor( @@ -24,6 +25,9 @@ class BotBuilder internal constructor( } } + internal var beforeKoinSetup: () -> Unit = {} + internal var afterKoinSetup: () -> Unit = {} + fun modules(vararg modules: BotModule) { modules.forEach(bot::addModule) } @@ -31,9 +35,17 @@ class BotBuilder internal constructor( fun prefixes(vararg prefixes: String) { prefixes.forEach(bot::addPrefix) } + + fun beforeKoinSetup(declaration: () -> Unit) { + beforeKoinSetup = declaration + } + + fun afterKoinSetup(declaration: () -> Unit) { + afterKoinSetup = declaration + } } -fun bot(clazz: KFunction = ::Bot, declaration: BotBuilder.() -> Unit): Bot { +suspend fun bot(clazz: KFunction = ::Bot, declaration: BotBuilder.() -> Unit): Bot { if (TsukumogamiKoinContext.getOrNull() == null) TsukumogamiKoinContext.startKoin { } @@ -42,11 +54,13 @@ fun bot(clazz: KFunction = ::Bot, declaration: BotBuilder.() -> Unit): Bot val holder = BotBuilder(bot) declaration(holder) - val kord = runBlocking { - holder.kordBuilder(holder.token) - } + holder.beforeKoinSetup.invoke() + + val kord = holder.kordBuilder(holder.token) loadModule { single { kord } bind Kord::class } loadModule { single { bot } bind Bot::class } + holder.afterKoinSetup.invoke() + return holder.bot } diff --git a/core/src/main/kotlin/io/github/null2264/tsukumogami/core/Context.kt b/core/src/main/kotlin/io/github/null2264/tsukumogami/core/Context.kt index bb71633..3ef48b3 100644 --- a/core/src/main/kotlin/io/github/null2264/tsukumogami/core/Context.kt +++ b/core/src/main/kotlin/io/github/null2264/tsukumogami/core/Context.kt @@ -5,15 +5,18 @@ import dev.kord.core.entity.Message import dev.kord.rest.builder.message.AllowedMentionsBuilder import dev.kord.rest.builder.message.allowedMentions import io.github.null2264.tsukumogami.core.commands.Command +import io.github.null2264.tsukumogami.core.koin.TsukumogamiKoinComponent +import org.koin.core.component.inject class Context( - val bot: Bot, val message: Message, /** * The prefix that used to invoke the command */ val prefix: String?, -) { +) : TsukumogamiKoinComponent { + + val bot: Bot by inject() /** * The user that invoked the command diff --git a/core/src/main/kotlin/io/github/null2264/tsukumogami/core/commands/annotation/Command.kt b/core/src/main/kotlin/io/github/null2264/tsukumogami/core/commands/annotation/Command.kt deleted file mode 100644 index 9756178..0000000 --- a/core/src/main/kotlin/io/github/null2264/tsukumogami/core/commands/annotation/Command.kt +++ /dev/null @@ -1,12 +0,0 @@ -package io.github.null2264.tsukumogami.core.commands.annotation - -/** - * Annotation to tag a function as command - * - * @param name the command's name - * @param description the command's description - * @param help the command's extended description (a more detailed description) - */ -@Retention(AnnotationRetention.RUNTIME) -@Target(AnnotationTarget.FUNCTION) -annotation class Command(val name: String = "", val description: String = "", val help: String = "")