package dev.inmo.postssystem.targets.telegram.loader.server import dev.inmo.postssystem.features.common.common.singleWithRandomQualifier import dev.inmo.postssystem.features.common.server.sessions.ModuleLoader 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 TelegramTargetModuleLoader : ModuleLoader { override fun Module.load(config: JsonObject) { val configJson = config["telegram"] val postingChatIdQualifier = StringQualifier("telegram_postingChatId") configJson ?.let { single { get().decodeFromJsonElement(SubConfig.serializer(), configJson) } single { get().bot } single(postingChatIdQualifier) { get().targetChatId } singleWithRandomQualifier { PublicationTargetTelegram(get(), get(postingChatIdQualifier)) } singleWithRandomQualifier { ContentSerializersModuleConfigurator.Element { subclass(PollContent::class, PollContent.serializer()) } } } } }