Skip to main content

Updates with flows

Of course, in most cases here we will look up the way of using utils extnsions, but you may read deeper about updates retrieving here.

Phylosophy of Flow updates retrieving

In most updates retrieving processes there are two components: UpdatesFiler and its inheritor FlowsUpdatesFilter. It is assumed, that you will do several things in your app to handle updates:

  • Create your UpdatesFilter (for example, with flowsUpdatesFilter factory)
  • Set it up (in case of flowsUpdatesFilter you will set up updates handling in the lambda passed to this factory)
  • Provide updates to this filter with filter#asUpdateReceiver object

Let's look how it works with the factory above:

// Step 1 - create filter
val filter = flowsUpdatesFilter {
  // Step 2 - set up handling. In this case we will print any message from group or user in console
  messageFlow.onEach {

// Step 3 - passing updates to filter
bot.getUpdates().forEach {

Long polling

Some example with long polling has been described above. But it is more useful to use some factories for it. In this page we will look for simple variant with TelegramBot#longPolling. So, with this function, your handling of updates will looks like:

val bot = telegramBot("TOKEN")

bot.longPolling {
  messageFlow.onEach {

This example looks like the example above with three steps, but there are several important things here:

  • You do not manage retrieving of updates by hands
  • .join() will suspend your function 😊 longPolling function returns Job and you may use it to:
    • cancel working of long polling (just call job.cancel())
    • join and wait while the work of longPolling will not be completed (it will works infinity if you will not cancel it anywhere)
  • FlowsUpdatesFilter has been created under the hood of longPolling function

Results and What is next?

As a result you can start listen updates and react on it. Next recommended articles: