Package-level declarations

Types

Link copied to clipboard
interface BehaviourContext : CoroutineScope

This class contains all necessary tools for work with bots and especially buildBehaviour

Link copied to clipboard
data class BehaviourContextData(data: MutableMap<String, Any?> = mutableMapOf()) : MutableMap<String, Any?>
Link copied to clipboard
class CombinedSubcontextInitialAction(val subactions: List<CombinedSubcontextInitialAction.SubAction>, logger: <Error class: unknown class> = KSLog("CombinedSubcontextInitialAction_${subactions.size}"))

Contains SubActions which will be used in subcontextInitialAction in order they has been passed in subactions.

typealias CustomBehaviourContextAndTwoTypesReceiver<BC, T, I1, I2> = suspend BC.(I1, I2) -> T
Link copied to clipboard
typealias CustomBehaviourContextAndTypeReceiver<BC, T, I> = suspend BC.(I) -> T
Link copied to clipboard
typealias CustomBehaviourContextReceiver<BC, T> = suspend BC.() -> T
Link copied to clipboard
class DefaultBehaviourContext(val bot: <Error class: unknown class>, val scope: CoroutineScope, broadcastChannelsSize: Int = 100, onBufferOverflow: BufferOverflow = BufferOverflow.SUSPEND, upstreamUpdatesFlow: Flow<<Error class: unknown class>>? = null, val triggersHolder: TriggersHolder = TriggersHolder(), val data: BehaviourContextData = BehaviourContextData(), val subcontextInitialAction: CustomBehaviourContextAndTypeReceiver<BehaviourContext, Unit, <Error class: unknown class>> = {}) : CoroutineScope, BehaviourContext

Properties

Link copied to clipboard
expect var defaultCoroutineScopeProvider: () -> CoroutineScope

This function is used in buildBehaviour extensions to provide default CoroutineScope and allow to avoid all unnecessary parameters except of block

actual var defaultCoroutineScopeProvider: () -> CoroutineScope
actual var defaultCoroutineScopeProvider: () -> CoroutineScope
actual var defaultCoroutineScopeProvider: () -> CoroutineScope
actual var defaultCoroutineScopeProvider: () -> CoroutineScope
actual var defaultCoroutineScopeProvider: () -> CoroutineScope

Functions

Link copied to clipboard
fun <T> Deferred<T>.asAction(): <Error class: unknown class>
Link copied to clipboard
fun BehaviourContext(bot: <Error class: unknown class>, scope: CoroutineScope, flowsUpdatesFilter: <Error class: unknown class> = FlowsUpdatesFilter(), triggersHolder: TriggersHolder = TriggersHolder(), useDefaultSubcontextInitialAction: Boolean = true, subcontextInitialAction: CustomBehaviourContextAndTypeReceiver<BehaviourContext, Unit, <Error class: unknown class>> = {}): DefaultBehaviourContext
fun BehaviourContext(bot: <Error class: unknown class>, scope: CoroutineScope, upstreamUpdatesFlow: Flow<<Error class: unknown class>>, subcontextInitialAction: CustomBehaviourContextAndTypeReceiver<BehaviourContext, Unit, <Error class: unknown class>>, triggersHolder: TriggersHolder = TriggersHolder(), useDefaultSubcontextInitialAction: Boolean = true): DefaultBehaviourContext
inline fun <T> BehaviourContext(bot: <Error class: unknown class>, scope: CoroutineScope, flowsUpdatesFilter: <Error class: unknown class> = FlowsUpdatesFilter(), triggersHolder: TriggersHolder = TriggersHolder(), noinline subcontextInitialAction: CustomBehaviourContextAndTypeReceiver<BehaviourContext, Unit, <Error class: unknown class>> = {}, useDefaultSubcontextInitialAction: Boolean = true, crossinline block: BehaviourContext.() -> T): T
inline fun <T> BehaviourContext(bot: <Error class: unknown class>, scope: CoroutineScope, upstreamUpdatesFlow: Flow<<Error class: unknown class>>, triggersHolder: TriggersHolder = TriggersHolder(), noinline subcontextInitialAction: CustomBehaviourContextAndTypeReceiver<BehaviourContext, Unit, <Error class: unknown class>> = {}, useDefaultSubcontextInitialAction: Boolean = true, crossinline block: BehaviourContext.() -> T): T
Link copied to clipboard
Link copied to clipboard
inline fun <T> BehaviourContextReceiver(noinline block: BehaviourContextReceiver<T>): suspend BehaviourContext.() -> T
Link copied to clipboard
suspend fun <Error class: unknown class>.buildBehaviour(flowUpdatesFilter: <Error class: unknown class> = FlowsUpdatesFilter(), scope: CoroutineScope = defaultCoroutineScopeProvider(), defaultExceptionsHandler: <Error class: unknown class><Unit>? = null, subcontextInitialAction: CustomBehaviourContextAndTypeReceiver<BehaviourContext, Unit, <Error class: unknown class>> = {}, useDefaultSubcontextInitialAction: Boolean = true, block: BehaviourContextReceiver<Unit>): BehaviourContext

