Type-safe library for work with Telegram Bot API
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Go to file
InsanusMokrassar d4e11494e8 update kdocs of buttons creation shortcuts 1 day ago
.github update packages publishing to install openssl 2 months ago
docs fix dokka build 10 months ago
gradle Update libs.versions.toml 3 days ago
readmes add exceptions handling readme 1 year ago
resources Add files via upload 3 months ago
tgbotapi fix of build 2 months ago
tgbotapi.api all previous deprecations have been removed 1 week ago
tgbotapi.behaviour_builder fix of #645 3 weeks ago
tgbotapi.behaviour_builder.fsm add support of fallback handlers in behaviour builder with fsm 2 months ago
tgbotapi.core update kdocs of buttons creation shortcuts 1 day ago
tgbotapi.ksp fixes 10 months ago
tgbotapi.utils update dependencies 1 week ago
tgbotapi.webapps fix of build 2 months ago
.gitignore update gitignore and dokka version 1 year ago
.travis.yml update travis config 3 years ago
CHANGELOG.md Update CHANGELOG.md 3 days ago
CONTRIBUTING.md Create CONTRIBUTING.md 3 years ago
LICENSE Update LICENSE 3 years ago
README.md Update README.md 1 month ago
TelegramBotAPI.drawio packages update 2 years ago
_config.yml Set theme jekyll-theme-cayman 3 years ago
build.gradle update kdocs 3 months ago
changelog_info_retriever update changelog parser 3 years ago
extensions.gradle start to use more unified way of scripts organization 11 months ago
gradle.properties Update gradle.properties 3 days ago
gradlew init 5 years ago
gradlew.bat init 5 years ago
mppJsProject.gradle start to use more unified way of scripts organization 11 months ago
mppProjectWithSerialization.gradle experimentally add support of natives 2 months ago
publish.gradle update publish.gradle and gradle wrapper version 3 months ago
publish.kpsb add gitea publication 7 months ago
renovate.json Add renovate.json 3 years ago
settings.gradle update kdocs 3 months ago

README.md

TelegramBotAPI Maven Central Supported version

Docs KDocs Mini tutorial
Useful repos Create bot Examples
Misc Awesome Kotlin Badge Small survey
Platforms JVM Js
Experimental Platforms Linux x64 MinGW x64

Hello! This is a set of libraries for working with Telegram Bot API.

Examples

There are several things you need to do to launch examples below:

  • Add mavenCentral() to your project repositories
  • Add dependency implementation "dev.inmo:tgbotapi:$tgbotapi_version"
    • Replace tgbotapi_version with exact version (see last one in the table above) or put variable with this name in project
    • Alternative variant for maven here

More including instructions available here. Other configuration examples:

Most common example

suspend fun main() {
  val bot = telegramBot(TOKEN)

  bot.buildBehaviourWithLongPolling {
    println(getMe())
  
    onCommand("start") {
      reply(it, "Hi:)")
    }
  }.join()
}

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

Handling only last messages

suspend fun main() {
  val bot = telegramBot(TOKEN)

  val flowsUpdatesFilter = FlowsUpdatesFilter()
  bot.buildBehaviour(flowUpdatesFilter = flowsUpdatesFilter) {
    println(getMe())
  
    onCommand("start") {
      reply(it, "Hi:)")
    }

    retrieveAccumulatedUpdates(this).join()
  }
}

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)

Build a little bit more complex behaviour

suspend fun main() {
  val bot = telegramBot(TOKEN)

  bot.buildBehaviourWithLongPolling {
    println(getMe())

    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\"",
          replyMarkup = nameReplyMarkup
        )
      ).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()
}

More examples

You may find examples in this project. Besides, you are always welcome in our bookstack and chat.