mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2024-11-26 03:58:44 +00:00
commit
5cc0bbb31b
12
CHANGELOG.md
12
CHANGELOG.md
@ -1,5 +1,17 @@
|
|||||||
# TelegramBotAPI changelog
|
# TelegramBotAPI changelog
|
||||||
|
|
||||||
|
## 0.32.7
|
||||||
|
|
||||||
|
* `Core`:
|
||||||
|
* New variable `LeftRestrictionsChatPermissions` and `RestrictionsChatPermissions`
|
||||||
|
* `Extensions Utils`:
|
||||||
|
* `DiceAnimationType` class casts
|
||||||
|
* `Behaviour Builder`:
|
||||||
|
* Now `doInSubContextWithUpdatesFilter` and `doInSubContext` will automatically subscribe on updates of parent
|
||||||
|
`BehaviourContext`
|
||||||
|
* `doInSubContextWithFlowsUpdatesFilterSetup`, `doInSubContextWithUpdatesFilter` and `doInSubContext` got new
|
||||||
|
parameter `stopOnCompletion` to be able to disable stopping of behaviour context on finishing
|
||||||
|
|
||||||
## 0.32.6
|
## 0.32.6
|
||||||
|
|
||||||
* `Common`:
|
* `Common`:
|
||||||
|
@ -17,6 +17,6 @@ micro_utils_version=0.4.25
|
|||||||
javax_activation_version=1.1.1
|
javax_activation_version=1.1.1
|
||||||
|
|
||||||
library_group=dev.inmo
|
library_group=dev.inmo
|
||||||
library_version=0.32.6
|
library_version=0.32.7
|
||||||
|
|
||||||
github_release_plugin_version=2.2.12
|
github_release_plugin_version=2.2.12
|
||||||
|
@ -23,3 +23,25 @@ data class ChatPermissions(
|
|||||||
@SerialName(canPinMessagesField)
|
@SerialName(canPinMessagesField)
|
||||||
val canPinMessages: Boolean = false
|
val canPinMessages: Boolean = false
|
||||||
)
|
)
|
||||||
|
|
||||||
|
val LeftRestrictionsChatPermissions = ChatPermissions(
|
||||||
|
canSendMessages = true,
|
||||||
|
canSendMediaMessages = true,
|
||||||
|
canSendPolls = true,
|
||||||
|
canSendOtherMessages = true,
|
||||||
|
canAddWebPagePreviews = true,
|
||||||
|
canChangeInfo = true,
|
||||||
|
canInviteUsers = true,
|
||||||
|
canPinMessages = true,
|
||||||
|
)
|
||||||
|
|
||||||
|
val RestrictionsChatPermissions = ChatPermissions(
|
||||||
|
canSendMessages = false,
|
||||||
|
canSendMediaMessages = false,
|
||||||
|
canSendPolls = false,
|
||||||
|
canSendOtherMessages = false,
|
||||||
|
canAddWebPagePreviews = false,
|
||||||
|
canChangeInfo = false,
|
||||||
|
canInviteUsers = false,
|
||||||
|
canPinMessages = false,
|
||||||
|
)
|
||||||
|
@ -4,6 +4,7 @@ import dev.inmo.micro_utils.coroutines.subscribeSafelyWithoutExceptions
|
|||||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
import dev.inmo.tgbotapi.bot.TelegramBot
|
||||||
import dev.inmo.tgbotapi.types.update.abstracts.Update
|
import dev.inmo.tgbotapi.types.update.abstracts.Update
|
||||||
import dev.inmo.tgbotapi.updateshandlers.FlowsUpdatesFilter
|
import dev.inmo.tgbotapi.updateshandlers.FlowsUpdatesFilter
|
||||||
|
import dev.inmo.tgbotapi.utils.RiskFeature
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import kotlinx.coroutines.flow.filter
|
import kotlinx.coroutines.flow.filter
|
||||||
|
|
||||||
@ -25,12 +26,15 @@ data class BehaviourContext(
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates new one [BehaviourContext], adding subsequent [FlowsUpdatesFilter] in case [newFlowsUpdatesFilterSetUp] is provided and
|
* Creates new one [BehaviourContext], adding subsequent [FlowsUpdatesFilter] in case [newFlowsUpdatesFilterSetUp] is provided and
|
||||||
* [CoroutineScope] as new [BehaviourContext.scope]
|
* [CoroutineScope] as new [BehaviourContext.scope]. You must do all subscription/running of longPolling manually.
|
||||||
*
|
*
|
||||||
* @param newFlowsUpdatesFilterSetUp As a parameter receives [FlowsUpdatesFilter] from old [this] [BehaviourContext.flowsUpdatesFilter]
|
* @param newFlowsUpdatesFilterSetUp As a parameter receives [FlowsUpdatesFilter] from old [this] [BehaviourContext.flowsUpdatesFilter]
|
||||||
*/
|
*/
|
||||||
|
@RiskFeature("It is recommended to use doInSubContextWithUpdatesFilter instead. " +
|
||||||
|
"This method is low level and should not be used in case you are not pretty sure you need it.")
|
||||||
suspend fun <T> BehaviourContext.doInSubContextWithFlowsUpdatesFilterSetup(
|
suspend fun <T> BehaviourContext.doInSubContextWithFlowsUpdatesFilterSetup(
|
||||||
newFlowsUpdatesFilterSetUp: BehaviourContextAndTypeReceiver<Unit, FlowsUpdatesFilter>?,
|
newFlowsUpdatesFilterSetUp: BehaviourContextAndTypeReceiver<Unit, FlowsUpdatesFilter>?,
|
||||||
|
stopOnCompletion: Boolean = true,
|
||||||
behaviourContextReceiver: BehaviourContextReceiver<T>
|
behaviourContextReceiver: BehaviourContextReceiver<T>
|
||||||
) = copy(
|
) = copy(
|
||||||
flowsUpdatesFilter = FlowsUpdatesFilter(),
|
flowsUpdatesFilter = FlowsUpdatesFilter(),
|
||||||
@ -39,7 +43,7 @@ suspend fun <T> BehaviourContext.doInSubContextWithFlowsUpdatesFilterSetup(
|
|||||||
newFlowsUpdatesFilterSetUp ?.let {
|
newFlowsUpdatesFilterSetUp ?.let {
|
||||||
it.apply { invoke(this@run, this@doInSubContextWithFlowsUpdatesFilterSetup.flowsUpdatesFilter) }
|
it.apply { invoke(this@run, this@doInSubContextWithFlowsUpdatesFilterSetup.flowsUpdatesFilter) }
|
||||||
}
|
}
|
||||||
behaviourContextReceiver().also { stop() }
|
behaviourContextReceiver().also { if (stopOnCompletion) stop() }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -48,19 +52,24 @@ suspend fun <T> BehaviourContext.doInSubContextWithFlowsUpdatesFilterSetup(
|
|||||||
*/
|
*/
|
||||||
suspend fun <T> BehaviourContext.doInSubContextWithUpdatesFilter(
|
suspend fun <T> BehaviourContext.doInSubContextWithUpdatesFilter(
|
||||||
updatesFilter: BehaviourContextAndTypeReceiver<Boolean, Update>?,
|
updatesFilter: BehaviourContextAndTypeReceiver<Boolean, Update>?,
|
||||||
|
stopOnCompletion: Boolean = true,
|
||||||
behaviourContextReceiver: BehaviourContextReceiver<T>
|
behaviourContextReceiver: BehaviourContextReceiver<T>
|
||||||
) = doInSubContextWithFlowsUpdatesFilterSetup(
|
) = doInSubContextWithFlowsUpdatesFilterSetup(
|
||||||
newFlowsUpdatesFilterSetUp = updatesFilter ?.let {
|
newFlowsUpdatesFilterSetUp = updatesFilter ?.let {
|
||||||
{ oldOne ->
|
{ oldOne ->
|
||||||
oldOne.allUpdatesFlow.filter { updatesFilter(it) }.subscribeSafelyWithoutExceptions(scope, asUpdateReceiver)
|
oldOne.allUpdatesFlow.filter { updatesFilter(it) }.subscribeSafelyWithoutExceptions(scope, asUpdateReceiver)
|
||||||
}
|
}
|
||||||
|
} ?: { oldOne ->
|
||||||
|
oldOne.allUpdatesFlow.subscribeSafelyWithoutExceptions(scope, asUpdateReceiver)
|
||||||
},
|
},
|
||||||
|
stopOnCompletion,
|
||||||
behaviourContextReceiver
|
behaviourContextReceiver
|
||||||
)
|
)
|
||||||
|
|
||||||
suspend fun <T> BehaviourContext.doInSubContext(
|
suspend fun <T> BehaviourContext.doInSubContext(
|
||||||
|
stopOnCompletion: Boolean = true,
|
||||||
behaviourContextReceiver: BehaviourContextReceiver<T>
|
behaviourContextReceiver: BehaviourContextReceiver<T>
|
||||||
) = doInSubContextWithFlowsUpdatesFilterSetup(newFlowsUpdatesFilterSetUp = null, behaviourContextReceiver)
|
) = doInSubContextWithUpdatesFilter(updatesFilter = null, stopOnCompletion, behaviourContextReceiver)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method will cancel ALL subsequent contexts, expectations and waiters
|
* This method will cancel ALL subsequent contexts, expectations and waiters
|
||||||
|
@ -28,6 +28,7 @@ import dev.inmo.tgbotapi.types.buttons.*
|
|||||||
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.*
|
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.*
|
||||||
import dev.inmo.tgbotapi.types.chat.abstracts.*
|
import dev.inmo.tgbotapi.types.chat.abstracts.*
|
||||||
import dev.inmo.tgbotapi.types.chat.abstracts.extended.*
|
import dev.inmo.tgbotapi.types.chat.abstracts.extended.*
|
||||||
|
import dev.inmo.tgbotapi.types.dice.*
|
||||||
import dev.inmo.tgbotapi.types.files.*
|
import dev.inmo.tgbotapi.types.files.*
|
||||||
import dev.inmo.tgbotapi.types.files.abstracts.*
|
import dev.inmo.tgbotapi.types.files.abstracts.*
|
||||||
import dev.inmo.tgbotapi.types.message.*
|
import dev.inmo.tgbotapi.types.message.*
|
||||||
@ -1216,3 +1217,31 @@ inline fun TextSource.requireURLTextSource(): URLTextSource = this as URLTextSou
|
|||||||
inline fun TextSource.asUnderlineTextSource(): UnderlineTextSource? = this as? UnderlineTextSource
|
inline fun TextSource.asUnderlineTextSource(): UnderlineTextSource? = this as? UnderlineTextSource
|
||||||
@PreviewFeature
|
@PreviewFeature
|
||||||
inline fun TextSource.requireUnderlineTextSource(): UnderlineTextSource = this as UnderlineTextSource
|
inline fun TextSource.requireUnderlineTextSource(): UnderlineTextSource = this as UnderlineTextSource
|
||||||
|
@PreviewFeature
|
||||||
|
inline fun DiceAnimationType.asBasketballDiceAnimationType(): BasketballDiceAnimationType? = this as? BasketballDiceAnimationType
|
||||||
|
@PreviewFeature
|
||||||
|
inline fun DiceAnimationType.requireBasketballDiceAnimationType(): BasketballDiceAnimationType = this as BasketballDiceAnimationType
|
||||||
|
@PreviewFeature
|
||||||
|
inline fun DiceAnimationType.asBowlingDiceAnimationType(): BowlingDiceAnimationType? = this as? BowlingDiceAnimationType
|
||||||
|
@PreviewFeature
|
||||||
|
inline fun DiceAnimationType.requireBowlingDiceAnimationType(): BowlingDiceAnimationType = this as BowlingDiceAnimationType
|
||||||
|
@PreviewFeature
|
||||||
|
inline fun DiceAnimationType.asCubeDiceAnimationType(): CubeDiceAnimationType? = this as? CubeDiceAnimationType
|
||||||
|
@PreviewFeature
|
||||||
|
inline fun DiceAnimationType.requireCubeDiceAnimationType(): CubeDiceAnimationType = this as CubeDiceAnimationType
|
||||||
|
@PreviewFeature
|
||||||
|
inline fun DiceAnimationType.asCustomDiceAnimationType(): CustomDiceAnimationType? = this as? CustomDiceAnimationType
|
||||||
|
@PreviewFeature
|
||||||
|
inline fun DiceAnimationType.requireCustomDiceAnimationType(): CustomDiceAnimationType = this as CustomDiceAnimationType
|
||||||
|
@PreviewFeature
|
||||||
|
inline fun DiceAnimationType.asDartsDiceAnimationType(): DartsDiceAnimationType? = this as? DartsDiceAnimationType
|
||||||
|
@PreviewFeature
|
||||||
|
inline fun DiceAnimationType.requireDartsDiceAnimationType(): DartsDiceAnimationType = this as DartsDiceAnimationType
|
||||||
|
@PreviewFeature
|
||||||
|
inline fun DiceAnimationType.asFootballDiceAnimationType(): FootballDiceAnimationType? = this as? FootballDiceAnimationType
|
||||||
|
@PreviewFeature
|
||||||
|
inline fun DiceAnimationType.requireFootballDiceAnimationType(): FootballDiceAnimationType = this as FootballDiceAnimationType
|
||||||
|
@PreviewFeature
|
||||||
|
inline fun DiceAnimationType.asSlotMachineDiceAnimationType(): SlotMachineDiceAnimationType? = this as? SlotMachineDiceAnimationType
|
||||||
|
@PreviewFeature
|
||||||
|
inline fun DiceAnimationType.requireSlotMachineDiceAnimationType(): SlotMachineDiceAnimationType = this as SlotMachineDiceAnimationType
|
||||||
|
Loading…
Reference in New Issue
Block a user