Use this method in case you wish to make some additional actions with flowUpdatesFilter.

Link copied to clipboard
suspend fun <Error class: unknown class>.buildBehaviourWithLongPolling(scope: CoroutineScope = defaultCoroutineScopeProvider(), defaultExceptionsHandler: <Error class: unknown class><Unit>? = null, timeoutSeconds: <Error class: unknown class> = 30, autoDisableWebhooks: Boolean = true, autoSkipTimeoutExceptions: Boolean = true, mediaGroupsDebounceTimeMillis: Long? = 1000, subcontextInitialAction: CustomBehaviourContextAndTypeReceiver<BehaviourContext, Unit, <Error class: unknown class>> = {}, useDefaultSubcontextInitialAction: Boolean = true, block: BehaviourContextReceiver<Unit>): Job

Use this method to build bot behaviour and run it via long polling. In case you wish to get FlowsUpdatesFilter for additional manipulations, you must provide external FlowsUpdatesFilter in other buildBehaviour function.

Link copied to clipboard

Build CombinedSubcontextInitialAction with block and return callback, which appropriate for BehaviourContext builders with subcontextInitialAction argument

Build CombinedSubcontextInitialAction with block and return callback, which appropriate for BehaviourContext builders with subcontextInitialAction argument

Link copied to clipboard
fun <BC : BehaviourContext> BC.createSubContext(scope: CoroutineScope = LinkedSupervisorScope(), triggersHolder: TriggersHolder = this.triggersHolder, updatesUpstreamFlow: Flow<<Error class: unknown class>> = allUpdatesFlow, subcontextInitialAction: CustomBehaviourContextAndTypeReceiver<BC, Unit, <Error class: unknown class>> = this.subcontextInitialAction): BC

Creates new BehaviourContext using its BehaviourContext.copy method

suspend fun <T, BC : BehaviourContext> BC.createSubContextAndDoAsynchronouslyWithUpdatesFilter(triggersHolder: TriggersHolder = this.triggersHolder, updatesUpstreamFlow: Flow<<Error class: unknown class>> = allUpdatesFlow, context: <Error class: unknown class> = EmptyCoroutineContext, start: CoroutineStart = CoroutineStart.DEFAULT, additionalSubcontextInitialAction: CustomBehaviourContextAndTypeReceiver<BehaviourContext, Unit, <Error class: unknown class>>? = null, behaviourContextReceiver: CustomBehaviourContextReceiver<BC, T>): Deferred<T>

Uses createSubContextAndDoSynchronouslyWithUpdatesFilter, but wrapping it in async. That means, that execution of this function will be asynchronous and will not block execution of code by default

suspend fun <T, BC : BehaviourContext> BC.createSubContextAndDoSynchronouslyWithUpdatesFilter(triggersHolder: TriggersHolder = this.triggersHolder, updatesUpstreamFlow: Flow<<Error class: unknown class>> = allUpdatesFlow, additionalSubcontextInitialAction: CustomBehaviourContextAndTypeReceiver<BehaviourContext, Unit, <Error class: unknown class>>? = null, behaviourContextReceiver: CustomBehaviourContextReceiver<BC, T>): T

Creates new one BehaviourContext using createSubContext and launches behaviourContextReceiver in a new context using doInContext.

Link copied to clipboard
suspend fun <T, BC : BehaviourContext> BC.createSubContextAndDoWithUpdatesFilter(triggersHolder: TriggersHolder = this.triggersHolder, updatesUpstreamFlow: Flow<<Error class: unknown class>> = allUpdatesFlow, additionalSubcontextInitialAction: CustomBehaviourContextAndTypeReceiver<BehaviourContext, Unit, <Error class: unknown class>>? = null, behaviourContextReceiver: CustomBehaviourContextReceiver<BC, T>): Deferred<T>

It is just backward compatibility function which will be removed in next updates.

Link copied to clipboard
inline fun <BC, T, I> CustomBehaviourContextAndTypeReceiver(noinline block: CustomBehaviourContextAndTypeReceiver<BC, T, I>): suspend BC.(I) -> T
Link copied to clipboard
inline fun <BC, T> CustomBehaviourContextReceiver(noinline block: CustomBehaviourContextReceiver<BC, T>): suspend BC.() -> T
Link copied to clipboard
suspend fun <T, BC : BehaviourContext> BC.doInContext(behaviourContextReceiver: CustomBehaviourContextReceiver<BC, T>): T

