# TelegramBotAPI Util Extensions [![Download](https://api.bintray.com/packages/insanusmokrassar/StandardRepository/TelegramBotAPI-extensions-utils/images/download.svg) ](https://bintray.com/insanusmokrassar/StandardRepository/TelegramBotAPI-extensions-utils/_latestVersion) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.insanusmokrassar/TelegramBotAPI-extensions-utils/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.github.insanusmokrassar/TelegramBotAPI-extensions-utils) ## What is it? It is wrapper library for [TelegramBotAPI](../TelegramBotAPI/README.md). Currently, this library contains some usefull filters for commands, updates types and different others. ## How to implement library? Common ways to implement this library are presented here. In some cases it will require additional steps like inserting of additional libraries (like `kotlin stdlib`). In the examples will be used variable `telegrambotapi-extensions-utils_version`, which must be set up by developer. Available versions are presented on [bintray](https://bintray.com/insanusmokrassar/StandardRepository/TelegramBotAPI-extensions-utils), next version is last published: [![Download](https://api.bintray.com/packages/insanusmokrassar/StandardRepository/TelegramBotAPI-extensions-utils/images/download.svg) ](https://bintray.com/insanusmokrassar/StandardRepository/TelegramBotAPI-extensions-utils/_latestVersion) ### Maven Dependency config presented here: ```xml com.github.insanusmokrassar TelegramBotAPI-extensions-utils ${telegrambotapi-extensions-utils_version} ``` ### Gradle To use last versions you will need to add one line in repositories block of your `build.gradle`: `jcenter()` or `mavenCentral()` And add next line to your dependencies block: ```groovy implementation "com.github.insanusmokrassar:TelegramBotAPI-extensions-utils:$telegrambotapi-extensions-utils_version" ``` or for old gradle: ```groovy compile "com.github.insanusmokrassar:TelegramBotAPI-extensions-utils:$telegrambotapi-extensions-utils_version" ``` ## How to use? Here will be presented several examples of usage. In all cases it is expected that you have created your bot and filter: ```kotlin val bot: RequestsExecutor = KtorRequestsExecutor( TelegramAPIUrlsKeeper(BOT_TOKEN) ) val filter = FlowsUpdatesFilter(64) ``` Alternative way to use the things below: ```kotlin val filter = bot.startGettingUpdates( scope = CoroutineScope(Dispatchers.Default) ) { // place code from examples here with replacing of `filter` by `this` } ``` ### Getting of only text incoming messages ```kotlin filter.asContentMessagesFlow().onlyTextContentMessages().onEach { println(it.content) println(it.fullEntitiesList()) }.launchIn( CoroutineScope(Dispatchers.Default) ) ``` As a result, each received message which will be just text message will be printed out with full list of its internal entities ## Shortcuts With shortcuts you are able to use simple factories for several things. ### ScheduledCloseInfo In case if you are creating some poll, you able to use next shortcuts. Next sample will use info with closing at the 10 seconds after now: ```kotlin closePollExactAt(DateTime.now() + TimeSpan(10000.0)) ``` In this example we will do the same, but in another way: ```kotlin closePollExactAfter(10) ``` Here we have passed `10` seconds and will get the same result object. In opposite to previous shortcuts, the next one will create `approximate` closing schedule: ```kotlin closePollAfter(10) ``` The main difference here is that the last one will be closed after 10 seconds since the sending. With first samples will be created **exact** time for closing of poll