tgbotapi/README.md

123 lines
6.0 KiB
Markdown
Raw Permalink Normal View History

2024-04-20 17:31:42 +00:00
# TelegramBotAPI [![Maven Central](https://maven-badges.herokuapp.com/maven-central/dev.inmo/tgbotapi/badge.svg)](https://maven-badges.herokuapp.com/maven-central/dev.inmo/tgbotapi) [![Supported version](https://img.shields.io/badge/Telegram%20Bot%20API-7.2-blue)](https://core.telegram.org/bots/api-changelog#march-31-2024)
2018-12-26 08:07:24 +00:00
2023-06-10 12:16:01 +00:00
| Docs | [![KDocs](https://img.shields.io/static/v1?label=Dokka&message=KDocs&color=blue&logo=kotlin)](https://tgbotapi.inmo.dev/index.html) [![Mini tutorial](https://img.shields.io/static/v1?label=Mk&message=Docs&color=blue&logo=mkdocs)](https://docs.inmo.dev/tgbotapi/index.html) |
2023-04-18 06:54:11 +00:00
|:----------------------:|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|
| Useful repos | [![Create bot](https://img.shields.io/static/v1?label=Github&message=Template&color=blue&logo=github)](https://github.com/InsanusMokrassar/TelegramBotAPI-bot_template/generate) [![Examples](https://img.shields.io/static/v1?label=Github&message=Examples&color=blue&logo=github)](https://github.com/InsanusMokrassar/TelegramBotAPI-examples/) |
| Misc | [![Awesome Kotlin Badge](https://kotlin.link/awesome-kotlin.svg)](https://github.com/KotlinBy/awesome-kotlin) [![Small survey](https://img.shields.io/static/v1?label=Google&message=Survey&color=blue&logo=google-sheets)](https://docs.google.com/forms/d/e/1FAIpQLSctdJHT_aEniyYT0-IUAEfo1hsIlezX2owlkEAYX4KPl2V2_A/viewform?usp=sf_link) |
| Platforms | ![JVM](https://img.shields.io/badge/JVM-red?style=plastic&logo=openjdk&logoColor=white) ![Js](https://img.shields.io/badge/JavaScript-323330?style=plastic&logo=javascript&logoColor=F7DF1E) |
2023-04-29 05:19:06 +00:00
| Experimental Platforms | [![Linux x64](https://img.shields.io/badge/LinuxX64-FCC624?style=plastic&logo=linux&logoColor=black)](https://kotlinlang.org/docs/native-target-support.html#tier-1) [![MinGW x64](https://img.shields.io/badge/MinGWX64-black?style=plastic&logo=windows&logoColor=green)](https://kotlinlang.org/docs/native-target-support.html#tier-1) |
2022-08-04 19:48:44 +00:00
2023-02-24 09:31:33 +00:00
<!--- [![Telegram Channel](./resources/tg_channel_qr.jpg)](https://t.me/ktgbotapi) --->
2022-08-04 19:48:44 +00:00
<p align="center">
2023-02-24 09:31:33 +00:00
<a href="https://t.me/ktgbotapi">
2022-08-04 19:48:44 +00:00
<img src="./resources/tg_channel_qr.jpg">
</a>
</p>
2021-08-22 04:58:32 +00:00
2021-02-11 06:06:34 +00:00
Hello! This is a set of libraries for working with Telegram Bot API.
2020-11-16 15:59:25 +00:00
2021-02-11 06:06:34 +00:00
## Examples
2020-04-17 09:43:43 +00:00
2021-02-12 19:38:31 +00:00
There are several things you need to do to launch examples below:
* Add `mavenCentral()` to your project repositories
* [Maven variant](https://github.com/InsanusMokrassar/TelegramBotAPI/wiki/Including-in-your-project#pomxml)
* Add dependency `implementation "dev.inmo:tgbotapi:$tgbotapi_version"`
2021-02-12 19:42:35 +00:00
* Replace `tgbotapi_version` with exact version (see last one in the table above) or put variable with this name in project
2021-02-12 19:38:31 +00:00
* Alternative variant for maven [here](https://github.com/InsanusMokrassar/TelegramBotAPI/wiki/Including-in-your-project#telegrambotapi)
2021-02-13 04:09:33 +00:00
More including instructions [available here](https://github.com/InsanusMokrassar/TelegramBotAPI/wiki/Including-in-your-project).
Other configuration examples:
* [For multiplatform](https://github.com/InsanusMokrassar/TelegramBotAPI-examples/tree/master/ResenderBot)
* [For JVM](https://github.com/InsanusMokrassar/TelegramBotAPI-examples/blob/master/GetMeBot/build.gradle)
2021-02-12 19:38:31 +00:00
2021-02-11 06:06:34 +00:00
### Most common example
2020-04-17 09:43:43 +00:00
2021-02-11 06:06:34 +00:00
```kotlin
suspend fun main() {
val bot = telegramBot(TOKEN)
2020-04-17 09:43:43 +00:00
2022-03-13 20:50:38 +00:00
bot.buildBehaviourWithLongPolling {
2021-02-11 06:06:34 +00:00
println(getMe())
onCommand("start") {
reply(it, "Hi:)")
2020-04-17 09:43:43 +00:00
}
2021-02-11 06:06:34 +00:00
}.join()
2020-04-17 09:43:43 +00:00
}
```
2021-02-11 06:06:34 +00:00
In this example you will see information about this bot at the moment of starting and answer with `Hi:)` every time it
gets message `/start`
2020-05-14 08:07:23 +00:00
2021-02-11 06:06:34 +00:00
### Handling only last messages
2020-04-08 09:28:03 +00:00
2021-02-11 06:06:34 +00:00
```kotlin
suspend fun main() {
val bot = telegramBot(TOKEN)
2020-05-14 07:44:18 +00:00
2021-02-11 06:06:34 +00:00
val flowsUpdatesFilter = FlowsUpdatesFilter()
bot.buildBehaviour(flowUpdatesFilter = flowsUpdatesFilter) {
println(getMe())
onCommand("start") {
reply(it, "Hi:)")
}
2020-05-14 07:44:18 +00:00
2021-02-11 07:37:24 +00:00
retrieveAccumulatedUpdates(this).join()
2021-02-11 07:35:06 +00:00
}
2021-02-11 06:06:34 +00:00
}
2020-05-14 07:44:18 +00:00
```
2021-02-11 06:06:34 +00:00
The main difference with the previous example is that bot will get only last updates (accumulated before bot launch
and maybe some updates it got after launch)
2020-05-14 07:44:18 +00:00
2021-02-11 06:06:34 +00:00
### Build a little bit more complex behaviour
2020-05-14 07:44:18 +00:00
2021-02-11 06:06:34 +00:00
```kotlin
suspend fun main() {
val bot = telegramBot(TOKEN)
2020-05-14 07:44:18 +00:00
2022-03-13 20:50:38 +00:00
bot.buildBehaviourWithLongPolling {
2021-02-11 06:06:34 +00:00
println(getMe())
2020-05-14 07:44:18 +00:00
2021-02-11 06:06:34 +00:00
val nameReplyMarkup = ReplyKeyboardMarkup(
matrix {
row {
+SimpleKeyboardButton("nope")
}
}
)
onCommand("start") {
val photo = waitPhoto(
SendTextMessage(it.chat.id, "Send me your photo please")
).first()
val name = waitText(
SendTextMessage(
it.chat.id,
"Send me your name or choose \"nope\"",
2021-02-11 07:38:55 +00:00
replyMarkup = nameReplyMarkup
2021-02-11 06:06:34 +00:00
)
).first().text.takeIf { it != "nope" }
sendPhoto(
it.chat,
photo.mediaCollection,
entities = buildEntities {
if (name != null) regular(name) // may be collapsed up to name ?.let(::regular)
}
)
}
}.join()
2020-05-14 07:44:18 +00:00
}
```
2021-02-11 06:06:34 +00:00
### More examples
You may find examples in [this project](https://github.com/InsanusMokrassar/TelegramBotAPI-examples). Besides, you are
2024-01-08 10:29:59 +00:00
always welcome in our [docs](https://docs.inmo.dev/tgbotapi/index.html) and
2021-02-11 06:06:34 +00:00
[chat](https://t.me/InMoTelegramBotAPIChat).