Add `hasCommands` / `hasNoCommands` extensions on `CommonMessage`
These extensions are meant to be used as arguments to the `initialFilter` parameter in behaviour builder triggers.
MODIFY
CHANGELOG.md
CHANGELOG.md
# TelegramBotAPI changelog
+## 3.4.0
+
+* `Utils`:
+ * New extensions on `CommonMessage`: `hasCommands` and `hasNoCommands`. Useful for the `initialFilter` parameter in behaviour builder triggers.
+
## 3.3.0
**THIS VERSION CONTAINS UPGRADE KOTLIN (AND ALL RELATED LIBRARIES) UP TO 1.7.20**

ADD
tgbotapi.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/updates/MessageFilters.kt
+package dev.inmo.tgbotapi.extensions.utils.updates
+
+import dev.inmo.tgbotapi.extensions.utils.botCommandTextSourceOrNull
+import dev.inmo.tgbotapi.types.message.abstracts.CommonMessage
+import dev.inmo.tgbotapi.types.message.content.TextContent
+
+/**
+ * A predicate to test whether a message contains any commands in its body.
+ * Use it as the `initialFilter` parameter in behaviour builder triggers.
+ * E.g.
+ *
+ * ```kotlin
+ * onContentMessage(
+ * initialFilter = CommonMessage<MessageContent>::hasCommands
+ * ) {
+ * // the message contains at least one command here
+ * }
+ * ```
+ *
+ * @return true if this [CommonMessage] contains any commands. False otherwise.
+ * @see hasNoCommands
+ */
+fun CommonMessage<*>.hasCommands(): Boolean =
+ (this.content as? TextContent)?.textSources?.any { it.botCommandTextSourceOrNull() != null } ?: false
+
+/**
+ * A predicate to test whether a message contains any commands in its body.
+ * Use it as the `initialFilter` parameter in behaviour builder triggers.
+ * E.g.
+ *
+ * ```kotlin
+ * onContentMessage(
+ * initialFilter = CommonMessage<MessageContent>::hasNoCommands
+ * ) {
+ * // the message contains no commands here
+ * }
+ * ```
+ *
+ * @return true if this [CommonMessage] does not contain any commands. False otherwise.
+ * @see hasCommands
+ */
+fun CommonMessage<*>.hasNoCommands(): Boolean = !this.hasCommands()

Add `hasCommands` / `hasNoCommands` extensions on `CommonMessage`

These extensions are meant to be used as arguments to the `initialFilter` parameter in behaviour builder triggers.