kt-telegram-bot
kt-telegram-bot copied to clipboard
Telegram Bot Library for Kotlin language
kt-telegram-bot
Convenient way to build Telegram bots using powerful Kotlin language. Support for Telegram Bot API 6.1. Method names are the same as in API.
Changelog
Version 2.1.5
- Update Bot API to 6.1
Version 2.1.4
- Common
ChatMember
status
anduser
fields - fixed
Owner
andAdministrator
serialization
Version 2.1.3
- fixed
ChatId
serialization
Changelog history
Getting started
Prerequisites
- JDK 8 or higher
- Kotlin 1.3 or higher
- Gradle
- IDE (optionally)
Installation
Gradle
repositories {
maven { url "https://jitpack.io" }
}
dependencies {
implementation "com.elbekD:kt-telegram-bot:$version"
}
Or Gradle Kotlin DSL
repositories {
maven("https://jitpack.io")
}
dependencies {
compile("com.elbekD:kt-telegram-bot:${version}")
}
Maven
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
<dependency>
<groupId>com.elbekD</groupId>
<artifactId>kt-telegram-bot</artifactId>
<version>{version}</version>
</dependency>
Quick start
fun main(args: Array<String>) {
val token = "<TOKEN>"
val bot = Bot.createPolling(token)
bot.onCommand("/start") { msg, _ ->
bot.sendMessage(msg.chat.id, "Hello World!")
}
bot.start()
}
Chain
It is common case when you need to ask the user several questions sequentially and process user errors. Now you can
create such chains easily. Sea the example below. Do not forget to call build()
method at the end.
fun main() {
val token = "<TOKEN>"
val username = "<BOT USERNAME>"
val bot = Bot.createPolling(username, token)
bot.chain("/start") { msg -> bot.sendMessage(msg.chat.id.toChatId(), "Hi! What is your name?") }
.then { msg -> bot.sendMessage(msg.chat.id.toChatId(), "Nice to meet you, ${msg.text}! Send something to me") }
.then { msg -> bot.sendMessage(msg.chat.id.toChatId(), "Fine! See you soon") }
.build()
bot.chain(
label = "location_chain",
predicate = { msg -> msg.location != null },
action = { msg ->
bot.sendMessage(
msg.chat.id.toChatId(),
"Fine, you've sent me a location. Confirm the order?(yes|no)"
)
})
.then("answer_choice") { msg ->
when (msg.text) {
"yes" -> bot.jumpToAndFire("order_taxi", msg)
"no" -> bot.jumpToAndFire("cancel_ordering", msg)
else -> {
bot.sendMessage(msg.chat.id.toChatId(), "Oops, I don't understand you. Just answer yes or no?")
bot.jumpTo("answer_choice", msg)
}
}
}
.then("order_taxi", isTerminal = true) { msg ->
bot.sendMessage(msg.chat.id.toChatId(), "Fine! Taxi is coming")
}
.then("cancel_ordering", isTerminal = true) { msg ->
bot.sendMessage(msg.chat.id.toChatId(), "Ok! See you next time")
}
.build()
bot.start()
}
Deployment
Use ShadowJar plugin or any other way you like.
Examples
- Long polling bot
- Webhook bot and nginx configuration file
Bot methods
See details in source code.
License
MIT License