2020-10-04 10:57:39 +00:00
|
|
|
package dev.inmo.tgbotapi.extensions.utils
|
2020-06-05 08:57:58 +00:00
|
|
|
|
2020-10-04 11:06:30 +00:00
|
|
|
import dev.inmo.tgbotapi.types.message.abstracts.*
|
2023-02-13 05:49:36 +00:00
|
|
|
import dev.inmo.tgbotapi.types.message.content.MediaGroupContent
|
2022-05-01 05:52:02 +00:00
|
|
|
import dev.inmo.tgbotapi.types.message.content.MessageContent
|
2020-06-05 08:57:58 +00:00
|
|
|
import kotlinx.coroutines.flow.*
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Simple factory to convert [ContentMessage] to a [CommonMessage]
|
|
|
|
*/
|
|
|
|
fun <C: MessageContent, T : ContentMessage<C>> Flow<T>.onlyCommonMessages() = filterIsInstance<CommonMessage<C>>()
|
|
|
|
|
2020-09-13 18:12:28 +00:00
|
|
|
/**
|
|
|
|
* Shortcut for [onlyCommonMessages]
|
|
|
|
*/
|
|
|
|
@Suppress("NOTHING_TO_INLINE")
|
|
|
|
inline fun <C: MessageContent, T : ContentMessage<C>> Flow<T>.commonMessages() = onlyCommonMessages()
|
|
|
|
|
2020-06-05 08:57:58 +00:00
|
|
|
/**
|
|
|
|
* Filter the messages and checking that incoming [CommonMessage] is [PossiblySentViaBotCommonMessage] and its
|
|
|
|
* [PossiblySentViaBotCommonMessage.senderBot] is not null
|
|
|
|
*/
|
2020-09-13 18:12:28 +00:00
|
|
|
fun <MC : MessageContent, M : ContentMessage<MC>> Flow<M>.onlySentViaBot() = mapNotNull {
|
|
|
|
if (it is PossiblySentViaBot && it.senderBot != null) {
|
|
|
|
it
|
|
|
|
} else {
|
|
|
|
null
|
2020-06-05 08:57:58 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Filter the messages and checking that incoming [CommonMessage] not is [PossiblySentViaBotCommonMessage] or its
|
|
|
|
* [PossiblySentViaBotCommonMessage.senderBot] is null
|
|
|
|
*/
|
2020-09-13 18:12:28 +00:00
|
|
|
fun <MC : MessageContent, M : ContentMessage<MC>> Flow<M>.withoutSentViaBot() = filter {
|
|
|
|
it !is PossiblySentViaBot || it.senderBot == null
|
2020-06-05 08:57:58 +00:00
|
|
|
}
|
2023-02-13 05:49:36 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Filter the messages and checking that incoming [ContentMessage.content] is not [MediaGroupContent]
|
|
|
|
*/
|
|
|
|
fun <MC : MessageContent, M : ContentMessage<MC>> Flow<M>.withoutMediaGroups() = filter {
|
|
|
|
it.content !is MediaGroupContent<*>
|
|
|
|
}
|