package dev.inmo.tgbotapi.extensions.utils.updates import dev.inmo.tgbotapi.extensions.utils.* import dev.inmo.tgbotapi.types.message.abstracts.CommonMessage import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage import dev.inmo.tgbotapi.types.message.content.TextContent import dev.inmo.tgbotapi.types.message.textsources.BotCommandTextSource import dev.inmo.tgbotapi.utils.extensions.threadIdOrNull /** * 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::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 = withContentOrNull() ?.content ?.textSources ?.any { it is BotCommandTextSource } ?: 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::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() /** * A predicate to test that message has been sent in the forum. * Use it as the `initialFilter` parameter in behaviour builder triggers. * E.g. * * ```kotlin * onContentMessage( * initialFilter = Message::forumMessage * ) { * // The message here will be from forum * } * ``` * * @return true if this [AccessibleMessage] is from forum ([threadIdOrNull] is not null). False otherwise. * @see notForumMessage */ fun AccessibleMessage.forumMessage(): Boolean = threadIdOrNull != null /** * A predicate to test that message has not been sent in the forum. * Use it as the `initialFilter` parameter in behaviour builder triggers. * E.g. * * ```kotlin * onContentMessage( * initialFilter = Message::notForumMessage * ) { * // The message here will not be from forum * } * ``` * * @return true if this [AccessibleMessage] is not from forum ([threadIdOrNull] is not null). False otherwise. * @see forumMessage */ fun AccessibleMessage.notForumMessage(): Boolean = !forumMessage()