All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.dev.inmo.tgbotapi.extensions.api.BotBuilder.kt Maven / Gradle / Ivy

Go to download

API extensions with "Telegram Bot API"-like extensions for TelegramBot and RequestsExecutor

The newest version!
package dev.inmo.tgbotapi.extensions.api

import dev.inmo.tgbotapi.bot.TelegramBot
import dev.inmo.tgbotapi.utils.TelegramAPIUrlsKeeper
import dev.inmo.tgbotapi.utils.telegramBotAPIDefaultUrl
import io.ktor.client.HttpClient
import io.ktor.client.HttpClientConfig
import io.ktor.client.engine.*

/**
 * @param proxy Standard ktor [ProxyConfig]
 * @param ktorClientEngine Engine like [io.ktor.client.engine.cio.CIO]
 * @param ktorClientConfig Config block for preconfiguring of bot [HttpClient]
 */
public data class BotBuilder internal constructor(
    var proxy: ProxyConfig? = null,
    var ktorClientEngineFactory: HttpClientEngineFactory? = null,
    var ktorClientConfig: (HttpClientConfig<*>.() -> Unit) ? = null
) {
    internal fun createHttpClient(): HttpClient = ktorClientEngineFactory ?.let {
        HttpClient(
            it.create {
                [email protected] = [email protected] ?: [email protected]
            }
        ) {
            ktorClientConfig ?.let { it() }
        }
    } ?: HttpClient {
        ktorClientConfig ?.let { it() }
        engine {
            [email protected] = [email protected] ?: [email protected]
        }
    }
}

/**
 * @return Created by [telegramBotWithCustomClientConfig] function [TelegramBot]. This executor will be preconfigured using [token] and
 * [block]
 */
public fun buildBot(
    token: String,
    apiUrl: String = telegramBotAPIDefaultUrl,
    testServer: Boolean = false,
    block: BotBuilder.() -> Unit
): TelegramBot = telegramBot(
    TelegramAPIUrlsKeeper(token, testServer, apiUrl),
    BotBuilder().apply(block).createHttpClient()
)




© 2015 - 2024 Weber Informatics LLC | Privacy Policy