Skip to content

# TelegramBotAPI

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
  - Maven variant
- 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:

- For multiplatform
- For JVM

### 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 chat.