Launch behaviourContextReceiver in context of this as BehaviourContext and as CoroutineContext

Link copied to clipboard
suspend fun <T, BC : BehaviourContext> BC.doInNewSubContext(scope: CoroutineScope = LinkedSupervisorScope(), triggersHolder: TriggersHolder = this.triggersHolder, updatesUpstreamFlow: Flow<<Error class: unknown class>> = allUpdatesFlow, subcontextInitialAction: CustomBehaviourContextAndTypeReceiver<BC, Unit, <Error class: unknown class>> = this.subcontextInitialAction, behaviourContextReceiver: CustomBehaviourContextReceiver<BC, T>): T

Launch behaviourContextReceiver in context of this as BehaviourContext and as CoroutineContext

Link copied to clipboard
fun <T, BC : BehaviourContext> BC.launchInNewSubContext(scope: CoroutineScope = LinkedSupervisorScope(), triggersHolder: TriggersHolder = this.triggersHolder, updatesUpstreamFlow: Flow<<Error class: unknown class>> = allUpdatesFlow, subcontextInitialAction: CustomBehaviourContextAndTypeReceiver<BC, Unit, <Error class: unknown class>> = this.subcontextInitialAction, behaviourContextReceiver: CustomBehaviourContextReceiver<BC, T>): Job

Launch behaviourContextReceiver in context of this as BehaviourContext and as CoroutineContext

Link copied to clipboard
suspend fun <O> BehaviourContext.oneOf(vararg deferredActions: Deferred<O>): <Error class: unknown class>
suspend fun <O> BehaviourContext.oneOf(deferredActions: Iterable<Deferred<O>>): <Error class: unknown class>
Link copied to clipboard
suspend fun <O> BehaviourContext.oneOfActions(vararg deferredActions: <Error class: unknown class><out <Error class: unknown class>, O>): <Error class: unknown class>
suspend fun <O> BehaviourContext.oneOfActions(deferredActions: Iterable<<Error class: unknown class><out <Error class: unknown class>, O>>): <Error class: unknown class>
Link copied to clipboard
Link copied to clipboard

This method will cancel ALL subsequent contexts, expectations and waiters

Link copied to clipboard
suspend fun telegramBotWithBehaviour(token: String, flowsUpdatesFilter: <Error class: unknown class> = FlowsUpdatesFilter(), scope: CoroutineScope? = null, apiUrl: String = telegramBotAPIDefaultUrl, builder: <Error class: unknown class>.() -> Unit = {}, defaultExceptionsHandler: <Error class: unknown class><Unit>? = null, testServer: Boolean = false, subcontextInitialAction: CustomBehaviourContextAndTypeReceiver<BehaviourContext, Unit, <Error class: unknown class>> = {}, fileLinkUrlMapper: <Error class: unknown class>.(String) -> String = { "${fileBaseUrl}/$it" }, useDefaultSubcontextInitialAction: Boolean = true, block: BehaviourContextReceiver<Unit>): <Error class: unknown class>

Create bot using telegramBot and start listening for updates using buildBehaviour. Use this method in case you wish to make some additional actions with flowsUpdatesFilter.

Link copied to clipboard
suspend fun telegramBotWithBehaviourAndLongPolling(token: String, scope: CoroutineScope? = null, apiUrl: String = telegramBotAPIDefaultUrl, builder: <Error class: unknown class>.() -> Unit = {}, defaultExceptionsHandler: <Error class: unknown class><Unit>? = null, testServer: Boolean = false, timeoutSeconds: <Error class: unknown class> = 30, autoDisableWebhooks: Boolean = true, autoSkipTimeoutExceptions: Boolean = true, mediaGroupsDebounceTimeMillis: Long? = 1000, subcontextInitialAction: CustomBehaviourContextAndTypeReceiver<BehaviourContext, Unit, <Error class: unknown class>> = {}, fileLinkUrlMapper: <Error class: unknown class>.(String) -> String = { "${fileBaseUrl}/$it" }, useDefaultSubcontextInitialAction: Boolean = true, block: BehaviourContextReceiver<Unit>): <Error class: unknown class><<Error class: unknown class>, Job>

Create bot using telegramBot and start listening for updates using buildBehaviourWithLongPolling. Use this method in case you wish to make some additional actions with flowsUpdatesFilter.

Link copied to clipboard
infix fun <T, O> Deferred<T>.withAction(callback: suspend (T) -> O): <Error class: unknown class>