2018-12-26 08:07:24 +00:00
# TelegramBotAPI
2020-07-20 09:15:06 +00:00
| Common info | [![Awesome Kotlin Badge ](https://kotlin.link/awesome-kotlin.svg )](https://github.com/KotlinBy/awesome-kotlin) [![Build Status ](https://travis-ci.com/InsanusMokrassar/TelegramBotAPI.svg?branch=master )](https://travis-ci.com/InsanusMokrassar/TelegramBotAPI) [Small survey ](https://forms.gle/tnjuExdSKEr32ygKA )|
2020-04-08 08:34:55 +00:00
| -------------------------------------:|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
2020-08-14 17:44:21 +00:00
| Useful links | [![Chat in Telegram ](badges/chat.svg )](https://t.me/InMoTelegramBotAPI) [![KDocs ](badges/kdocs.svg )](https://tgbotapi.inmo.dev/docs/index.html) [Examples ](https://github.com/InsanusMokrassar/TelegramBotAPI-examples/ ), [Mini tutorial ](https://bookstack.inmo.dev/books/telegrambotapi/chapter/introduction-tutorial ) |
2020-10-04 12:34:03 +00:00
| TelegramBotAPI Core status | [![Download ](https://api.bintray.com/packages/insanusmokrassar/TelegramBotAPI/tgbotapi.core/images/download.svg )](https://bintray.com/insanusmokrassar/TelegramBotAPI/tgbotapi.core/_latestVersion) [![Maven Central ](https://maven-badges.herokuapp.com/maven-central/dev.inmo/tgbotapi.core/badge.svg )](https://maven-badges.herokuapp.com/maven-central/dev.inmo/TelegramBotAPI) |
| TelegramBotAPI Extensions status | [![Download ](https://api.bintray.com/packages/insanusmokrassar/TelegramBotAPI/tgbotapi.extensions.api/images/download.svg )](https://bintray.com/insanusmokrassar/TelegramBotAPI/tgbotapi.extensions.api/_latestVersion) [![Maven Central ](https://maven-badges.herokuapp.com/maven-central/dev.inmo/tgbotapi.extensions.api/badge.svg )](https://maven-badges.herokuapp.com/maven-central/dev.inmo/tgbotapi.extensions.api) |
| TelegramBotAPI Util Extensions status | [![Download ](https://api.bintray.com/packages/insanusmokrassar/TelegramBotAPI/tgbotapi.extensions.utils/images/download.svg )](https://bintray.com/insanusmokrassar/TelegramBotAPI/tgbotapi.extensions.utils/_latestVersion) [![Maven Central ](https://maven-badges.herokuapp.com/maven-central/dev.inmo/tgbotapi.extensions.utils/badge.svg )](https://maven-badges.herokuapp.com/maven-central/dev.inmo/tgbotapi.extensions.utils) |
| TelegramBotAPI All status | [![Download ](https://api.bintray.com/packages/insanusmokrassar/TelegramBotAPI/tgbotapi/images/download.svg )](https://bintray.com/insanusmokrassar/TelegramBotAPI/tgbotapi/_latestVersion) [![Maven Central ](https://maven-badges.herokuapp.com/maven-central/dev.inmo/TelegramBotAPI/badge.svg )](https://maven-badges.herokuapp.com/maven-central/dev.inmo/TelegramBotAPI-all) |
2018-12-26 08:07:24 +00:00
2020-08-29 12:37:02 +00:00
**At the time of publication of version `0.28.0` there are errors in serialization plugins like
[kotlinx.serialization#1004 ](https://github.com/Kotlin/kotlinx.serialization/issues/1004 ). It is possible, that both JVM
and JS version may work improperly in some cases with `kotlinx.serialization` version `1.0.0-RC` **
2020-02-17 09:25:08 +00:00
It is a complex of libraries for working with `TelegramBotAPI` in type-safe and strict way as much as it possible. In
the list of this complex currently next projects:
2018-12-26 08:07:24 +00:00
2020-10-04 12:34:03 +00:00
* [tgbotapi.core ](tgbotapi.core/README.md ) - core of library. In fact it is independent library and can be used alone
2020-04-08 08:34:55 +00:00
without any additional library
2020-10-04 12:34:03 +00:00
* [TelegramBotAPI Extensions ](tgbotapi.extensions.api/README.md ) - contains extensions (mostly for
2020-04-08 08:34:55 +00:00
`RequestsExecutor` ), which allows to use the core library in more pleasant way
2020-10-04 12:34:03 +00:00
* [TelegramBotAPI Util Extensions ](tgbotapi.extensions.utils/README.md ) - contains extensions for more comfortable
2020-04-08 09:28:03 +00:00
work with commands, updates and other different things
2020-08-20 05:58:37 +00:00
* [TelegramBotAPI ](TelegramBotAPI/README.md ) - concentration of all previously mentioned libraries
2018-12-26 08:07:24 +00:00
2020-02-17 09:25:08 +00:00
Most part of some specific solves or unuseful
moments are describing by official [Telegram Bot API ](https://core.telegram.org/bots/api ).
2019-05-05 01:04:48 +00:00
2020-04-17 09:43:43 +00:00
## JavaScript notes
2020-08-29 12:37:02 +00:00
### Versions before `0.28.0`
2020-04-17 09:52:47 +00:00
In case if you are want to use this library inside of browser, you will need additional settings (thanks for help to [Alexander Nozik ](https://research.jetbrains.org/researchers/altavir )):
2020-04-17 09:43:43 +00:00
< details >
2020-08-20 05:58:37 +00:00
< summary > Gradle build script help (for versions before 0.28.0)< / summary >
2020-04-17 09:43:43 +00:00
```groovy
dependencies {
/* ... */
2020-10-04 12:34:03 +00:00
implementation "dev.inmo:tgbotapi:$tgbot_api_version"
implementation "dev.inmo:tgbotapi.extensions.api:$tgbot_api_version" // optional
implementation "dev.inmo:tgbotapi.extensions.utils:$tgbot_api_version" // optional
2020-04-17 09:43:43 +00:00
/* Block of dependencies for correct building in browser */
implementation(npm("fs"))
implementation(npm("bufferutil"))
implementation(npm("utf-8-validate"))
implementation(npm("abort-controller"))
implementation(npm("text-encoding"))
}
/* ... */
kotlin {
target {
browser {
/* Block for fix of exception in absence of some functionality, https://github.com/ktorio/ktor/issues/1339 */
dceTask {
dceOptions {
keep("ktor-ktor-io.\$\$importsForInline\$\$.ktor-ktor-io.io.ktor.utils.io")
}
}
}
}
}
```
< / details >
2020-02-17 09:25:08 +00:00
## Ok, where should I start?
2019-05-05 01:04:48 +00:00
2020-06-26 13:11:59 +00:00
![Libraries hierarchy ](resources/TelegramBotAPI-libraries-hierarchy.svg )
2020-08-20 05:58:37 +00:00
In most cases, the most simple way will be to implement [TelegramBotAPI ](TelegramBotAPI/README.md ) - it contains
2020-05-14 08:07:23 +00:00
all necessary tools for comfort usage of this library. If you want to exclude some libraries, you can implement just
2020-10-04 12:34:03 +00:00
[TelegramBotAPI API Extensions ](tgbotapi.extensions.api/README.md ),
[TelegramBotAPI Util Extensions ](tgbotapi.extensions.utils/README.md ) or even
[tgbotapi.core ](tgbotapi.core/README.md ).
2019-05-05 01:04:48 +00:00
2020-05-14 08:07:23 +00:00
If you want to dive deeper in the core of library or develop something for it - welcome to learn more from
2020-10-04 12:34:03 +00:00
[tgbotapi.core ](tgbotapi.core/README.md ) and our [Telegram Chat ](https://teleg.one/InMoTelegramBotAPIChat ).
2020-05-14 08:07:23 +00:00
2020-04-08 09:28:03 +00:00
Anyway, all libraries are very typical inside of them. Examples:
* In `TelegramBotAPI` common request look like `requestsExecutor.execute(SomeRequest())`
2020-10-04 12:34:03 +00:00
* `tgbotapi.extensions.api` typical syntax look like `requestsExecutor.someRequest()` (in most cases it would be
2020-04-08 19:24:55 +00:00
better to use `bot` name instead of `requestsExecutor` )
2020-10-04 12:34:03 +00:00
* `tgbotapi.extensions.utils` will look like `filter.filterBaseMessageUpdates(chatId).filterExactCommands(Regex("^.*$"))...`
2020-05-14 07:44:18 +00:00
## Build instruction
If you want to build this project or to contribute, there are several recommendations:
### Build
In case if you want to just build project, run next command:
```bash
./gradlew clean build
```
On windows:
```
gradlew.bat clean build
```
### Publishing for work with your version locally
In case, if you want to work in your other projects using your modification (or some state) of this library,
you can use next code:
```bash
./gradlew clean build publishToMavenLocal
```
On windows:
```
gradlew.bat clean build publishToMavenLocal
```
But you must remember, that in this case your local maven repo must be the first one from
your project retrieving libraries:
```groovy
repositories {
mavenLocal() // that must be the first one
jcenter()
mavenCentral()
}
```
Besides, for your own version you can change variable `library_version` in the file [gradle.properties ](./gradle.properties ).