41 lines
1.8 KiB
Kotlin
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())
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|