core/targets/telegram/loader/server/src/jvmMain/kotlin/dev/inmo/postssystem/targets/telegram/loader/server/TelegramTargetServerModuleL...

41 lines
1.8 KiB
Kotlin

package dev.inmo.postssystem.targets.telegram.loader.server
import dev.inmo.postssystem.features.common.common.singleWithRandomQualifier
import dev.inmo.postssystem.features.common.server.ServerModuleLoader
import dev.inmo.postssystem.features.content.common.ContentSerializersModuleConfigurator
import dev.inmo.postssystem.features.publication.server.PublicationTarget
import dev.inmo.postssystem.targets.telegram.content.polls.common.PollContent
import dev.inmo.postssystem.targets.telegram.publication.server.PublicationTargetTelegram
import dev.inmo.tgbotapi.bot.TelegramBot
import dev.inmo.tgbotapi.types.ChatId
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonObject
import org.koin.core.module.Module
import org.koin.core.qualifier.StringQualifier
/**
* Expects to get a config from a field "telegram" of your config
*/
class TelegramTargetServerModuleLoader : ServerModuleLoader {
override fun Module.load(config: JsonObject) {
val configJson = config["telegram"]
val postingChatIdQualifier = StringQualifier("telegram_postingChatId")
configJson ?.let {
single<SubConfig> { get<Json>().decodeFromJsonElement(SubConfig.serializer(), configJson) }
single<TelegramBot> { get<SubConfig>().bot }
single<ChatId>(postingChatIdQualifier) { get<SubConfig>().targetChatId }
singleWithRandomQualifier<PublicationTarget> {
PublicationTargetTelegram(get(), get(postingChatIdQualifier))
}
singleWithRandomQualifier<ContentSerializersModuleConfigurator.Element> {
ContentSerializersModuleConfigurator.Element {
subclass(PollContent::class, PollContent.serializer())
}
}
}
}
}