BehaviourContext#followLocation

This commit is contained in:
InsanusMokrassar 2021-09-14 16:16:06 +06:00
parent a046a72392
commit 24c47b00d4
2 changed files with 31 additions and 0 deletions

View File

@ -13,6 +13,7 @@
* `Behaviour Builder`:
* All triggers have been changed to use two filters: filter for in subcontext data and filter for incoming data
* New waiters for edited content
* New extension `BehaviourContext#followLocation`
## 0.35.8

View File

@ -0,0 +1,30 @@
package dev.inmo.tgbotapi.extensions.behaviour_builder.utils
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContextAndTypeReceiver
import dev.inmo.tgbotapi.extensions.behaviour_builder.expectations.waitEditedLocation
import dev.inmo.tgbotapi.types.location.*
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
import dev.inmo.tgbotapi.types.message.content.LiveLocationContent
/**
* Use this extension when you want to follow [LiveLocation] until it will became [StaticLocation]. This method
* is synchronous. You may use something like [kotlinx.coroutines.launch] or [kotlinx.coroutines.async] to run it
* asynchronously
*/
suspend fun BehaviourContext.followLocation(
message: ContentMessage<LiveLocationContent>,
onLocation: BehaviourContextAndTypeReceiver<Unit, Location>
) {
var currentLocation: Location = message.content.location
onLocation(message.content.location)
while (currentLocation !is StaticLocation) {
currentLocation = waitEditedLocation(
filter = {
it.messageId == message.messageId && it.chat.id == message.chat.id
}
).first().location
onLocation(currentLocation)
}
}