refactor: Adjust koin module API

This commit is contained in:
Ahmad Ansori Palembani 2025-05-26 07:16:02 +07:00
parent 96c85a351e
commit 1a3e8a3335
Signed by: null2264
GPG key ID: BA64F8B60AF3EFB6
3 changed files with 17 additions and 8 deletions

View file

@ -1,6 +1,7 @@
package io.github.null2264.tsukumogami.bot package io.github.null2264.tsukumogami.bot
import co.touchlab.kermit.Logger 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.bot.core.module.generalModule
import io.github.null2264.tsukumogami.core.bot import io.github.null2264.tsukumogami.core.bot
@ -14,5 +15,7 @@ suspend fun main() {
prefixes("src!", "mm!") // mm! for backwards compatibility prefixes("src!", "mm!") // mm! for backwards compatibility
modules(generalModule) modules(generalModule)
koinModules(appModule)
}.start() }.start()
} }

View file

@ -25,8 +25,8 @@ class BotBuilder internal constructor(
} }
} }
internal var beforeKoinSetup: () -> Unit = {} internal var earlyKoinModules = mutableListOf<KoinModule>()
internal var afterKoinSetup: () -> Unit = {} internal var koinModules = mutableListOf<KoinModule>()
fun modules(vararg modules: BotModule) { fun modules(vararg modules: BotModule) {
modules.forEach(bot::addModule) modules.forEach(bot::addModule)
@ -36,12 +36,12 @@ class BotBuilder internal constructor(
prefixes.forEach(bot::addPrefix) prefixes.forEach(bot::addPrefix)
} }
fun beforeKoinSetup(declaration: () -> Unit) { fun earlyKoinModules(vararg modules: KoinModule) {
beforeKoinSetup = declaration earlyKoinModules.addAll(modules)
} }
fun afterKoinSetup(declaration: () -> Unit) { fun koinModules(vararg modules: KoinModule) {
afterKoinSetup = declaration koinModules.addAll(modules)
} }
} }
@ -54,13 +54,13 @@ suspend fun bot(clazz: KFunction<Bot> = ::Bot, declaration: BotBuilder.() -> Uni
val holder = BotBuilder(bot) val holder = BotBuilder(bot)
declaration(holder) declaration(holder)
holder.beforeKoinSetup.invoke() holder.earlyKoinModules.forEach(::loadModule)
val kord = holder.kordBuilder(holder.token) val kord = holder.kordBuilder(holder.token)
loadModule { single { kord } bind Kord::class } loadModule { single { kord } bind Kord::class }
loadModule { single { bot } bind Bot::class } loadModule { single { bot } bind Bot::class }
holder.afterKoinSetup.invoke() holder.koinModules.forEach(::loadModule)
return holder.bot return holder.bot
} }

View file

@ -15,3 +15,9 @@ fun loadModule(
return moduleObj return moduleObj
} }
fun loadModule(module: Module): Module {
TsukumogamiKoinContext.loadKoinModules(module)
return module
}