Type-safe library for work with Telegram Bot API
Go to file
InsanusMokrassar 7cd97ac779 All the extensions related to text messages (replies, sending, editing) got their duplicates with buildEntities lambda and separator 2022-09-19 13:52:14 +06:00
.github update github building yml 2022-03-24 16:49:08 +06:00
docs fix dokka build 2022-08-05 22:03:10 +06:00
gradle fix build 2022-09-15 12:46:17 +06:00
readmes add exceptions handling readme 2022-01-11 21:22:10 +06:00
resources Add files via upload 2022-07-18 13:43:06 +06:00
tgbotapi complete rewriting on libs.versions.toml 2022-06-29 14:23:45 +06:00
tgbotapi.api All the extensions related to text messages (replies, sending, editing) got their duplicates with buildEntities lambda and separator 2022-09-19 13:52:14 +06:00
tgbotapi.behaviour_builder fixes 2022-08-26 12:20:20 +06:00
tgbotapi.behaviour_builder.fsm complete rewriting on libs.versions.toml 2022-06-29 14:23:45 +06:00
tgbotapi.core replace entities builder 2022-09-19 11:18:01 +06:00
tgbotapi.ksp fixes 2022-08-06 00:39:46 +06:00
tgbotapi.utils small refactoring inside of entities builder 2022-09-19 12:57:22 +06:00
tgbotapi.webapps fixes and improvements in webapps 2022-08-15 01:29:24 +06:00
.gitignore update gitignore and dokka version 2021-12-30 11:55:12 +06:00
.travis.yml update travis config 2020-10-22 19:19:55 +06:00
CHANGELOG.md All the extensions related to text messages (replies, sending, editing) got their duplicates with buildEntities lambda and separator 2022-09-19 13:52:14 +06:00
CONTRIBUTING.md Create CONTRIBUTING.md 2020-10-02 13:10:01 +06:00
LICENSE Update LICENSE 2020-02-19 22:29:53 +06:00
README.md Update README.md 2022-09-14 10:58:03 +06:00
TelegramBotAPI.drawio packages update 2021-10-18 15:20:25 +06:00
_config.yml Set theme jekyll-theme-cayman 2020-01-06 22:44:23 +06:00
build.gradle add generation of class casts 2022-08-05 16:31:39 +06:00
changelog_info_retriever update changelog parser 2020-10-04 17:43:25 +06:00
extensions.gradle start to use more unified way of scripts organization 2022-06-29 13:47:21 +06:00
gradle.properties start 3.2.6 2022-09-19 02:16:12 +06:00
gradlew init 2018-12-26 16:21:52 +08:00
gradlew.bat init 2018-12-26 16:21:52 +08:00
mppJsProject.gradle start to use more unified way of scripts organization 2022-06-29 13:47:21 +06:00
mppProjectWithSerialization.gradle complete rewriting on libs.versions.toml 2022-06-29 14:23:45 +06:00
publish.gradle publication scripts update 2022-03-22 16:26:18 +06:00
publish.kpsb publication scripts update 2022-03-22 16:26:18 +06:00
renovate.json Add renovate.json 2020-08-12 20:21:10 +00:00
settings.gradle fixes 2022-08-06 00:39:46 +06:00

README.md

TelegramBotAPI Maven Central Supported version

Docs KDocs Mini tutorial
Useful repos Create bot Examples
Misc Awesome Kotlin Badge Small survey

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.