Library provide wrapper over tdlib Telegram API using coroutines Flow and suspend functions.
For every tdlib function exists easy to use extension function with parameters and return type.
suspend fun TelegramClient.getChat(chatId: Long): ChatFor listening updates you can use flow with all updates:
val TelegramClient.updates: Flow<TelegramUpdate>Telegram - root factory object for creating TelegramClient.
It will manage lifecycle of created clients.
Telegram implements Job interface and can be closed by calling cancel()
Optionally parent Job object can be passed as parameter to bind Telegram to existing lifecycle.
To configure low-level parameters for tdlib you can pass TelegramClientConfiguration.
receiveTimeout- maximum duration allowed to wait for new data in one call to tdlib. By default 1 second. Sufficient for most use cases but can be changed in future.maxEventsCount- maximum number of responses received from tdlib by one request. By default 1000. Sufficient for most use cases but can be changed in future.
val telegram = Telegram(
configuration = TelegramClientConfiguration(
maxEventsCount = 100,
receiveTimeout = 30.seconds
)
)TelegramClient can be created from Telegram and closed or independent by calling cancel() or by canceling Telegram object.
Using of client can be checked in examples.
TelegramClient - main interface to interact with library.
All extensions can be found in api package. They are grouped by type and exists in 2 kinds:
- Raw - just type binding for tdlib function:
suspend fun TelegramClient.chat(f: GetChat): Chat- Parameterized - functions with inline parameters of function object:
suspend fun TelegramClient.getChat(chatId: Long): ChatResult of calling this 2 functions will be the same. Parameterized functions just more easy to use and find.
Also sync package exists which contains functions which can be called synchronously using TelegramClient companion object.
fun TelegramClient.Companion.setLogVerbosityLevel(newVerbosityLevel: Int): OkWhich can be used without TelegramClient instance like this:
TelegramClient.setLogVerbosityLevel(5)To obtain updates, f.e. for chat last message, updates property on TelegramClient can be used:
client.updates.filterIsInstance<UpdateChatLastMessage>()repositories {
maven {
url "https://dl.bintray.com/whyoleg/ktd"
}
}
dependencies {
//td api by version
implementation "dev.whyoleg.ktd:ktd-api-coroutines-jvm:0.5.0-1.5.4"
//or for android
implementation "dev.whyoleg.ktd:ktd-api-coroutines-android:0.5.0-1.5.4"
//or for common
implementation "dev.whyoleg.ktd:ktd-api-coroutines:0.5.0-1.5.4"
//or for another td api version
implementation "dev.whyoleg.ktd:ktd-api-coroutines-jvm:0.5.0-1.5.0"
}- Available artifacts:
- Client:
dev.whyoleg.ktd:ktd-client-[type]-[platform]:[version]- tdlib bindings - API:
dev.whyoleg.ktd:ktd-api-[type]-[platform]:[version]-[tdlib-version]- generated API accessors
- Client:
- Supported configurations:
version- ktd version, f.e. 0.5.0type- level of abstractionraw- simple client with low-level bindingscorotutines- standard client withsuspendfunctions for execution andupdatesFlow for consuming updates
platform- jvm
- android (only for api, for client
jvmcan be used instead) - metadata (common)
- omit
platfromto useGRADLE_METADATAdependency
tdlib-version- 1.5.4
- 1.5.3
- 1.5.2
- 1.5.1
- 1.5.0
Now library published only to bintray, it will change in future.
For now, library has experimental status, so public interface can be changed any time until 1.0 version.