mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2025-12-27 00:19:24 +00:00
Compare commits
7 Commits
e66537ee32
...
95011e2b3e
| Author | SHA1 | Date | |
|---|---|---|---|
| 95011e2b3e | |||
| cad0bf8a95 | |||
| f760e60089 | |||
| 6c76e1c47a | |||
| b5f4219635 | |||
| 5190f7b856 | |||
| 14756fd6e8 |
@@ -6,9 +6,8 @@ import dev.inmo.tgbotapi.types.ChatIdentifier
|
||||
import dev.inmo.tgbotapi.types.MessageId
|
||||
import dev.inmo.tgbotapi.types.chat.Chat
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupCollectionContent
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupContent
|
||||
|
||||
suspend fun TelegramBot.deleteMessage(
|
||||
chatId: ChatIdentifier,
|
||||
@@ -23,7 +22,7 @@ suspend fun TelegramBot.deleteMessage(
|
||||
) = deleteMessage(chat.id, messageId)
|
||||
|
||||
suspend fun TelegramBot.deleteMessage(
|
||||
message: Message
|
||||
message: AccessibleMessage
|
||||
): Boolean {
|
||||
val mediaGroupContent = ((message as? ContentMessage<*>) ?.content as? MediaGroupCollectionContent<*>)
|
||||
if (mediaGroupContent == null) {
|
||||
@@ -46,9 +45,9 @@ suspend fun TelegramBot.delete(
|
||||
) = deleteMessage(chat, messageId)
|
||||
|
||||
suspend fun TelegramBot.delete(
|
||||
message: Message
|
||||
message: AccessibleMessage
|
||||
) = deleteMessage(message)
|
||||
|
||||
suspend fun Message.delete(
|
||||
suspend fun AccessibleMessage.delete(
|
||||
requestsExecutor: TelegramBot
|
||||
) = requestsExecutor.deleteMessage(this)
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
package dev.inmo.tgbotapi.extensions.api
|
||||
|
||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
||||
import dev.inmo.tgbotapi.requests.DeleteMessage
|
||||
import dev.inmo.tgbotapi.requests.DeleteMessages
|
||||
import dev.inmo.tgbotapi.requests.ForwardMessages
|
||||
import dev.inmo.tgbotapi.types.*
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
|
||||
suspend fun TelegramBot.deleteMessages(
|
||||
chatId: ChatIdentifier,
|
||||
@@ -37,7 +35,7 @@ suspend fun TelegramBot.deleteMessages(
|
||||
)
|
||||
|
||||
suspend fun TelegramBot.deleteMessages(
|
||||
messages: List<Message>
|
||||
messages: List<AccessibleMessage>
|
||||
) = messages.groupBy { it.chat }.map { (chat, messages) ->
|
||||
deleteMessages(
|
||||
chatId = chat.id,
|
||||
@@ -63,5 +61,5 @@ suspend fun TelegramBot.delete(
|
||||
) = deleteMessages(chatId = chatId, messageIds = (listOf(firstMessageId, secondMessageId) + messageIds.toList()))
|
||||
|
||||
suspend fun TelegramBot.delete(
|
||||
messages: List<Message>
|
||||
messages: List<AccessibleMessage>
|
||||
) = deleteMessages(messages)
|
||||
|
||||
@@ -6,7 +6,7 @@ import dev.inmo.tgbotapi.types.ChatIdentifier
|
||||
import dev.inmo.tgbotapi.types.MessageId
|
||||
import dev.inmo.tgbotapi.types.MessageThreadId
|
||||
import dev.inmo.tgbotapi.types.chat.Chat
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
import dev.inmo.tgbotapi.types.threadId
|
||||
|
||||
suspend fun TelegramBot.forwardMessage(
|
||||
@@ -49,7 +49,7 @@ suspend fun TelegramBot.forwardMessage(
|
||||
|
||||
suspend fun TelegramBot.forwardMessage(
|
||||
toChatId: ChatIdentifier,
|
||||
message: Message,
|
||||
message: AccessibleMessage,
|
||||
threadId: MessageThreadId? = toChatId.threadId,
|
||||
disableNotification: Boolean = false,
|
||||
protectContent: Boolean = false
|
||||
@@ -57,7 +57,7 @@ suspend fun TelegramBot.forwardMessage(
|
||||
|
||||
suspend fun TelegramBot.forwardMessage(
|
||||
toChat: Chat,
|
||||
message: Message,
|
||||
message: AccessibleMessage,
|
||||
threadId: MessageThreadId? = toChat.id.threadId,
|
||||
disableNotification: Boolean = false,
|
||||
protectContent: Boolean = false
|
||||
|
||||
@@ -3,7 +3,7 @@ package dev.inmo.tgbotapi.extensions.api
|
||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
||||
import dev.inmo.tgbotapi.requests.ForwardMessages
|
||||
import dev.inmo.tgbotapi.types.*
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
|
||||
suspend fun TelegramBot.forwardMessages(
|
||||
toChatId: ChatIdentifier,
|
||||
@@ -66,7 +66,7 @@ suspend fun TelegramBot.forwardMessages(
|
||||
|
||||
suspend fun TelegramBot.forwardMessages(
|
||||
toChatId: ChatIdentifier,
|
||||
messages: List<Message>,
|
||||
messages: List<AccessibleMessage>,
|
||||
threadId: MessageThreadId? = toChatId.threadId,
|
||||
disableNotification: Boolean = false,
|
||||
protectContent: Boolean = false,
|
||||
@@ -141,7 +141,7 @@ suspend fun TelegramBot.forward(
|
||||
|
||||
suspend fun TelegramBot.forward(
|
||||
toChatId: ChatIdentifier,
|
||||
messages: List<Message>,
|
||||
messages: List<AccessibleMessage>,
|
||||
threadId: MessageThreadId? = toChatId.threadId,
|
||||
disableNotification: Boolean = false,
|
||||
protectContent: Boolean = false,
|
||||
|
||||
@@ -2,39 +2,24 @@ package dev.inmo.tgbotapi.extensions.api
|
||||
|
||||
import korlibs.time.DateTime
|
||||
import korlibs.time.TimeSpan
|
||||
import dev.inmo.micro_utils.coroutines.LinkedSupervisorJob
|
||||
import dev.inmo.micro_utils.coroutines.launchSafelyWithoutExceptions
|
||||
import dev.inmo.tgbotapi.abstracts.types.WithReplyMarkup
|
||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
||||
import dev.inmo.tgbotapi.extensions.api.edit.edit
|
||||
import dev.inmo.tgbotapi.extensions.api.edit.location.live.editLiveLocation
|
||||
import dev.inmo.tgbotapi.extensions.api.edit.location.live.stopLiveLocation
|
||||
import dev.inmo.tgbotapi.extensions.api.send.send
|
||||
import dev.inmo.tgbotapi.extensions.api.send.sendLiveLocation
|
||||
import dev.inmo.tgbotapi.requests.send.SendLiveLocation
|
||||
import dev.inmo.tgbotapi.types.*
|
||||
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup
|
||||
import dev.inmo.tgbotapi.types.buttons.KeyboardMarkup
|
||||
import dev.inmo.tgbotapi.types.chat.Chat
|
||||
import dev.inmo.tgbotapi.types.location.LiveLocation
|
||||
import dev.inmo.tgbotapi.types.location.Location
|
||||
import dev.inmo.tgbotapi.types.location.StaticLocation
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
import dev.inmo.tgbotapi.types.message.content.LocationContent
|
||||
import dev.inmo.tgbotapi.utils.extensions.threadIdOrNull
|
||||
import io.ktor.utils.io.core.Closeable
|
||||
import korlibs.time.millisecondsLong
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.CoroutineStart
|
||||
import kotlinx.coroutines.currentCoroutineContext
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.isActive
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlin.js.JsName
|
||||
import kotlin.jvm.JvmName
|
||||
import kotlin.math.ceil
|
||||
|
||||
val defaultLivePeriodDelayMillis = (livePeriodLimit.last - 60L) * 1000L
|
||||
@@ -253,7 +238,7 @@ suspend fun TelegramBot.startLiveLocation(
|
||||
* [dev.inmo.tgbotapi.extensions.utils.types.buttons.inlineKeyboard] as a builders for that param
|
||||
*/
|
||||
suspend inline fun TelegramBot.replyWithLiveLocation(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
scope: CoroutineScope,
|
||||
latitude: Double,
|
||||
longitude: Double,
|
||||
@@ -288,7 +273,7 @@ suspend inline fun TelegramBot.replyWithLiveLocation(
|
||||
* [dev.inmo.tgbotapi.extensions.utils.types.buttons.inlineKeyboard] as a builders for that param
|
||||
*/
|
||||
suspend inline fun TelegramBot.replyWithLiveLocation(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
scope: CoroutineScope,
|
||||
location: StaticLocation,
|
||||
liveTimeMillis: Long = defaultLivePeriodDelayMillis,
|
||||
|
||||
@@ -5,7 +5,7 @@ import dev.inmo.tgbotapi.requests.StopPoll
|
||||
import dev.inmo.tgbotapi.types.*
|
||||
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup
|
||||
import dev.inmo.tgbotapi.types.chat.Chat
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
|
||||
/**
|
||||
* @param replyMarkup Some [InlineKeyboardMarkup]. See [dev.inmo.tgbotapi.extensions.utils.types.buttons.inlineKeyboard]
|
||||
@@ -35,7 +35,7 @@ suspend fun TelegramBot.stopPoll(
|
||||
*/
|
||||
suspend fun TelegramBot.stopPoll(
|
||||
chatId: IdChatIdentifier,
|
||||
message: Message,
|
||||
message: AccessibleMessage,
|
||||
replyMarkup: InlineKeyboardMarkup? = null
|
||||
) = stopPoll(chatId, message.messageId, replyMarkup)
|
||||
|
||||
@@ -45,6 +45,6 @@ suspend fun TelegramBot.stopPoll(
|
||||
*/
|
||||
suspend fun TelegramBot.stopPoll(
|
||||
chat: Chat,
|
||||
message: Message,
|
||||
message: AccessibleMessage,
|
||||
replyMarkup: InlineKeyboardMarkup? = null
|
||||
) = stopPoll(chat.id, message.messageId, replyMarkup)
|
||||
|
||||
@@ -5,7 +5,7 @@ import dev.inmo.tgbotapi.requests.chat.modify.PinChatMessage
|
||||
import dev.inmo.tgbotapi.types.ChatIdentifier
|
||||
import dev.inmo.tgbotapi.types.MessageId
|
||||
import dev.inmo.tgbotapi.types.chat.Chat
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
|
||||
suspend fun TelegramBot.pinChatMessage(
|
||||
chatId: ChatIdentifier,
|
||||
@@ -20,6 +20,6 @@ suspend fun TelegramBot.pinChatMessage(
|
||||
) = pinChatMessage(chat.id, messageId, disableNotification)
|
||||
|
||||
suspend fun TelegramBot.pinChatMessage(
|
||||
message: Message,
|
||||
message: AccessibleMessage,
|
||||
disableNotification: Boolean = false
|
||||
) = pinChatMessage(message.chat.id, message.messageId, disableNotification)
|
||||
|
||||
@@ -5,7 +5,7 @@ import dev.inmo.tgbotapi.requests.chat.modify.UnpinChatMessage
|
||||
import dev.inmo.tgbotapi.types.ChatIdentifier
|
||||
import dev.inmo.tgbotapi.types.MessageId
|
||||
import dev.inmo.tgbotapi.types.chat.Chat
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
|
||||
suspend fun TelegramBot.unpinChatMessage(
|
||||
chatId: ChatIdentifier,
|
||||
@@ -18,5 +18,5 @@ suspend fun TelegramBot.unpinChatMessage(
|
||||
) = unpinChatMessage(chat.id, messageId)
|
||||
|
||||
suspend fun TelegramBot.unpinChatMessage(
|
||||
message: Message
|
||||
message: AccessibleMessage
|
||||
) = unpinChatMessage(message.chat.id, message.messageId)
|
||||
|
||||
@@ -14,7 +14,7 @@ import dev.inmo.tgbotapi.types.location.LiveLocation
|
||||
import dev.inmo.tgbotapi.types.media.TelegramMedia
|
||||
import dev.inmo.tgbotapi.types.message.ParseMode
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
import dev.inmo.tgbotapi.types.message.content.*
|
||||
import dev.inmo.tgbotapi.types.message.textsources.TextSource
|
||||
import dev.inmo.tgbotapi.types.message.textsources.TextSourcesList
|
||||
@@ -181,7 +181,7 @@ suspend fun TelegramBot.edit(
|
||||
* as a builder for that
|
||||
*/
|
||||
suspend fun TelegramBot.edit(
|
||||
message: Message,
|
||||
message: AccessibleMessage,
|
||||
replyMarkup: InlineKeyboardMarkup? = null
|
||||
) = editMessageReplyMarkup(message, replyMarkup)
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ import dev.inmo.tgbotapi.types.message.ParseMode
|
||||
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup
|
||||
import dev.inmo.tgbotapi.types.chat.Chat
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaContent
|
||||
import dev.inmo.tgbotapi.utils.RiskFeature
|
||||
|
||||
@@ -98,7 +98,7 @@ suspend fun <T> TelegramBot.editMessageCaption(
|
||||
*/
|
||||
@RiskFeature("This method is unsafe due to absence of any guaranties about the type of message. In case if message is not media message this method will throw an exception")
|
||||
suspend fun <T> TelegramBot.editMessageCaption(
|
||||
message: Message,
|
||||
message: AccessibleMessage,
|
||||
entities: List<TextSource>,
|
||||
replyMarkup: InlineKeyboardMarkup? = null
|
||||
): ContentMessage<MediaContent> where T : TextedWithTextSources, T : MediaContent {
|
||||
|
||||
@@ -6,7 +6,7 @@ import dev.inmo.tgbotapi.types.ChatIdentifier
|
||||
import dev.inmo.tgbotapi.types.MessageId
|
||||
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup
|
||||
import dev.inmo.tgbotapi.types.chat.Chat
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
|
||||
/**
|
||||
* @param replyMarkup Some [InlineKeyboardMarkup]. See [dev.inmo.tgbotapi.extensions.utils.types.buttons.inlineKeyboard]
|
||||
@@ -35,7 +35,7 @@ suspend fun TelegramBot.editMessageReplyMarkup(
|
||||
* as a builder for that
|
||||
*/
|
||||
suspend fun TelegramBot.editMessageReplyMarkup(
|
||||
message: Message,
|
||||
message: AccessibleMessage,
|
||||
replyMarkup: InlineKeyboardMarkup? = null
|
||||
) = editMessageReplyMarkup(message.chat.id, message.messageId, replyMarkup)
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ import dev.inmo.tgbotapi.types.message.ParseMode
|
||||
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup
|
||||
import dev.inmo.tgbotapi.types.chat.Chat
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
import dev.inmo.tgbotapi.types.message.content.TextContent
|
||||
import dev.inmo.tgbotapi.types.message.textsources.TextSource
|
||||
import dev.inmo.tgbotapi.utils.*
|
||||
@@ -174,7 +174,7 @@ suspend fun TelegramBot.editMessageText(
|
||||
*/
|
||||
@RiskFeature("This method is unsafe due to absence of any guaranties about the type of message. In case if message is not text message this method will throw an exception")
|
||||
suspend fun TelegramBot.editMessageText(
|
||||
message: Message,
|
||||
message: AccessibleMessage,
|
||||
entities: TextSourcesList,
|
||||
linkPreviewOptions: LinkPreviewOptions? = null,
|
||||
replyMarkup: InlineKeyboardMarkup? = null
|
||||
@@ -186,7 +186,7 @@ suspend fun TelegramBot.editMessageText(
|
||||
*/
|
||||
@RiskFeature("This method is unsafe due to absence of any guaranties about the type of message. In case if message is not text message this method will throw an exception")
|
||||
suspend fun TelegramBot.editMessageText(
|
||||
message: Message,
|
||||
message: AccessibleMessage,
|
||||
separator: TextSource? = null,
|
||||
linkPreviewOptions: LinkPreviewOptions? = null,
|
||||
replyMarkup: InlineKeyboardMarkup? = null,
|
||||
@@ -199,7 +199,7 @@ suspend fun TelegramBot.editMessageText(
|
||||
*/
|
||||
@RiskFeature("This method is unsafe due to absence of any guaranties about the type of message. In case if message is not text message this method will throw an exception")
|
||||
suspend fun TelegramBot.editMessageText(
|
||||
message: Message,
|
||||
message: AccessibleMessage,
|
||||
separator: String,
|
||||
linkPreviewOptions: LinkPreviewOptions? = null,
|
||||
replyMarkup: InlineKeyboardMarkup? = null,
|
||||
|
||||
@@ -9,7 +9,7 @@ import dev.inmo.tgbotapi.types.MessageThreadId
|
||||
import dev.inmo.tgbotapi.types.message.ParseMode
|
||||
import dev.inmo.tgbotapi.types.buttons.KeyboardMarkup
|
||||
import dev.inmo.tgbotapi.types.chat.Chat
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
import dev.inmo.tgbotapi.types.threadId
|
||||
|
||||
/**
|
||||
@@ -186,7 +186,7 @@ suspend inline fun TelegramBot.copyMessage(
|
||||
*/
|
||||
suspend inline fun TelegramBot.copyMessage(
|
||||
toChatId: ChatIdentifier,
|
||||
message: Message,
|
||||
message: AccessibleMessage,
|
||||
text: String? = null,
|
||||
parseMode: ParseMode? = null,
|
||||
threadId: MessageThreadId? = toChatId.threadId,
|
||||
@@ -203,7 +203,7 @@ suspend inline fun TelegramBot.copyMessage(
|
||||
*/
|
||||
suspend inline fun TelegramBot.copyMessage(
|
||||
toChat: Chat,
|
||||
message: Message,
|
||||
message: AccessibleMessage,
|
||||
text: String? = null,
|
||||
parseMode: ParseMode? = null,
|
||||
threadId: MessageThreadId? = toChat.id.threadId,
|
||||
@@ -220,7 +220,7 @@ suspend inline fun TelegramBot.copyMessage(
|
||||
*/
|
||||
suspend inline fun TelegramBot.copyMessage(
|
||||
toChatId: ChatIdentifier,
|
||||
message: Message,
|
||||
message: AccessibleMessage,
|
||||
entities: TextSourcesList,
|
||||
threadId: MessageThreadId? = toChatId.threadId,
|
||||
disableNotification: Boolean = false,
|
||||
@@ -236,7 +236,7 @@ suspend inline fun TelegramBot.copyMessage(
|
||||
*/
|
||||
suspend inline fun TelegramBot.copyMessage(
|
||||
toChat: Chat,
|
||||
message: Message,
|
||||
message: AccessibleMessage,
|
||||
entities: TextSourcesList,
|
||||
threadId: MessageThreadId? = toChat.id.threadId,
|
||||
disableNotification: Boolean = false,
|
||||
|
||||
@@ -3,7 +3,7 @@ package dev.inmo.tgbotapi.extensions.api.send
|
||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
||||
import dev.inmo.tgbotapi.requests.send.CopyMessages
|
||||
import dev.inmo.tgbotapi.types.*
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
|
||||
suspend fun TelegramBot.copyMessages(
|
||||
toChatId: ChatIdentifier,
|
||||
@@ -66,7 +66,7 @@ suspend fun TelegramBot.copyMessages(
|
||||
|
||||
suspend fun TelegramBot.copyMessages(
|
||||
toChatId: ChatIdentifier,
|
||||
messages: List<Message>,
|
||||
messages: List<AccessibleMessage>,
|
||||
threadId: MessageThreadId? = toChatId.threadId,
|
||||
disableNotification: Boolean = false,
|
||||
protectContent: Boolean = false,
|
||||
|
||||
@@ -22,8 +22,7 @@ import dev.inmo.tgbotapi.types.files.TelegramMediaFile
|
||||
import dev.inmo.tgbotapi.types.files.Sticker
|
||||
import dev.inmo.tgbotapi.types.games.Game
|
||||
import dev.inmo.tgbotapi.types.location.*
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.PossiblyTopicMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
import dev.inmo.tgbotapi.types.message.content.*
|
||||
import dev.inmo.tgbotapi.types.message.textsources.TextSource
|
||||
import dev.inmo.tgbotapi.types.payments.LabeledPrice
|
||||
@@ -44,7 +43,7 @@ import kotlin.jvm.JvmName
|
||||
* [dev.inmo.tgbotapi.extensions.utils.types.buttons.inlineKeyboard] as a builders for that param
|
||||
*/
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
phoneNumber: String,
|
||||
firstName: String,
|
||||
lastName: String? = null,
|
||||
@@ -70,7 +69,7 @@ suspend inline fun TelegramBot.reply(
|
||||
* [dev.inmo.tgbotapi.extensions.utils.types.buttons.inlineKeyboard] as a builders for that param
|
||||
*/
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
contact: Contact,
|
||||
disableNotification: Boolean = false,
|
||||
protectContent: Boolean = false,
|
||||
@@ -95,7 +94,7 @@ suspend inline fun TelegramBot.reply(
|
||||
* [dev.inmo.tgbotapi.extensions.utils.types.buttons.inlineKeyboard] as a builders for that param
|
||||
*/
|
||||
suspend inline fun TelegramBot.replyWithDice(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
animationType: DiceAnimationType? = null,
|
||||
disableNotification: Boolean = false,
|
||||
protectContent: Boolean = false,
|
||||
@@ -108,7 +107,7 @@ suspend inline fun TelegramBot.replyWithDice(
|
||||
* [dev.inmo.tgbotapi.extensions.utils.types.buttons.inlineKeyboard] as a builders for that param
|
||||
*/
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
animationType: DiceAnimationType,
|
||||
disableNotification: Boolean = false,
|
||||
protectContent: Boolean = false,
|
||||
@@ -124,7 +123,7 @@ suspend inline fun TelegramBot.reply(
|
||||
* [dev.inmo.tgbotapi.extensions.utils.types.buttons.inlineKeyboard] as a builders for that param
|
||||
*/
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
latitude: Double,
|
||||
longitude: Double,
|
||||
disableNotification: Boolean = false,
|
||||
@@ -148,7 +147,7 @@ suspend inline fun TelegramBot.reply(
|
||||
* [dev.inmo.tgbotapi.extensions.utils.types.buttons.inlineKeyboard] as a builders for that param
|
||||
*/
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
location: StaticLocation,
|
||||
disableNotification: Boolean = false,
|
||||
protectContent: Boolean = false,
|
||||
@@ -173,7 +172,7 @@ suspend inline fun TelegramBot.reply(
|
||||
* [dev.inmo.tgbotapi.extensions.utils.types.buttons.inlineKeyboard] as a builders for that param
|
||||
*/
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
text: String,
|
||||
parseMode: ParseMode? = null,
|
||||
linkPreviewOptions: LinkPreviewOptions? = null,
|
||||
@@ -199,7 +198,7 @@ suspend inline fun TelegramBot.reply(
|
||||
* [dev.inmo.tgbotapi.extensions.utils.types.buttons.inlineKeyboard] as a builders for that param
|
||||
*/
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
entities: TextSourcesList,
|
||||
linkPreviewOptions: LinkPreviewOptions? = null,
|
||||
disableNotification: Boolean = false,
|
||||
@@ -223,7 +222,7 @@ suspend inline fun TelegramBot.reply(
|
||||
* as a builder for that
|
||||
*/
|
||||
suspend fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
separator: TextSource? = null,
|
||||
linkPreviewOptions: LinkPreviewOptions? = null,
|
||||
disableNotification: Boolean = false,
|
||||
@@ -238,7 +237,7 @@ suspend fun TelegramBot.reply(
|
||||
* as a builder for that
|
||||
*/
|
||||
suspend fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
separator: String,
|
||||
linkPreviewOptions: LinkPreviewOptions? = null,
|
||||
disableNotification: Boolean = false,
|
||||
@@ -256,7 +255,7 @@ suspend fun TelegramBot.reply(
|
||||
* [dev.inmo.tgbotapi.extensions.utils.types.buttons.inlineKeyboard] as a builders for that param
|
||||
*/
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
latitude: Double,
|
||||
longitude: Double,
|
||||
title: String,
|
||||
@@ -288,7 +287,7 @@ suspend inline fun TelegramBot.reply(
|
||||
)
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
location: StaticLocation,
|
||||
title: String,
|
||||
address: String,
|
||||
@@ -319,7 +318,7 @@ suspend inline fun TelegramBot.reply(
|
||||
)
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
venue: Venue,
|
||||
disableNotification: Boolean = false,
|
||||
protectContent: Boolean = false,
|
||||
@@ -340,7 +339,7 @@ suspend inline fun TelegramBot.reply(
|
||||
// Game
|
||||
|
||||
suspend inline fun TelegramBot.replyWithGame(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
gameShortName: String,
|
||||
disableNotification: Boolean = false,
|
||||
protectContent: Boolean = false,
|
||||
@@ -351,7 +350,7 @@ suspend inline fun TelegramBot.replyWithGame(
|
||||
)
|
||||
|
||||
suspend inline fun TelegramBot.replyWithGame(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
game: Game,
|
||||
disableNotification: Boolean = false,
|
||||
protectContent: Boolean = false,
|
||||
@@ -362,7 +361,7 @@ suspend inline fun TelegramBot.replyWithGame(
|
||||
)
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
game: Game,
|
||||
disableNotification: Boolean = false,
|
||||
protectContent: Boolean = false,
|
||||
@@ -374,7 +373,7 @@ suspend inline fun TelegramBot.reply(
|
||||
// Animation
|
||||
|
||||
suspend inline fun TelegramBot.replyWithAnimation(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
animation: InputFile,
|
||||
thumb: InputFile? = null,
|
||||
text: String? = null,
|
||||
@@ -406,7 +405,7 @@ suspend inline fun TelegramBot.replyWithAnimation(
|
||||
)
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
animation: AnimationFile,
|
||||
text: String? = null,
|
||||
parseMode: ParseMode? = null,
|
||||
@@ -421,7 +420,7 @@ suspend inline fun TelegramBot.reply(
|
||||
) = sendAnimation(to.chat, animation, text, parseMode, spoilered, duration, width, height, to.threadIdOrNull, disableNotification, protectContent, to.messageId, allowSendingWithoutReply, replyMarkup)
|
||||
|
||||
suspend inline fun TelegramBot.replyWithAnimation(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
animation: InputFile,
|
||||
entities: TextSourcesList,
|
||||
spoilered: Boolean = false,
|
||||
@@ -451,7 +450,7 @@ suspend inline fun TelegramBot.replyWithAnimation(
|
||||
)
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
animation: AnimationFile,
|
||||
entities: TextSourcesList,
|
||||
spoilered: Boolean = false,
|
||||
@@ -468,7 +467,7 @@ suspend inline fun TelegramBot.reply(
|
||||
// Audio
|
||||
|
||||
suspend inline fun TelegramBot.replyWithAudio(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
audio: InputFile,
|
||||
thumb: InputFile? = null,
|
||||
text: String? = null,
|
||||
@@ -483,7 +482,7 @@ suspend inline fun TelegramBot.replyWithAudio(
|
||||
) = sendAudio(to.chat, audio, thumb, text, parseMode, duration, performer, title, to.threadIdOrNull, disableNotification, protectContent, to.messageId, allowSendingWithoutReply, replyMarkup)
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
audio: AudioFile,
|
||||
text: String? = null,
|
||||
parseMode: ParseMode? = null,
|
||||
@@ -495,7 +494,7 @@ suspend inline fun TelegramBot.reply(
|
||||
) = sendAudio(to.chat, audio, text, parseMode, title, to.threadIdOrNull, disableNotification, protectContent, to.messageId, allowSendingWithoutReply, replyMarkup)
|
||||
|
||||
suspend inline fun TelegramBot.replyWithAudio(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
audio: InputFile,
|
||||
thumb: InputFile? = null,
|
||||
entities: TextSourcesList,
|
||||
@@ -509,7 +508,7 @@ suspend inline fun TelegramBot.replyWithAudio(
|
||||
) = sendAudio(to.chat, audio, thumb, entities, duration, performer, title, to.threadIdOrNull, disableNotification, protectContent, to.messageId, allowSendingWithoutReply, replyMarkup)
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
audio: AudioFile,
|
||||
entities: TextSourcesList,
|
||||
title: String? = null,
|
||||
@@ -523,7 +522,7 @@ suspend inline fun TelegramBot.reply(
|
||||
// Documents
|
||||
|
||||
suspend inline fun TelegramBot.replyWithDocument(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
document: InputFile,
|
||||
thumb: InputFile? = null,
|
||||
text: String? = null,
|
||||
@@ -536,7 +535,7 @@ suspend inline fun TelegramBot.replyWithDocument(
|
||||
) = sendDocument(to.chat, document, thumb, text, parseMode, to.threadIdOrNull, disableNotification, protectContent, to.messageId, allowSendingWithoutReply, replyMarkup, disableContentTypeDetection)
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
document: DocumentFile,
|
||||
text: String? = null,
|
||||
parseMode: ParseMode? = null,
|
||||
@@ -548,7 +547,7 @@ suspend inline fun TelegramBot.reply(
|
||||
) = sendDocument(to.chat, document, text, parseMode, to.threadIdOrNull, disableNotification, protectContent, to.messageId, allowSendingWithoutReply, replyMarkup, disableContentTypeDetection)
|
||||
|
||||
suspend inline fun TelegramBot.replyWithDocument(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
document: InputFile,
|
||||
thumb: InputFile? = null,
|
||||
entities: TextSourcesList,
|
||||
@@ -560,7 +559,7 @@ suspend inline fun TelegramBot.replyWithDocument(
|
||||
) = sendDocument(to.chat, document, thumb, entities, to.threadIdOrNull, disableNotification, protectContent, to.messageId, allowSendingWithoutReply, replyMarkup, disableContentTypeDetection)
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
document: DocumentFile,
|
||||
entities: TextSourcesList,
|
||||
disableNotification: Boolean = false,
|
||||
@@ -575,7 +574,7 @@ suspend inline fun TelegramBot.reply(
|
||||
|
||||
@RiskFeature(rawSendingMediaGroupsWarning)
|
||||
suspend inline fun TelegramBot.replyWithMediaGroup(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
media: List<MediaGroupMemberTelegramMedia>,
|
||||
disableNotification: Boolean = false,
|
||||
protectContent: Boolean = false,
|
||||
@@ -583,7 +582,7 @@ suspend inline fun TelegramBot.replyWithMediaGroup(
|
||||
) = sendMediaGroup(to.chat, media, to.threadIdOrNull, disableNotification, protectContent, to.messageId, allowSendingWithoutReply)
|
||||
|
||||
suspend inline fun TelegramBot.replyWithPlaylist(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
media: List<AudioMediaGroupMemberTelegramMedia>,
|
||||
disableNotification: Boolean = false,
|
||||
protectContent: Boolean = false,
|
||||
@@ -591,7 +590,7 @@ suspend inline fun TelegramBot.replyWithPlaylist(
|
||||
) = sendPlaylist(to.chat, media, to.threadIdOrNull, disableNotification, protectContent, to.messageId, allowSendingWithoutReply)
|
||||
|
||||
suspend inline fun TelegramBot.replyWithDocuments(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
media: List<DocumentMediaGroupMemberTelegramMedia>,
|
||||
disableNotification: Boolean = false,
|
||||
protectContent: Boolean = false,
|
||||
@@ -599,7 +598,7 @@ suspend inline fun TelegramBot.replyWithDocuments(
|
||||
) = sendDocumentsGroup(to.chat, media, to.threadIdOrNull, disableNotification, protectContent, to.messageId, allowSendingWithoutReply)
|
||||
|
||||
suspend inline fun TelegramBot.replyWithGallery(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
media: List<VisualMediaGroupMemberTelegramMedia>,
|
||||
disableNotification: Boolean = false,
|
||||
protectContent: Boolean = false,
|
||||
@@ -610,7 +609,7 @@ suspend inline fun TelegramBot.replyWithGallery(
|
||||
// Photo
|
||||
|
||||
suspend inline fun TelegramBot.replyWithPhoto(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
fileId: InputFile,
|
||||
text: String? = null,
|
||||
parseMode: ParseMode? = null,
|
||||
@@ -622,7 +621,7 @@ suspend inline fun TelegramBot.replyWithPhoto(
|
||||
) = sendPhoto(to.chat, fileId, text, parseMode, spoilered, to.threadIdOrNull, disableNotification, protectContent, to.messageId, allowSendingWithoutReply, replyMarkup)
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
photo: Photo,
|
||||
text: String? = null,
|
||||
parseMode: ParseMode? = null,
|
||||
@@ -634,7 +633,7 @@ suspend inline fun TelegramBot.reply(
|
||||
) = sendPhoto(to.chat, photo, text, parseMode, spoilered, to.threadIdOrNull, disableNotification, protectContent, to.messageId, allowSendingWithoutReply, replyMarkup)
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
photoSize: PhotoSize,
|
||||
text: String? = null,
|
||||
parseMode: ParseMode? = null,
|
||||
@@ -647,7 +646,7 @@ suspend inline fun TelegramBot.reply(
|
||||
|
||||
|
||||
suspend inline fun TelegramBot.replyWithPhoto(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
fileId: InputFile,
|
||||
entities: TextSourcesList,
|
||||
spoilered: Boolean = false,
|
||||
@@ -658,7 +657,7 @@ suspend inline fun TelegramBot.replyWithPhoto(
|
||||
) = sendPhoto(to.chat, fileId, entities, spoilered, to.threadIdOrNull, disableNotification, protectContent, to.messageId, allowSendingWithoutReply, replyMarkup)
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
photo: Photo,
|
||||
entities: TextSourcesList,
|
||||
spoilered: Boolean = false,
|
||||
@@ -669,7 +668,7 @@ suspend inline fun TelegramBot.reply(
|
||||
) = sendPhoto(to.chat, photo, entities, spoilered, to.threadIdOrNull, disableNotification, protectContent, to.messageId, allowSendingWithoutReply, replyMarkup)
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
photoSize: PhotoSize,
|
||||
entities: TextSourcesList,
|
||||
spoilered: Boolean = false,
|
||||
@@ -683,7 +682,7 @@ suspend inline fun TelegramBot.reply(
|
||||
// Sticker
|
||||
|
||||
suspend inline fun TelegramBot.replyWithSticker(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
sticker: InputFile,
|
||||
emoji: String? = null,
|
||||
disableNotification: Boolean = false,
|
||||
@@ -693,7 +692,7 @@ suspend inline fun TelegramBot.replyWithSticker(
|
||||
) = sendSticker(to.chat, sticker, to.threadIdOrNull, emoji, disableNotification, protectContent, to.messageId, allowSendingWithoutReply, replyMarkup)
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
sticker: Sticker,
|
||||
emoji: String? = null,
|
||||
disableNotification: Boolean = false,
|
||||
@@ -706,7 +705,7 @@ suspend inline fun TelegramBot.reply(
|
||||
// Videos
|
||||
|
||||
suspend inline fun TelegramBot.replyWithVideo(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
video: InputFile,
|
||||
thumb: InputFile? = null,
|
||||
text: String? = null,
|
||||
@@ -722,7 +721,7 @@ suspend inline fun TelegramBot.replyWithVideo(
|
||||
) = sendVideo(to.chat, video, thumb, text, parseMode, spoilered, duration, width, height, to.threadIdOrNull, disableNotification, protectContent, to.messageId, allowSendingWithoutReply, replyMarkup)
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
video: VideoFile,
|
||||
text: String? = null,
|
||||
parseMode: ParseMode? = null,
|
||||
@@ -734,7 +733,7 @@ suspend inline fun TelegramBot.reply(
|
||||
) = sendVideo(to.chat, video, text, parseMode, spoilered, to.threadIdOrNull, disableNotification, protectContent, to.messageId, allowSendingWithoutReply, replyMarkup)
|
||||
|
||||
suspend inline fun TelegramBot.replyWithVideo(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
video: InputFile,
|
||||
thumb: InputFile? = null,
|
||||
entities: TextSourcesList,
|
||||
@@ -749,7 +748,7 @@ suspend inline fun TelegramBot.replyWithVideo(
|
||||
) = sendVideo(to.chat, video, thumb, entities, spoilered, duration, width, height, to.threadIdOrNull, disableNotification, protectContent, to.messageId, allowSendingWithoutReply, replyMarkup)
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
video: VideoFile,
|
||||
entities: TextSourcesList,
|
||||
spoilered: Boolean = false,
|
||||
@@ -763,7 +762,7 @@ suspend inline fun TelegramBot.reply(
|
||||
// VideoNotes
|
||||
|
||||
suspend inline fun TelegramBot.replyWithVideoNote(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
videoNote: InputFile,
|
||||
thumb: InputFile? = null,
|
||||
duration: Long? = null,
|
||||
@@ -775,7 +774,7 @@ suspend inline fun TelegramBot.replyWithVideoNote(
|
||||
) = sendVideoNote(to.chat, videoNote, thumb, duration, size, to.threadIdOrNull, disableNotification, protectContent, to.messageId, allowSendingWithoutReply, replyMarkup)
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
videoNote: VideoNoteFile,
|
||||
disableNotification: Boolean = false,
|
||||
protectContent: Boolean = false,
|
||||
@@ -787,7 +786,7 @@ suspend inline fun TelegramBot.reply(
|
||||
// Voice
|
||||
|
||||
suspend inline fun TelegramBot.replyWithVoice(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
voice: InputFile,
|
||||
text: String? = null,
|
||||
parseMode: ParseMode? = null,
|
||||
@@ -799,7 +798,7 @@ suspend inline fun TelegramBot.replyWithVoice(
|
||||
) = sendVoice(to.chat, voice, text, parseMode, duration, to.threadIdOrNull, disableNotification, protectContent, to.messageId, allowSendingWithoutReply, replyMarkup)
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
voice: VoiceFile,
|
||||
text: String? = null,
|
||||
parseMode: ParseMode? = null,
|
||||
@@ -811,7 +810,7 @@ suspend inline fun TelegramBot.reply(
|
||||
|
||||
|
||||
suspend inline fun TelegramBot.replyWithVoice(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
voice: InputFile,
|
||||
entities: TextSourcesList,
|
||||
duration: Long? = null,
|
||||
@@ -822,7 +821,7 @@ suspend inline fun TelegramBot.replyWithVoice(
|
||||
) = sendVoice(to.chat, voice, entities, duration, to.threadIdOrNull, disableNotification, protectContent, to.messageId, allowSendingWithoutReply, replyMarkup)
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
voice: VoiceFile,
|
||||
entities: TextSourcesList,
|
||||
disableNotification: Boolean = false,
|
||||
@@ -839,7 +838,7 @@ suspend inline fun TelegramBot.reply(
|
||||
* as a builder for that
|
||||
*/
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
title: String,
|
||||
description: String,
|
||||
payload: String,
|
||||
@@ -867,7 +866,7 @@ suspend inline fun TelegramBot.reply(
|
||||
// Polls
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
question: String,
|
||||
options: List<String>,
|
||||
isAnonymous: Boolean = true,
|
||||
@@ -881,7 +880,7 @@ suspend inline fun TelegramBot.reply(
|
||||
) = sendRegularPoll(to.chat, question, options, isAnonymous, isClosed, allowMultipleAnswers, closeInfo, to.threadIdOrNull, disableNotification, protectContent, to.messageId, allowSendingWithoutReply, replyMarkup)
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
poll: RegularPoll,
|
||||
isClosed: Boolean = false,
|
||||
question: String = poll.question,
|
||||
@@ -896,7 +895,7 @@ suspend inline fun TelegramBot.reply(
|
||||
) = sendRegularPoll(to.chat, poll, isClosed, question, options, isAnonymous, allowMultipleAnswers, closeInfo, to.threadIdOrNull, disableNotification, protectContent, to.messageId, allowSendingWithoutReply, replyMarkup)
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
question: String,
|
||||
options: List<String>,
|
||||
correctOptionId: Int,
|
||||
@@ -912,7 +911,7 @@ suspend inline fun TelegramBot.reply(
|
||||
) = sendQuizPoll(to.chat, question, options, correctOptionId, isAnonymous, isClosed, explanation, parseMode, closeInfo, to.threadIdOrNull, disableNotification, protectContent, to.messageId, allowSendingWithoutReply, replyMarkup)
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
quizPoll: QuizPoll,
|
||||
isClosed: Boolean = false,
|
||||
question: String = quizPoll.question,
|
||||
@@ -929,7 +928,7 @@ suspend inline fun TelegramBot.reply(
|
||||
) = sendQuizPoll(to.chat, isClosed, quizPoll, question, options, correctOptionId, isAnonymous, explanation, parseMode, closeInfo, to.threadIdOrNull, disableNotification, protectContent, to.messageId, allowSendingWithoutReply, replyMarkup)
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
question: String,
|
||||
options: List<String>,
|
||||
correctOptionId: Int,
|
||||
@@ -944,7 +943,7 @@ suspend inline fun TelegramBot.reply(
|
||||
) = sendQuizPoll(to.chat, question, options, correctOptionId, isAnonymous, isClosed, entities, closeInfo, to.threadIdOrNull, disableNotification, protectContent, to.messageId, allowSendingWithoutReply, replyMarkup)
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
quizPoll: QuizPoll,
|
||||
entities: TextSourcesList,
|
||||
isClosed: Boolean = false,
|
||||
@@ -961,7 +960,7 @@ suspend inline fun TelegramBot.reply(
|
||||
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
poll: Poll,
|
||||
isClosed: Boolean = false,
|
||||
question: String = poll.question,
|
||||
@@ -1006,7 +1005,7 @@ suspend inline fun TelegramBot.reply(
|
||||
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
fromChatId: ChatIdentifier,
|
||||
messageId: MessageId,
|
||||
text: String? = null,
|
||||
@@ -1030,7 +1029,7 @@ suspend inline fun TelegramBot.reply(
|
||||
)
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
fromChat: Chat,
|
||||
messageId: MessageId,
|
||||
text: String? = null,
|
||||
@@ -1042,8 +1041,8 @@ suspend inline fun TelegramBot.reply(
|
||||
) = reply(to, fromChat.id, messageId, text, parseMode, disableNotification, protectContent, allowSendingWithoutReply, replyMarkup)
|
||||
|
||||
suspend inline fun TelegramBot.reply(
|
||||
to: Message,
|
||||
copy: Message,
|
||||
to: AccessibleMessage,
|
||||
copy: AccessibleMessage,
|
||||
text: String? = null,
|
||||
parseMode: ParseMode? = null,
|
||||
disableNotification: Boolean = false,
|
||||
@@ -1053,13 +1052,13 @@ suspend inline fun TelegramBot.reply(
|
||||
) = reply(to, copy.chat.id, copy.messageId, text, parseMode, disableNotification, protectContent, allowSendingWithoutReply, replyMarkup)
|
||||
|
||||
suspend fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
content: MessageContent,
|
||||
disableNotification: Boolean = false,
|
||||
protectContent: Boolean = false,
|
||||
allowSendingWithoutReply: Boolean? = null,
|
||||
replyMarkup: KeyboardMarkup? = null
|
||||
): Message = execute(
|
||||
): AccessibleMessage = execute(
|
||||
content.createResend(
|
||||
to.chat.id,
|
||||
to.threadIdOrNull,
|
||||
@@ -1077,7 +1076,7 @@ suspend fun TelegramBot.reply(
|
||||
* @see handleLiveLocation
|
||||
*/
|
||||
suspend fun TelegramBot.reply(
|
||||
message: Message,
|
||||
message: AccessibleMessage,
|
||||
locationsFlow: Flow<EditLiveLocationInfo>,
|
||||
liveTimeMillis: Long = defaultLivePeriodDelayMillis,
|
||||
disableNotification: Boolean = false,
|
||||
@@ -1102,7 +1101,7 @@ suspend fun TelegramBot.reply(
|
||||
@JvmName("replyLiveLocationWithLocation")
|
||||
@JsName("replyLiveLocationWithLocation")
|
||||
suspend fun TelegramBot.reply(
|
||||
message: Message,
|
||||
message: AccessibleMessage,
|
||||
locationsFlow: Flow<Location>,
|
||||
liveTimeMillis: Long = defaultLivePeriodDelayMillis,
|
||||
disableNotification: Boolean = false,
|
||||
@@ -1129,7 +1128,7 @@ suspend fun TelegramBot.reply(
|
||||
@JvmName("replyLiveLocationWithLatLong")
|
||||
@JsName("replyLiveLocationWithLatLong")
|
||||
suspend fun TelegramBot.reply(
|
||||
message: Message,
|
||||
message: AccessibleMessage,
|
||||
locationsFlow: Flow<Pair<Double, Double>>,
|
||||
liveTimeMillis: Long = defaultLivePeriodDelayMillis,
|
||||
disableNotification: Boolean = false,
|
||||
@@ -1149,7 +1148,7 @@ suspend fun TelegramBot.reply(
|
||||
}
|
||||
|
||||
suspend fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
mediaFile: TelegramMediaFile,
|
||||
disableNotification: Boolean = false,
|
||||
protectContent: Boolean = false,
|
||||
@@ -1233,7 +1232,7 @@ suspend fun TelegramBot.reply(
|
||||
}
|
||||
|
||||
suspend fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
content: TextedMediaContent,
|
||||
text: String?,
|
||||
parseMode: ParseMode? = null,
|
||||
@@ -1307,7 +1306,7 @@ suspend fun TelegramBot.reply(
|
||||
}
|
||||
|
||||
suspend fun TelegramBot.reply(
|
||||
to: Message,
|
||||
to: AccessibleMessage,
|
||||
content: TextedMediaContent,
|
||||
entities: TextSourcesList,
|
||||
disableNotification: Boolean = false,
|
||||
|
||||
@@ -23,7 +23,7 @@ import dev.inmo.tgbotapi.types.files.TelegramMediaFile
|
||||
import dev.inmo.tgbotapi.types.files.Sticker
|
||||
import dev.inmo.tgbotapi.types.games.Game
|
||||
import dev.inmo.tgbotapi.types.location.*
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
import dev.inmo.tgbotapi.types.message.content.*
|
||||
import dev.inmo.tgbotapi.types.payments.LabeledPrice
|
||||
import dev.inmo.tgbotapi.types.payments.abstracts.Currency
|
||||
@@ -1166,7 +1166,7 @@ suspend inline fun TelegramBot.reply(
|
||||
suspend inline fun TelegramBot.reply(
|
||||
toChatId: IdChatIdentifier,
|
||||
toMessageId: MessageId,
|
||||
copy: Message,
|
||||
copy: AccessibleMessage,
|
||||
text: String? = null,
|
||||
parseMode: ParseMode? = null,
|
||||
threadId: MessageThreadId? = toChatId.threadId,
|
||||
|
||||
@@ -1,16 +1,12 @@
|
||||
package dev.inmo.tgbotapi.extensions.api.send
|
||||
|
||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
||||
import dev.inmo.tgbotapi.requests.send.SendAction
|
||||
import dev.inmo.tgbotapi.requests.send.SetMessageReactions
|
||||
import dev.inmo.tgbotapi.types.ChatIdentifier
|
||||
import dev.inmo.tgbotapi.types.MessageId
|
||||
import dev.inmo.tgbotapi.types.MessageThreadId
|
||||
import dev.inmo.tgbotapi.types.actions.*
|
||||
import dev.inmo.tgbotapi.types.chat.Chat
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
import dev.inmo.tgbotapi.types.reactions.Reaction
|
||||
import dev.inmo.tgbotapi.types.threadId
|
||||
|
||||
suspend fun TelegramBot.setMessageReactions(
|
||||
chatId: ChatIdentifier,
|
||||
@@ -43,13 +39,13 @@ suspend fun TelegramBot.setMessageReaction(
|
||||
) = setMessageReaction(chat.id, messageId, reaction, big)
|
||||
|
||||
suspend fun TelegramBot.setMessageReactions(
|
||||
message: Message,
|
||||
message: AccessibleMessage,
|
||||
reactions: List<Reaction>,
|
||||
big: Boolean = false
|
||||
) = setMessageReactions(message.chat, message.messageId, reactions, big)
|
||||
|
||||
suspend fun TelegramBot.setMessageReaction(
|
||||
message: Message,
|
||||
message: AccessibleMessage,
|
||||
reaction: Reaction?,
|
||||
big: Boolean = false
|
||||
) = setMessageReaction(message.chat, message.messageId, reaction, big)
|
||||
|
||||
@@ -138,3 +138,13 @@ suspend fun BehaviourContext.waitMediaContent(
|
||||
initRequest: Request<*>? = null,
|
||||
errorFactory: NullableRequestBuilder<*> = { null }
|
||||
) = waitContent(initRequest, errorFactory).mapContent<MediaContent>()
|
||||
|
||||
suspend fun BehaviourContext.waitScheduledGiveawayContent(
|
||||
initRequest: Request<*>? = null,
|
||||
errorFactory: NullableRequestBuilder<*> = { null }
|
||||
) = waitContent(initRequest, errorFactory).mapContent<ScheduledGiveawayContent>()
|
||||
|
||||
suspend fun BehaviourContext.waitGiveawayPublicResultsContent(
|
||||
initRequest: Request<*>? = null,
|
||||
errorFactory: NullableRequestBuilder<*> = { null }
|
||||
) = waitContent(initRequest, errorFactory).mapContent<GiveawayPublicResultsContent>()
|
||||
|
||||
@@ -152,3 +152,13 @@ suspend fun BehaviourContext.waitMediaContentMessage(
|
||||
initRequest: Request<*>? = null,
|
||||
errorFactory: NullableRequestBuilder<*> = { null }
|
||||
) = waitContentMessage(initRequest, errorFactory).mapWithContent<MediaContent>()
|
||||
|
||||
suspend fun BehaviourContext.waitScheduledGiveawayContentMessage(
|
||||
initRequest: Request<*>? = null,
|
||||
errorFactory: NullableRequestBuilder<*> = { null }
|
||||
) = waitContentMessage(initRequest, errorFactory).mapWithContent<ScheduledGiveawayContent>()
|
||||
|
||||
suspend fun BehaviourContext.waitGiveawayPublicResultsContentMessage(
|
||||
initRequest: Request<*>? = null,
|
||||
errorFactory: NullableRequestBuilder<*> = { null }
|
||||
) = waitContentMessage(initRequest, errorFactory).mapWithContent<GiveawayPublicResultsContent>()
|
||||
|
||||
@@ -130,3 +130,14 @@ suspend fun BehaviourContext.waitEditedInvoice(
|
||||
initRequest: Request<*>? = null,
|
||||
errorFactory: NullableRequestBuilder<*> = { null }
|
||||
) = waitEditedContent<InvoiceContent>(initRequest, false, errorFactory)
|
||||
|
||||
suspend fun BehaviourContext.waitEditedScheduledGiveawayContent(
|
||||
initRequest: Request<*>? = null,
|
||||
errorFactory: NullableRequestBuilder<*> = { null }
|
||||
) = waitEditedContent<ScheduledGiveawayContent>(initRequest, false, errorFactory)
|
||||
|
||||
suspend fun BehaviourContext.waitEditedGiveawayPublicResultsContent(
|
||||
initRequest: Request<*>? = null,
|
||||
errorFactory: NullableRequestBuilder<*> = { null }
|
||||
) = waitEditedContent<GiveawayPublicResultsContent>(initRequest, false, errorFactory)
|
||||
|
||||
|
||||
@@ -136,3 +136,14 @@ suspend fun BehaviourContext.waitEditedInvoiceMessage(
|
||||
initRequest: Request<*>? = null,
|
||||
errorFactory: NullableRequestBuilder<*> = { null }
|
||||
) = waitEditedContentMessage<InvoiceContent>(initRequest, errorFactory)
|
||||
|
||||
suspend fun BehaviourContext.waitEditedScheduledGiveawayContentMessage(
|
||||
initRequest: Request<*>? = null,
|
||||
errorFactory: NullableRequestBuilder<*> = { null }
|
||||
) = waitEditedContentMessage<ScheduledGiveawayContent>(initRequest, errorFactory)
|
||||
|
||||
suspend fun BehaviourContext.waitEditedGiveawayPublicResultsContentMessage(
|
||||
initRequest: Request<*>? = null,
|
||||
errorFactory: NullableRequestBuilder<*> = { null }
|
||||
) = waitEditedContentMessage<GiveawayPublicResultsContent>(initRequest, errorFactory)
|
||||
|
||||
|
||||
@@ -6,24 +6,24 @@ import dev.inmo.tgbotapi.extensions.utils.extensions.sourceUser
|
||||
import dev.inmo.tgbotapi.types.InlineQueries.query.InlineQuery
|
||||
import dev.inmo.tgbotapi.types.chat.ChatJoinRequest
|
||||
import dev.inmo.tgbotapi.types.chat.member.ChatMemberUpdated
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
import dev.inmo.tgbotapi.types.payments.PreCheckoutQuery
|
||||
import dev.inmo.tgbotapi.types.payments.ShippingQuery
|
||||
import dev.inmo.tgbotapi.types.queries.callback.CallbackQuery
|
||||
import dev.inmo.tgbotapi.types.update.abstracts.Update
|
||||
|
||||
/**
|
||||
* Allow only events from the same chat as base [Message]
|
||||
* Allow only events from the same chat as base [AccessibleMessage]
|
||||
*/
|
||||
val MessageFilterByChat: BehaviourContextAndTwoTypesReceiver<Boolean, Message, Update> = { message, update ->
|
||||
val MessageFilterByChat: BehaviourContextAndTwoTypesReceiver<Boolean, AccessibleMessage, Update> = { message, update ->
|
||||
update.sourceChat() ?.let {
|
||||
it.id == message.chat.id
|
||||
} != false
|
||||
}
|
||||
/**
|
||||
* Allow only events from the same chat as base [List] of [Message]
|
||||
* Allow only events from the same chat as base [List] of [AccessibleMessage]
|
||||
*/
|
||||
val MessagesFilterByChat: BehaviourContextAndTwoTypesReceiver<Boolean, List<Message>, Update> = { messages, update ->
|
||||
val MessagesFilterByChat: BehaviourContextAndTwoTypesReceiver<Boolean, List<AccessibleMessage>, Update> = { messages, update ->
|
||||
val sourceChatId = update.sourceChat() ?.id
|
||||
sourceChatId != null && messages.all { sourceChatId == it.chat.id }
|
||||
}
|
||||
|
||||
@@ -1,15 +1,13 @@
|
||||
package dev.inmo.tgbotapi.extensions.behaviour_builder.filters
|
||||
|
||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContextAndTwoTypesReceiver
|
||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.SimpleFilter
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.*
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupContent
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupMessage
|
||||
import dev.inmo.tgbotapi.types.update.abstracts.Update
|
||||
|
||||
/**
|
||||
* Allow only messages which are not [MediaGroupMessage]
|
||||
*/
|
||||
val CommonMessageFilterExcludeMediaGroups = SimpleFilter<Message> {
|
||||
val CommonMessageFilterExcludeMediaGroups = SimpleFilter<AccessibleMessage> {
|
||||
it !is CommonMessage<*> || it.content !is MediaGroupContent<*>
|
||||
}
|
||||
|
||||
@@ -7,6 +7,6 @@ import dev.inmo.tgbotapi.utils.extensions.threadIdOrNull
|
||||
/**
|
||||
* Allow only messages which are not in some forum
|
||||
*/
|
||||
val MessageFilterForums = SimpleFilter<Message> {
|
||||
val MessageFilterForums = SimpleFilter<AccessibleMessage> {
|
||||
it.threadIdOrNull == null
|
||||
}
|
||||
|
||||
@@ -703,3 +703,52 @@ suspend fun <BC : BehaviourContext> BC.onMediaContent(
|
||||
markerFactory,
|
||||
scenarioReceiver
|
||||
)
|
||||
|
||||
/**
|
||||
* @param initialFilter This filter will be called to remove unnecessary data BEFORE [scenarioReceiver] call
|
||||
* @param subcontextUpdatesFilter This filter will be applied to each update inside of [scenarioReceiver]. For example,
|
||||
* this filter will be used if you will call [dev.inmo.tgbotapi.extensions.behaviour_builder.expectations.waitContentMessage].
|
||||
* Use [dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContextAndTwoTypesReceiver] function to create your own.
|
||||
* Use [dev.inmo.tgbotapi.extensions.behaviour_builder.utils.plus] or [dev.inmo.tgbotapi.extensions.behaviour_builder.utils.times]
|
||||
* to combinate several filters
|
||||
* @param [markerFactory] Will be used to identify different "stream". [scenarioReceiver] will be called synchronously
|
||||
* in one "stream". Output of [markerFactory] will be used as a key for "stream"
|
||||
* @param scenarioReceiver Main callback which will be used to handle incoming data if [initialFilter] will pass that
|
||||
* data
|
||||
*/
|
||||
suspend fun <BC : BehaviourContext> BC.onScheduledGiveawayContent(
|
||||
initialFilter: CommonMessageFilter<ScheduledGiveawayContent>? = null,
|
||||
subcontextUpdatesFilter: CustomBehaviourContextAndTwoTypesReceiver<BC, Boolean, ScheduledGiveawayContentMessage, Update>? = MessageFilterByChat,
|
||||
markerFactory: MarkerFactory<in ScheduledGiveawayContentMessage, Any> = ByChatMessageMarkerFactory,
|
||||
scenarioReceiver: CustomBehaviourContextAndTypeReceiver<BC, Unit, ScheduledGiveawayContentMessage>
|
||||
) = onContentMessageWithType(
|
||||
initialFilter,
|
||||
subcontextUpdatesFilter,
|
||||
markerFactory,
|
||||
scenarioReceiver
|
||||
)
|
||||
|
||||
|
||||
/**
|
||||
* @param initialFilter This filter will be called to remove unnecessary data BEFORE [scenarioReceiver] call
|
||||
* @param subcontextUpdatesFilter This filter will be applied to each update inside of [scenarioReceiver]. For example,
|
||||
* this filter will be used if you will call [dev.inmo.tgbotapi.extensions.behaviour_builder.expectations.waitContentMessage].
|
||||
* Use [dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContextAndTwoTypesReceiver] function to create your own.
|
||||
* Use [dev.inmo.tgbotapi.extensions.behaviour_builder.utils.plus] or [dev.inmo.tgbotapi.extensions.behaviour_builder.utils.times]
|
||||
* to combinate several filters
|
||||
* @param [markerFactory] Will be used to identify different "stream". [scenarioReceiver] will be called synchronously
|
||||
* in one "stream". Output of [markerFactory] will be used as a key for "stream"
|
||||
* @param scenarioReceiver Main callback which will be used to handle incoming data if [initialFilter] will pass that
|
||||
* data
|
||||
*/
|
||||
suspend fun <BC : BehaviourContext> BC.onScheduledGiveawayContent(
|
||||
initialFilter: CommonMessageFilter<GiveawayPublicResultsContent>? = null,
|
||||
subcontextUpdatesFilter: CustomBehaviourContextAndTwoTypesReceiver<BC, Boolean, GiveawayPublicResultsContentMessage, Update>? = MessageFilterByChat,
|
||||
markerFactory: MarkerFactory<in GiveawayPublicResultsContentMessage, Any> = ByChatMessageMarkerFactory,
|
||||
scenarioReceiver: CustomBehaviourContextAndTypeReceiver<BC, Unit, GiveawayPublicResultsContentMessage>
|
||||
) = onContentMessageWithType(
|
||||
initialFilter,
|
||||
subcontextUpdatesFilter,
|
||||
markerFactory,
|
||||
scenarioReceiver
|
||||
)
|
||||
|
||||
@@ -2,12 +2,12 @@ package dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories
|
||||
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.*
|
||||
|
||||
object ByChatMessageMarkerFactory : MarkerFactory<Message, Any> {
|
||||
override suspend fun invoke(data: Message) = data.chat
|
||||
object ByChatMessageMarkerFactory : MarkerFactory<AccessibleMessage, Any> {
|
||||
override suspend fun invoke(data: AccessibleMessage) = data.chat
|
||||
}
|
||||
|
||||
object ByUserMessageMarkerFactory : MarkerFactory<Message, Any> {
|
||||
override suspend fun invoke(data: Message) = when (data) {
|
||||
object ByUserMessageMarkerFactory : MarkerFactory<AccessibleMessage, Any> {
|
||||
override suspend fun invoke(data: AccessibleMessage) = when (data) {
|
||||
is FromUserMessage -> data.user
|
||||
is FromChannelGroupContentMessage<*> -> data.channel
|
||||
else -> data.chat // including anonymous
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package dev.inmo.tgbotapi.requests
|
||||
|
||||
import dev.inmo.tgbotapi.requests.abstracts.SimpleRequest
|
||||
import dev.inmo.tgbotapi.types.*
|
||||
import dev.inmo.tgbotapi.types.update.abstracts.Update
|
||||
import dev.inmo.tgbotapi.types.update.abstracts.UpdateSerializerWithoutSerialization
|
||||
@@ -15,7 +14,7 @@ private val updatesListSerializer = ListSerializer(
|
||||
* Request updates from Telegram Bot API system. It is important, that the result updates WILL NOT include
|
||||
* [dev.inmo.tgbotapi.types.update.MediaGroupUpdates.MediaGroupUpdate] objects due to the fact,
|
||||
* that it is internal abstraction and in fact any [dev.inmo.tgbotapi.types.message.abstracts.MediaGroupMessage]
|
||||
* is just a common [dev.inmo.tgbotapi.types.message.abstracts.Message]
|
||||
* is just a common [dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage]
|
||||
*
|
||||
* @see dev.inmo.tgbotapi.extensions.utils.updates.retrieving.updateHandlerWithMediaGroupsAdaptation
|
||||
* @see dev.inmo.tgbotapi.utils.convertWithMediaGroupUpdates
|
||||
|
||||
@@ -201,6 +201,10 @@ const val tgWebAppStartParamField = "tgWebAppStartParam"
|
||||
|
||||
const val chatIdField = "chat_id"
|
||||
const val senderChatIdField = "sender_chat_id"
|
||||
const val senderChatField = "sender_chat"
|
||||
const val authorSignatureField = "author_signature"
|
||||
const val senderUserField = "sender_user"
|
||||
const val senderUserNameField = "sender_user_name"
|
||||
const val messageIdField = "message_id"
|
||||
const val giveawayMessageIdField = "giveaway_message_id"
|
||||
const val messageIdsField = "message_ids"
|
||||
@@ -236,6 +240,7 @@ const val accentColorIdField = "accent_color_id"
|
||||
const val profileAccentColorIdField = "profile_accent_color_id"
|
||||
const val backgroundCustomEmojiIdField = "background_custom_emoji_id"
|
||||
const val profileBackgroundCustomEmojiIdField = "profile_background_custom_emoji_id"
|
||||
const val hasVisibleHistoryField = "has_visible_history"
|
||||
const val iconCustomEmojiIdField = "icon_custom_emoji_id"
|
||||
const val canJoinGroupsField = "can_join_groups"
|
||||
const val canReadAllGroupMessagesField = "can_read_all_group_messages"
|
||||
@@ -486,6 +491,7 @@ const val isBigField = "is_big"
|
||||
const val oldReactionField = "old_reaction"
|
||||
const val newReactionField = "new_reaction"
|
||||
const val chatField = "chat"
|
||||
const val originField = "origin"
|
||||
const val chatsField = "chats"
|
||||
const val usernameField = "username"
|
||||
const val bioField = "bio"
|
||||
|
||||
@@ -16,4 +16,4 @@ data class Contact(
|
||||
val userId: UserId? = null,
|
||||
@SerialName(vcardField)
|
||||
override val vcard: String? = null
|
||||
) : CommonContactData
|
||||
) : CommonContactData, ExternalReplyInfo.ContentVariant
|
||||
|
||||
@@ -0,0 +1,166 @@
|
||||
package dev.inmo.tgbotapi.types
|
||||
|
||||
import dev.inmo.tgbotapi.abstracts.SpoilerableData
|
||||
import dev.inmo.tgbotapi.types.chat.SuperPublicChat
|
||||
import dev.inmo.tgbotapi.types.dice.Dice
|
||||
import dev.inmo.tgbotapi.types.files.*
|
||||
import dev.inmo.tgbotapi.types.games.Game
|
||||
import dev.inmo.tgbotapi.types.games.RawGame
|
||||
import dev.inmo.tgbotapi.types.giveaway.GiveawayPublicResults
|
||||
import dev.inmo.tgbotapi.types.giveaway.ScheduledGiveaway
|
||||
import dev.inmo.tgbotapi.types.location.Location
|
||||
import dev.inmo.tgbotapi.types.message.MessageOrigin
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.payments.Invoice
|
||||
import dev.inmo.tgbotapi.types.polls.Poll
|
||||
import dev.inmo.tgbotapi.types.stories.Story
|
||||
import dev.inmo.tgbotapi.types.venue.Venue
|
||||
import dev.inmo.tgbotapi.utils.RiskFeature
|
||||
import dev.inmo.tgbotapi.utils.internal.ClassCastsIncluded
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.descriptors.SerialDescriptor
|
||||
import kotlinx.serialization.encoding.Decoder
|
||||
import kotlinx.serialization.encoding.Encoder
|
||||
|
||||
@Serializable(ExternalReplyInfo.Companion::class)
|
||||
@ClassCastsIncluded
|
||||
sealed interface ExternalReplyInfo {
|
||||
val origin: MessageOrigin
|
||||
val chat: SuperPublicChat?
|
||||
val messageMeta: Message.MetaInfo?
|
||||
|
||||
interface ContentVariant
|
||||
|
||||
@Serializable
|
||||
data class Text(
|
||||
override val origin: MessageOrigin,
|
||||
override val chat: SuperPublicChat?,
|
||||
override val messageMeta: Message.MetaInfo?,
|
||||
val linkPreviewOptions: LinkPreviewOptions?
|
||||
) : ExternalReplyInfo
|
||||
|
||||
@Serializable(ExternalReplyInfo.Companion::class)
|
||||
sealed interface Content : ExternalReplyInfo {
|
||||
val content: ContentVariant
|
||||
|
||||
|
||||
@Serializable
|
||||
data class Simple(
|
||||
override val origin: MessageOrigin,
|
||||
override val chat: SuperPublicChat?,
|
||||
override val messageMeta: Message.MetaInfo?,
|
||||
override val content: ContentVariant
|
||||
) : Content
|
||||
|
||||
@Serializable
|
||||
data class Media<T>(
|
||||
override val origin: MessageOrigin,
|
||||
override val chat: SuperPublicChat?,
|
||||
override val messageMeta: Message.MetaInfo?,
|
||||
override val spoilered: Boolean,
|
||||
override val content: T
|
||||
) : Content, SpoilerableData where T: ContentVariant, T : TelegramMediaFile
|
||||
}
|
||||
|
||||
@Serializable
|
||||
private data class Surrogate(
|
||||
val origin: MessageOrigin,
|
||||
val chat: SuperPublicChat? = null,
|
||||
val message_id: MessageId? = null,
|
||||
val link_preview_options: LinkPreviewOptions? = null,
|
||||
val has_media_spoiler: Boolean? = null,
|
||||
private val story: Story? = null,
|
||||
private val audio: AudioFile? = null,
|
||||
private val document: DocumentFile? = null,
|
||||
private val animation: AnimationFile? = null,
|
||||
private val game: RawGame? = null,
|
||||
@Serializable(PhotoSerializer::class)
|
||||
private val photo: Photo? = null,
|
||||
private val sticker: Sticker? = null,
|
||||
private val video: VideoFile? = null,
|
||||
private val voice: VoiceFile? = null,
|
||||
private val video_note: VideoNoteFile? = null,
|
||||
private val contact: Contact? = null,
|
||||
private val location: Location? = null,
|
||||
private val venue: Venue? = null,
|
||||
private val poll: Poll? = null,
|
||||
private val invoice: Invoice? = null,
|
||||
private val dice: Dice? = null,
|
||||
private val giveaway: ScheduledGiveaway? = null,
|
||||
private val giveaway_winners: GiveawayPublicResults? = null,
|
||||
) {
|
||||
val asExternalReplyInfo: ExternalReplyInfo
|
||||
get() {
|
||||
val messageMeta = chat ?.let {
|
||||
message_id ?.let {
|
||||
Message.MetaInfo(
|
||||
chat.id,
|
||||
message_id
|
||||
)
|
||||
}
|
||||
}
|
||||
val content: ContentVariant? = when {
|
||||
story != null -> story
|
||||
audio != null -> audio
|
||||
video != null -> video
|
||||
video_note != null -> video_note
|
||||
animation != null -> animation
|
||||
document != null -> document
|
||||
voice != null -> voice
|
||||
photo != null -> photo
|
||||
sticker != null -> sticker
|
||||
dice != null -> dice
|
||||
game != null -> game.asGame
|
||||
contact != null -> contact
|
||||
location != null -> location
|
||||
venue != null -> venue
|
||||
poll != null -> poll
|
||||
invoice != null -> invoice
|
||||
giveaway != null -> giveaway
|
||||
giveaway_winners != null -> giveaway_winners
|
||||
else -> null
|
||||
}
|
||||
|
||||
return content ?.let {
|
||||
when (it) {
|
||||
is TelegramMediaFile -> {
|
||||
Content.Media(
|
||||
origin,
|
||||
chat,
|
||||
messageMeta,
|
||||
has_media_spoiler == true,
|
||||
it
|
||||
)
|
||||
}
|
||||
else -> Content.Simple(
|
||||
origin,
|
||||
chat,
|
||||
messageMeta,
|
||||
it
|
||||
)
|
||||
}
|
||||
} ?: Text(
|
||||
origin,
|
||||
chat,
|
||||
messageMeta,
|
||||
link_preview_options
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@RiskFeature("This serializer currently support only deserialization, but not serialization")
|
||||
companion object : KSerializer<ExternalReplyInfo> {
|
||||
override val descriptor: SerialDescriptor
|
||||
get() = Surrogate.serializer().descriptor
|
||||
|
||||
override fun deserialize(decoder: Decoder): ExternalReplyInfo {
|
||||
return Surrogate.serializer().deserialize(decoder).asExternalReplyInfo
|
||||
}
|
||||
|
||||
override fun serialize(encoder: Encoder, value: ExternalReplyInfo) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -49,6 +49,8 @@ data class ExtendedChannelChatImpl(
|
||||
override val backgroundCustomEmojiId: CustomEmojiId? = null,
|
||||
@SerialName(profileBackgroundCustomEmojiIdField)
|
||||
override val profileBackgroundCustomEmojiId: CustomEmojiId? = null,
|
||||
@SerialName(hasVisibleHistoryField)
|
||||
override val newMembersSeeHistory: Boolean = false
|
||||
) : ExtendedChannelChat
|
||||
|
||||
@Serializable
|
||||
@@ -85,6 +87,8 @@ data class ExtendedGroupChatImpl(
|
||||
override val backgroundCustomEmojiId: CustomEmojiId? = null,
|
||||
@SerialName(profileBackgroundCustomEmojiIdField)
|
||||
override val profileBackgroundCustomEmojiId: CustomEmojiId? = null,
|
||||
@SerialName(hasVisibleHistoryField)
|
||||
override val newMembersSeeHistory: Boolean = false,
|
||||
) : ExtendedGroupChat
|
||||
|
||||
@Serializable
|
||||
@@ -178,6 +182,8 @@ data class ExtendedSupergroupChatImpl(
|
||||
override val backgroundCustomEmojiId: CustomEmojiId? = null,
|
||||
@SerialName(profileBackgroundCustomEmojiIdField)
|
||||
override val profileBackgroundCustomEmojiId: CustomEmojiId? = null,
|
||||
@SerialName(hasVisibleHistoryField)
|
||||
override val newMembersSeeHistory: Boolean = false,
|
||||
) : ExtendedSupergroupChat
|
||||
|
||||
@Serializable
|
||||
@@ -234,6 +240,8 @@ data class ExtendedForumChatImpl(
|
||||
override val backgroundCustomEmojiId: CustomEmojiId? = null,
|
||||
@SerialName(profileBackgroundCustomEmojiIdField)
|
||||
override val profileBackgroundCustomEmojiId: CustomEmojiId? = null,
|
||||
@SerialName(hasVisibleHistoryField)
|
||||
override val newMembersSeeHistory: Boolean = false,
|
||||
) : ExtendedForumChat
|
||||
|
||||
@Serializable
|
||||
@@ -279,5 +287,5 @@ data class UnknownExtendedChat(
|
||||
@SerialName(backgroundCustomEmojiIdField)
|
||||
override val backgroundCustomEmojiId: CustomEmojiId? = null
|
||||
@SerialName(profileBackgroundCustomEmojiIdField)
|
||||
override val profileBackgroundCustomEmojiId: CustomEmojiId? = null,\
|
||||
override val profileBackgroundCustomEmojiId: CustomEmojiId? = null
|
||||
}
|
||||
|
||||
@@ -2,10 +2,10 @@ package dev.inmo.tgbotapi.types.chat
|
||||
|
||||
import dev.inmo.tgbotapi.types.*
|
||||
import dev.inmo.tgbotapi.types.colors.ColorId
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.TelegramBotAPIMessageDeserializeOnlySerializer
|
||||
import dev.inmo.tgbotapi.types.reactions.Reaction
|
||||
import korlibs.time.DateTime
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable(ExtendedChatSerializer.Companion::class)
|
||||
@@ -50,6 +50,7 @@ sealed interface ExtendedPublicChat : ExtendedChat, PublicChat, ExtendedNonBotCh
|
||||
val pinnedMessage: Message?
|
||||
val membersHidden: Boolean
|
||||
val availableReactions: List<Reaction>?
|
||||
val newMembersSeeHistory: Boolean
|
||||
}
|
||||
|
||||
@Serializable(ExtendedChatSerializer.Companion::class)
|
||||
|
||||
@@ -10,4 +10,4 @@ data class Dice(
|
||||
val value: DiceResult,
|
||||
@SerialName(emojiField)
|
||||
val animationType: DiceAnimationType
|
||||
)
|
||||
) : ExternalReplyInfo.ContentVariant
|
||||
|
||||
@@ -23,4 +23,5 @@ data class AnimationFile(
|
||||
override val mimeType: MimeType? = null,
|
||||
@SerialName(fileSizeField)
|
||||
override val fileSize: Long? = null
|
||||
) : TelegramMediaFile, MimedMediaFile, ThumbedMediaFile, PlayableMediaFile, CustomNamedMediaFile, SizedMediaFile
|
||||
) : TelegramMediaFile, MimedMediaFile, ThumbedMediaFile, PlayableMediaFile, CustomNamedMediaFile, SizedMediaFile,
|
||||
ExternalReplyInfo.ContentVariant
|
||||
|
||||
@@ -28,6 +28,6 @@ data class AudioFile(
|
||||
@SerialName(thumbnailField)
|
||||
override val thumbnail: PhotoSize? = null
|
||||
) : TelegramMediaFile, CustomNamedMediaFile, MimedMediaFile, ThumbedMediaFile, PlayableMediaFile, TitledMediaFile,
|
||||
Performerable
|
||||
Performerable, ExternalReplyInfo.ContentVariant
|
||||
|
||||
fun AudioFile.asVoiceFile() = VoiceFile(fileId, fileUniqueId, duration, mimeType, fileSize)
|
||||
|
||||
@@ -20,7 +20,7 @@ data class DocumentFile(
|
||||
override val mimeType: MimeType? = null,
|
||||
@SerialName(fileNameField)
|
||||
override val fileName: String? = null
|
||||
) : TelegramMediaFile, MimedMediaFile, ThumbedMediaFile, CustomNamedMediaFile
|
||||
) : TelegramMediaFile, MimedMediaFile, ThumbedMediaFile, CustomNamedMediaFile, ExternalReplyInfo.ContentVariant
|
||||
|
||||
@Suppress("NOTHING_TO_INLINE")
|
||||
inline fun TelegramMediaFile.asDocumentFile() = if (this is DocumentFile) {
|
||||
|
||||
@@ -6,17 +6,20 @@ import dev.inmo.tgbotapi.types.files.*
|
||||
import dev.inmo.tgbotapi.utils.RiskFeature
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.builtins.ListSerializer
|
||||
import kotlin.jvm.JvmInline
|
||||
|
||||
typealias Photo = List<PhotoSize>
|
||||
@Serializable
|
||||
@JvmInline
|
||||
value class Photo(
|
||||
val photos: List<PhotoSize>
|
||||
) : List<PhotoSize> by photos, ExternalReplyInfo.ContentVariant
|
||||
|
||||
fun Photo.biggest(): PhotoSize? = maxByOrNull {
|
||||
it.resolution
|
||||
}
|
||||
|
||||
@RiskFeature
|
||||
object PhotoSerializer : KSerializer<Photo> by ListSerializer(
|
||||
PhotoSize.serializer()
|
||||
)
|
||||
object PhotoSerializer : KSerializer<Photo> by Photo.serializer()
|
||||
|
||||
@Serializable
|
||||
data class PhotoSize(
|
||||
|
||||
@@ -34,7 +34,7 @@ data class StickerSurrogate(
|
||||
|
||||
// TODO:: Serializer
|
||||
@Serializable(StickerSerializer::class)
|
||||
sealed interface Sticker : TelegramMediaFile, SizedMediaFile, ThumbedMediaFile {
|
||||
sealed interface Sticker : TelegramMediaFile, SizedMediaFile, ThumbedMediaFile, ExternalReplyInfo.ContentVariant {
|
||||
val emoji: String?
|
||||
val stickerSetName: StickerSetName?
|
||||
val stickerFormat: StickerFormat
|
||||
|
||||
@@ -29,7 +29,8 @@ data class VideoFile(
|
||||
override val mimeType: MimeType? = null,
|
||||
@SerialName(fileSizeField)
|
||||
override val fileSize: Long? = null
|
||||
) : TelegramMediaFile, CustomNamedMediaFile, MimedMediaFile, ThumbedMediaFile, PlayableMediaFile, SizedMediaFile
|
||||
) : TelegramMediaFile, CustomNamedMediaFile, MimedMediaFile, ThumbedMediaFile, PlayableMediaFile, SizedMediaFile,
|
||||
ExternalReplyInfo.ContentVariant
|
||||
|
||||
@Suppress("NOTHING_TO_INLINE")
|
||||
inline fun VideoFile.toTelegramMediaVideo(
|
||||
|
||||
@@ -18,7 +18,7 @@ data class VideoNoteFile(
|
||||
override val thumbnail: PhotoSize? = null,
|
||||
@SerialName(fileSizeField)
|
||||
override val fileSize: Long? = null
|
||||
) : TelegramMediaFile, ThumbedMediaFile, PlayableMediaFile, SizedMediaFile {
|
||||
) : TelegramMediaFile, ThumbedMediaFile, PlayableMediaFile, SizedMediaFile, ExternalReplyInfo.ContentVariant {
|
||||
override val height: Int
|
||||
get() = width
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ data class VoiceFile(
|
||||
override val mimeType: MimeType? = null,
|
||||
@SerialName(fileSizeField)
|
||||
override val fileSize: Long? = null
|
||||
) : TelegramMediaFile, MimedMediaFile, PlayableMediaFile
|
||||
) : TelegramMediaFile, MimedMediaFile, PlayableMediaFile, ExternalReplyInfo.ContentVariant
|
||||
|
||||
fun VoiceFile.asAudioFile(
|
||||
performer: String? = null,
|
||||
|
||||
@@ -2,6 +2,7 @@ package dev.inmo.tgbotapi.types.games
|
||||
|
||||
import dev.inmo.tgbotapi.abstracts.TextedInput
|
||||
import dev.inmo.tgbotapi.abstracts.Titled
|
||||
import dev.inmo.tgbotapi.types.ExternalReplyInfo
|
||||
import dev.inmo.tgbotapi.types.message.textsources.TextSourcesList
|
||||
import dev.inmo.tgbotapi.types.files.AnimationFile
|
||||
import dev.inmo.tgbotapi.types.files.Photo
|
||||
@@ -15,4 +16,4 @@ data class Game(
|
||||
override val text: String? = null,
|
||||
override val textSources: TextSourcesList = emptyList(),
|
||||
val animation: AnimationFile? = null
|
||||
) : Titled, TextedInput
|
||||
) : Titled, TextedInput, ExternalReplyInfo.ContentVariant
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
package dev.inmo.tgbotapi.types.giveaway
|
||||
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewChat
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.ChannelEvent
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.ChatEvent
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.PublicChatEvent
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.Transient
|
||||
|
||||
@@ -12,5 +12,5 @@ data class GiveawayPrivateResults(
|
||||
override val chat: PreviewChat,
|
||||
override val unclaimedCount: Int,
|
||||
@Transient // TODO::Add message serializer
|
||||
val message: Message? = null
|
||||
) : GiveawayResults
|
||||
val message: AccessibleMessage? = null
|
||||
) : GiveawayResults, ChatEvent, PublicChatEvent
|
||||
|
||||
@@ -13,7 +13,8 @@ import kotlinx.serialization.encoding.Decoder
|
||||
import kotlinx.serialization.encoding.Encoder
|
||||
|
||||
@Serializable(GiveawayPublicResults.Companion::class)
|
||||
sealed interface GiveawayPublicResults: GiveawayInfo, GiveawayResults, WithPreviewChatAndMessageId {
|
||||
sealed interface GiveawayPublicResults: GiveawayInfo, GiveawayResults, WithPreviewChatAndMessageId,
|
||||
ExternalReplyInfo.ContentVariant {
|
||||
val count: Int
|
||||
val winners: List<PreviewUser>
|
||||
val additionalChats: Int
|
||||
|
||||
@@ -6,6 +6,6 @@ import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.PublicChatEvent
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
sealed interface GiveawayResults : WithPreviewChat, ChatEvent, PublicChatEvent {
|
||||
sealed interface GiveawayResults : WithPreviewChat {
|
||||
val unclaimedCount: Int
|
||||
}
|
||||
|
||||
@@ -1,16 +1,19 @@
|
||||
package dev.inmo.tgbotapi.types.giveaway
|
||||
|
||||
import dev.inmo.micro_utils.language_codes.IetfLang
|
||||
import dev.inmo.tgbotapi.requests.abstracts.Request
|
||||
import dev.inmo.tgbotapi.types.*
|
||||
import dev.inmo.tgbotapi.types.buttons.KeyboardMarkup
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewChat
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.ChannelEvent
|
||||
import dev.inmo.tgbotapi.types.giveaway.GiveawayInfo
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.ChatEvent
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.PublicChatEvent
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class Giveaway(
|
||||
data class ScheduledGiveaway(
|
||||
@SerialName(chatsField)
|
||||
val chats: List<PreviewChat>,
|
||||
@SerialName(winnersSelectionDateField)
|
||||
@@ -27,4 +30,4 @@ data class Giveaway(
|
||||
val countries: List<IetfLang>? = null,
|
||||
@SerialName(premiumSubscriptionMonthCountField)
|
||||
override val premiumMonths: Int? = null
|
||||
) : GiveawayInfo, ChatEvent, PublicChatEvent
|
||||
) : GiveawayInfo, ExternalReplyInfo.ContentVariant
|
||||
@@ -20,7 +20,7 @@ import kotlinx.serialization.json.JsonObject
|
||||
*/
|
||||
@Serializable(LocationSerializer::class)
|
||||
@ClassCastsIncluded
|
||||
sealed interface Location : Locationed, HorizontallyAccured
|
||||
sealed interface Location : Locationed, HorizontallyAccured, ExternalReplyInfo.ContentVariant
|
||||
|
||||
@Serializable
|
||||
data class StaticLocation(
|
||||
|
||||
@@ -3,7 +3,6 @@ package dev.inmo.tgbotapi.types.message
|
||||
import korlibs.time.DateTime
|
||||
import dev.inmo.tgbotapi.types.*
|
||||
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup
|
||||
import dev.inmo.tgbotapi.types.chat.ChannelChat
|
||||
import dev.inmo.tgbotapi.types.chat.CommonBot
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewChannelChat
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.*
|
||||
@@ -16,10 +15,27 @@ data class ChannelContentMessageImpl<T: MessageContent>(
|
||||
override val date: DateTime,
|
||||
override val editDate: DateTime?,
|
||||
override val hasProtectedContent: Boolean,
|
||||
override val forwardInfo: ForwardInfo?,
|
||||
override val replyTo: Message?,
|
||||
override val forwardOrigin: MessageOrigin?,
|
||||
override val replyTo: AccessibleMessage?,
|
||||
override val replyMarkup: InlineKeyboardMarkup?,
|
||||
override val senderBot: CommonBot?,
|
||||
override val authorSignature: AuthorSignature?,
|
||||
override val mediaGroupId: MediaGroupIdentifier?,
|
||||
) : ChannelContentMessage<T>
|
||||
) : ChannelContentMessage<T> {
|
||||
constructor(
|
||||
messageId: MessageId,
|
||||
chat: PreviewChannelChat,
|
||||
content: T,
|
||||
date: DateTime,
|
||||
editDate: DateTime?,
|
||||
hasProtectedContent: Boolean,
|
||||
forwardInfo: ForwardInfo,
|
||||
replyTo: AccessibleMessage?,
|
||||
replyMarkup: InlineKeyboardMarkup?,
|
||||
senderBot: CommonBot?,
|
||||
authorSignature: AuthorSignature?,
|
||||
mediaGroupId: MediaGroupIdentifier?,
|
||||
) : this(
|
||||
messageId, chat, content, date, editDate, hasProtectedContent, forwardInfo.messageOrigin(), replyTo, replyMarkup, senderBot, authorSignature, mediaGroupId
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package dev.inmo.tgbotapi.types.message.ChatEvents
|
||||
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.CommonEvent
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
|
||||
data class PinnedMessage(
|
||||
|
||||
@@ -57,3 +57,55 @@ sealed interface ForwardInfo {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun MessageOrigin.forwardInfo() = when(this) {
|
||||
is MessageOrigin.HiddenUser -> ForwardInfo.ByAnonymous(
|
||||
date,
|
||||
name
|
||||
)
|
||||
is MessageOrigin.Public.Channel -> ForwardInfo.PublicChat.FromChannel(
|
||||
date,
|
||||
messageId,
|
||||
chat,
|
||||
authorSignature
|
||||
)
|
||||
is MessageOrigin.Public.Sender -> when (chat) {
|
||||
is ChannelChat -> ForwardInfo.PublicChat.SentByChannel(
|
||||
date,
|
||||
chat
|
||||
)
|
||||
is SupergroupChat -> ForwardInfo.PublicChat.FromSupergroup(
|
||||
date,
|
||||
chat
|
||||
)
|
||||
}
|
||||
is MessageOrigin.User -> ForwardInfo.ByUser(
|
||||
date,
|
||||
user
|
||||
)
|
||||
}
|
||||
|
||||
fun ForwardInfo.messageOrigin() = when (this) {
|
||||
is ForwardInfo.ByAnonymous -> MessageOrigin.HiddenUser(
|
||||
senderName,
|
||||
dateOfOriginal
|
||||
)
|
||||
is ForwardInfo.ByUser -> MessageOrigin.User(
|
||||
user,
|
||||
dateOfOriginal
|
||||
)
|
||||
is ForwardInfo.PublicChat.FromChannel -> MessageOrigin.Public.Channel(
|
||||
channelChat,
|
||||
messageId,
|
||||
dateOfOriginal,
|
||||
signature
|
||||
)
|
||||
is ForwardInfo.PublicChat.FromSupergroup -> MessageOrigin.Public.Sender(
|
||||
group,
|
||||
dateOfOriginal
|
||||
)
|
||||
is ForwardInfo.PublicChat.SentByChannel -> MessageOrigin.Public.Sender(
|
||||
channelChat,
|
||||
dateOfOriginal
|
||||
)
|
||||
}
|
||||
|
||||
@@ -14,62 +14,133 @@ data class ConnectedFromChannelGroupContentMessageImpl<T : MessageContent>(
|
||||
override val channel: PreviewChannelChat,
|
||||
override val messageId: MessageId,
|
||||
override val date: DateTime,
|
||||
override val forwardInfo: ForwardInfo?,
|
||||
override val forwardOrigin: MessageOrigin?,
|
||||
override val editDate: DateTime?,
|
||||
override val hasProtectedContent: Boolean,
|
||||
override val replyTo: Message?,
|
||||
override val replyTo: AccessibleMessage?,
|
||||
override val replyMarkup: InlineKeyboardMarkup?,
|
||||
override val content: T,
|
||||
override val senderBot: CommonBot?,
|
||||
override val authorSignature: AuthorSignature?,
|
||||
override val mediaGroupId: MediaGroupIdentifier?,
|
||||
) : ConnectedFromChannelGroupContentMessage<T>
|
||||
) : ConnectedFromChannelGroupContentMessage<T> {
|
||||
|
||||
constructor(
|
||||
chat: PreviewGroupChat,
|
||||
channel: PreviewChannelChat,
|
||||
messageId: MessageId,
|
||||
date: DateTime,
|
||||
forwardInfo: ForwardInfo,
|
||||
editDate: DateTime?,
|
||||
hasProtectedContent: Boolean,
|
||||
replyTo: AccessibleMessage?,
|
||||
replyMarkup: InlineKeyboardMarkup?,
|
||||
content: T,
|
||||
senderBot: CommonBot?,
|
||||
authorSignature: AuthorSignature?,
|
||||
mediaGroupId: MediaGroupIdentifier?,
|
||||
) : this(
|
||||
chat, channel, messageId, date, forwardInfo.messageOrigin(), editDate, hasProtectedContent, replyTo, replyMarkup, content, senderBot, authorSignature, mediaGroupId
|
||||
)
|
||||
}
|
||||
|
||||
data class UnconnectedFromChannelGroupContentMessageImpl<T: MessageContent>(
|
||||
override val chat: PreviewGroupChat,
|
||||
override val channel: PreviewChannelChat,
|
||||
override val messageId: MessageId,
|
||||
override val date: DateTime,
|
||||
override val forwardInfo: ForwardInfo?,
|
||||
override val forwardOrigin: MessageOrigin?,
|
||||
override val editDate: DateTime?,
|
||||
override val hasProtectedContent: Boolean,
|
||||
override val replyTo: Message?,
|
||||
override val replyTo: AccessibleMessage?,
|
||||
override val replyMarkup: InlineKeyboardMarkup?,
|
||||
override val content: T,
|
||||
override val senderBot: CommonBot?,
|
||||
override val authorSignature: AuthorSignature?,
|
||||
override val mediaGroupId: MediaGroupIdentifier?,
|
||||
) : UnconnectedFromChannelGroupContentMessage<T>
|
||||
) : UnconnectedFromChannelGroupContentMessage<T> {
|
||||
constructor(
|
||||
chat: PreviewGroupChat,
|
||||
channel: PreviewChannelChat,
|
||||
messageId: MessageId,
|
||||
date: DateTime,
|
||||
forwardInfo: ForwardInfo,
|
||||
editDate: DateTime?,
|
||||
hasProtectedContent: Boolean,
|
||||
replyTo: AccessibleMessage?,
|
||||
replyMarkup: InlineKeyboardMarkup?,
|
||||
content: T,
|
||||
senderBot: CommonBot?,
|
||||
authorSignature: AuthorSignature?,
|
||||
mediaGroupId: MediaGroupIdentifier?,
|
||||
) : this(
|
||||
chat, channel, messageId, date, forwardInfo.messageOrigin(), editDate, hasProtectedContent, replyTo, replyMarkup, content, senderBot, authorSignature, mediaGroupId
|
||||
)
|
||||
}
|
||||
|
||||
data class AnonymousGroupContentMessageImpl<T : MessageContent>(
|
||||
override val chat: PreviewGroupChat,
|
||||
override val messageId: MessageId,
|
||||
override val date: DateTime,
|
||||
override val forwardInfo: ForwardInfo?,
|
||||
override val forwardOrigin: MessageOrigin?,
|
||||
override val editDate: DateTime?,
|
||||
override val hasProtectedContent: Boolean,
|
||||
override val replyTo: Message?,
|
||||
override val replyTo: AccessibleMessage?,
|
||||
override val replyMarkup: InlineKeyboardMarkup?,
|
||||
override val content: T,
|
||||
override val senderBot: CommonBot?,
|
||||
override val authorSignature: AuthorSignature?,
|
||||
override val mediaGroupId: MediaGroupIdentifier?,
|
||||
) : AnonymousGroupContentMessage<T>
|
||||
) : AnonymousGroupContentMessage<T> {
|
||||
constructor(
|
||||
chat: PreviewGroupChat,
|
||||
messageId: MessageId,
|
||||
date: DateTime,
|
||||
forwardInfo: ForwardInfo,
|
||||
editDate: DateTime?,
|
||||
hasProtectedContent: Boolean,
|
||||
replyTo: AccessibleMessage?,
|
||||
replyMarkup: InlineKeyboardMarkup?,
|
||||
content: T,
|
||||
senderBot: CommonBot?,
|
||||
authorSignature: AuthorSignature?,
|
||||
mediaGroupId: MediaGroupIdentifier?,
|
||||
) : this(
|
||||
chat, messageId, date, forwardInfo.messageOrigin(), editDate, hasProtectedContent, replyTo, replyMarkup, content, senderBot, authorSignature, mediaGroupId
|
||||
)
|
||||
}
|
||||
|
||||
data class CommonGroupContentMessageImpl<T : MessageContent>(
|
||||
override val chat: PreviewGroupChat,
|
||||
override val messageId: MessageId,
|
||||
override val from: User,
|
||||
override val date: DateTime,
|
||||
override val forwardInfo: ForwardInfo?,
|
||||
override val forwardOrigin: MessageOrigin?,
|
||||
override val editDate: DateTime?,
|
||||
override val hasProtectedContent: Boolean,
|
||||
override val replyTo: Message?,
|
||||
override val replyTo: AccessibleMessage?,
|
||||
override val replyMarkup: InlineKeyboardMarkup?,
|
||||
override val content: T,
|
||||
override val senderBot: CommonBot?,
|
||||
override val mediaGroupId: MediaGroupIdentifier?,
|
||||
) : CommonGroupContentMessage<T>
|
||||
) : CommonGroupContentMessage<T> {
|
||||
constructor(
|
||||
chat: PreviewGroupChat,
|
||||
messageId: MessageId,
|
||||
from: User,
|
||||
date: DateTime,
|
||||
forwardInfo: ForwardInfo,
|
||||
editDate: DateTime?,
|
||||
hasProtectedContent: Boolean,
|
||||
replyTo: AccessibleMessage?,
|
||||
replyMarkup: InlineKeyboardMarkup?,
|
||||
content: T,
|
||||
senderBot: CommonBot?,
|
||||
mediaGroupId: MediaGroupIdentifier?,
|
||||
) : this(
|
||||
chat, messageId, from, date, forwardInfo.messageOrigin(), editDate, hasProtectedContent, replyTo, replyMarkup, content, senderBot, mediaGroupId
|
||||
)
|
||||
}
|
||||
|
||||
data class FromChannelForumContentMessageImpl<T: MessageContent>(
|
||||
override val chat: PreviewForumChat,
|
||||
@@ -77,32 +148,69 @@ data class FromChannelForumContentMessageImpl<T: MessageContent>(
|
||||
override val messageId: MessageId,
|
||||
override val threadId: MessageThreadId,
|
||||
override val date: DateTime,
|
||||
override val forwardInfo: ForwardInfo?,
|
||||
override val forwardOrigin: MessageOrigin?,
|
||||
override val editDate: DateTime?,
|
||||
override val hasProtectedContent: Boolean,
|
||||
override val replyTo: Message?,
|
||||
override val replyTo: AccessibleMessage?,
|
||||
override val replyMarkup: InlineKeyboardMarkup?,
|
||||
override val content: T,
|
||||
override val senderBot: CommonBot?,
|
||||
override val authorSignature: AuthorSignature?,
|
||||
override val mediaGroupId: MediaGroupIdentifier?,
|
||||
) : FromChannelForumContentMessage<T>
|
||||
) : FromChannelForumContentMessage<T> {
|
||||
constructor(
|
||||
chat: PreviewForumChat,
|
||||
channel: PreviewChannelChat,
|
||||
messageId: MessageId,
|
||||
threadId: MessageThreadId,
|
||||
date: DateTime,
|
||||
forwardInfo: ForwardInfo,
|
||||
editDate: DateTime?,
|
||||
hasProtectedContent: Boolean,
|
||||
replyTo: AccessibleMessage?,
|
||||
replyMarkup: InlineKeyboardMarkup?,
|
||||
content: T,
|
||||
senderBot: CommonBot?,
|
||||
authorSignature: AuthorSignature?,
|
||||
mediaGroupId: MediaGroupIdentifier?,
|
||||
) : this(
|
||||
chat, channel, messageId, threadId, date, forwardInfo.messageOrigin(), editDate, hasProtectedContent, replyTo, replyMarkup, content, senderBot, authorSignature, mediaGroupId
|
||||
)
|
||||
}
|
||||
|
||||
data class AnonymousForumContentMessageImpl<T : MessageContent>(
|
||||
override val chat: PreviewForumChat,
|
||||
override val messageId: MessageId,
|
||||
override val threadId: MessageThreadId,
|
||||
override val date: DateTime,
|
||||
override val forwardInfo: ForwardInfo?,
|
||||
override val forwardOrigin: MessageOrigin?,
|
||||
override val editDate: DateTime?,
|
||||
override val hasProtectedContent: Boolean,
|
||||
override val replyTo: Message?,
|
||||
override val replyTo: AccessibleMessage?,
|
||||
override val replyMarkup: InlineKeyboardMarkup?,
|
||||
override val content: T,
|
||||
override val senderBot: CommonBot?,
|
||||
override val authorSignature: AuthorSignature?,
|
||||
override val mediaGroupId: MediaGroupIdentifier?,
|
||||
) : AnonymousForumContentMessage<T>
|
||||
) : AnonymousForumContentMessage<T> {
|
||||
constructor(
|
||||
chat: PreviewForumChat,
|
||||
messageId: MessageId,
|
||||
threadId: MessageThreadId,
|
||||
date: DateTime,
|
||||
forwardInfo: ForwardInfo,
|
||||
editDate: DateTime?,
|
||||
hasProtectedContent: Boolean,
|
||||
replyTo: AccessibleMessage?,
|
||||
replyMarkup: InlineKeyboardMarkup?,
|
||||
content: T,
|
||||
senderBot: CommonBot?,
|
||||
authorSignature: AuthorSignature?,
|
||||
mediaGroupId: MediaGroupIdentifier?,
|
||||
) : this(
|
||||
chat, messageId, threadId, date, forwardInfo.messageOrigin(), editDate, hasProtectedContent, replyTo, replyMarkup, content, senderBot, authorSignature, mediaGroupId
|
||||
)
|
||||
}
|
||||
|
||||
data class CommonForumContentMessageImpl<T : MessageContent>(
|
||||
override val chat: PreviewForumChat,
|
||||
@@ -110,12 +218,30 @@ data class CommonForumContentMessageImpl<T : MessageContent>(
|
||||
override val threadId: MessageThreadId,
|
||||
override val from: User,
|
||||
override val date: DateTime,
|
||||
override val forwardInfo: ForwardInfo?,
|
||||
override val forwardOrigin: MessageOrigin?,
|
||||
override val editDate: DateTime?,
|
||||
override val hasProtectedContent: Boolean,
|
||||
override val replyTo: Message?,
|
||||
override val replyTo: AccessibleMessage?,
|
||||
override val replyMarkup: InlineKeyboardMarkup?,
|
||||
override val content: T,
|
||||
override val senderBot: CommonBot?,
|
||||
override val mediaGroupId: MediaGroupIdentifier?,
|
||||
) : CommonForumContentMessage<T>
|
||||
) : CommonForumContentMessage<T> {
|
||||
constructor(
|
||||
chat: PreviewForumChat,
|
||||
messageId: MessageId,
|
||||
threadId: MessageThreadId,
|
||||
from: User,
|
||||
date: DateTime,
|
||||
forwardInfo: ForwardInfo,
|
||||
editDate: DateTime?,
|
||||
hasProtectedContent: Boolean,
|
||||
replyTo: AccessibleMessage?,
|
||||
replyMarkup: InlineKeyboardMarkup?,
|
||||
content: T,
|
||||
senderBot: CommonBot?,
|
||||
mediaGroupId: MediaGroupIdentifier?,
|
||||
) : this(
|
||||
chat, messageId, threadId, from, date, forwardInfo.messageOrigin(), editDate, hasProtectedContent, replyTo, replyMarkup, content, senderBot, mediaGroupId
|
||||
)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,179 @@
|
||||
package dev.inmo.tgbotapi.types.message
|
||||
|
||||
import dev.inmo.tgbotapi.types.*
|
||||
import dev.inmo.tgbotapi.types.chat.*
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.Required
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.descriptors.SerialDescriptor
|
||||
import kotlinx.serialization.encoding.Decoder
|
||||
import kotlinx.serialization.encoding.Encoder
|
||||
import kotlinx.serialization.json.JsonDecoder
|
||||
import kotlinx.serialization.json.JsonElement
|
||||
import kotlinx.serialization.json.decodeFromJsonElement
|
||||
|
||||
@Serializable(MessageOrigin.Companion::class)
|
||||
sealed interface MessageOrigin {
|
||||
val type: String
|
||||
val date: TelegramDate
|
||||
|
||||
@Serializable
|
||||
data class User(
|
||||
@SerialName(senderUserField)
|
||||
val user: PreviewUser,
|
||||
@SerialName(dateField)
|
||||
override val date: TelegramDate
|
||||
) : MessageOrigin {
|
||||
@SerialName(typeField)
|
||||
@Required
|
||||
override val type: String = Companion.type
|
||||
|
||||
companion object {
|
||||
val type: String = "user"
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class HiddenUser(
|
||||
@SerialName(senderUserNameField)
|
||||
val name: String,
|
||||
@SerialName(dateField)
|
||||
override val date: TelegramDate
|
||||
) : MessageOrigin {
|
||||
@SerialName(typeField)
|
||||
@Required
|
||||
override val type: String = Companion.type
|
||||
|
||||
companion object {
|
||||
val type: String = "hidden_user"
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable(MessageOrigin.Companion::class)
|
||||
sealed interface Public : MessageOrigin {
|
||||
val chat: PublicChat
|
||||
val authorSignature: AuthorSignature?
|
||||
|
||||
@Serializable
|
||||
data class Sender(
|
||||
@SerialName(senderChatField)
|
||||
override val chat: SuperPublicChat,
|
||||
@SerialName(dateField)
|
||||
override val date: TelegramDate,
|
||||
@SerialName(authorSignatureField)
|
||||
override val authorSignature: AuthorSignature? = null
|
||||
) : Public {
|
||||
@SerialName(typeField)
|
||||
@Required
|
||||
override val type: String = Companion.type
|
||||
|
||||
companion object {
|
||||
val type: String = "chat"
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class Channel(
|
||||
@SerialName(chatField)
|
||||
override val chat: ChannelChat,
|
||||
@SerialName(messageIdField)
|
||||
val messageId: MessageId,
|
||||
@SerialName(dateField)
|
||||
override val date: TelegramDate,
|
||||
@SerialName(authorSignatureField)
|
||||
override val authorSignature: AuthorSignature? = null
|
||||
) : Public {
|
||||
@SerialName(typeField)
|
||||
@Required
|
||||
override val type: String = Companion.type
|
||||
|
||||
companion object {
|
||||
val type: String = "channel"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class Unknown internal constructor(
|
||||
override val type: String,
|
||||
override val date: TelegramDate,
|
||||
val source: JsonElement?
|
||||
) : MessageOrigin
|
||||
|
||||
@Serializable
|
||||
private data class Surrogate(
|
||||
@SerialName(typeField)
|
||||
@Required
|
||||
val type: String,
|
||||
@SerialName(senderChatField)
|
||||
val senderChat: PreviewChat? = null,
|
||||
@SerialName(chatField)
|
||||
val chat: PreviewChat? = null,
|
||||
@SerialName(dateField)
|
||||
val date: TelegramDate,
|
||||
@SerialName(authorSignatureField)
|
||||
val authorSignature: AuthorSignature? = null,
|
||||
@SerialName(messageIdField)
|
||||
val messageId: MessageId? = null,
|
||||
@SerialName(senderUserNameField)
|
||||
val name: String? = null,
|
||||
@SerialName(senderUserField)
|
||||
val user: PreviewUser? = null
|
||||
)
|
||||
|
||||
companion object : KSerializer<MessageOrigin> {
|
||||
override val descriptor: SerialDescriptor
|
||||
get() = Surrogate.serializer().descriptor
|
||||
|
||||
override fun deserialize(decoder: Decoder): MessageOrigin {
|
||||
val (surrogate, json) = if (decoder is JsonDecoder) {
|
||||
val json = decoder.decodeJsonElement()
|
||||
val surrogate = decoder.json.decodeFromJsonElement(Surrogate.serializer(), json)
|
||||
surrogate to json
|
||||
} else {
|
||||
Surrogate.serializer().deserialize(decoder) to null
|
||||
}
|
||||
|
||||
return let {
|
||||
when (surrogate.type) {
|
||||
HiddenUser.type -> HiddenUser(
|
||||
surrogate.name ?: return@let null,
|
||||
surrogate.date
|
||||
)
|
||||
Public.Channel.type -> Public.Channel(
|
||||
surrogate.chat as? ChannelChat ?: return@let null,
|
||||
surrogate.messageId ?: return@let null,
|
||||
surrogate.date,
|
||||
surrogate.authorSignature
|
||||
)
|
||||
Public.Sender.type -> Public.Sender(
|
||||
surrogate.senderChat as? ChannelChat ?: return@let null,
|
||||
surrogate.date,
|
||||
surrogate.authorSignature
|
||||
)
|
||||
User.type -> User(
|
||||
surrogate.user ?: return@let null,
|
||||
surrogate.date
|
||||
)
|
||||
else -> null
|
||||
}
|
||||
} ?: Unknown(
|
||||
surrogate.type,
|
||||
surrogate.date,
|
||||
json
|
||||
)
|
||||
}
|
||||
|
||||
override fun serialize(encoder: Encoder, value: MessageOrigin) {
|
||||
when (value) {
|
||||
is HiddenUser -> HiddenUser.serializer().serialize(encoder, value)
|
||||
is Public.Channel -> Public.Channel.serializer().serialize(encoder, value)
|
||||
is Public.Sender -> Public.Sender.serializer().serialize(encoder, value)
|
||||
is Unknown -> value.source ?.let { JsonElement.serializer().serialize(encoder, it) } ?: Unknown.serializer().serialize(encoder, value)
|
||||
is User -> User.serializer().serialize(encoder, value)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -3,10 +3,9 @@ package dev.inmo.tgbotapi.types.message
|
||||
import korlibs.time.DateTime
|
||||
import dev.inmo.tgbotapi.types.MessageId
|
||||
import dev.inmo.tgbotapi.types.chat.User
|
||||
import dev.inmo.tgbotapi.types.chat.Chat
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewChat
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.FromUserMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
import dev.inmo.tgbotapi.types.passport.PassportData
|
||||
|
||||
data class PassportMessage(
|
||||
@@ -15,4 +14,4 @@ data class PassportMessage(
|
||||
override val from: User,
|
||||
override val date: DateTime,
|
||||
val passportData: PassportData
|
||||
) : Message, FromUserMessage
|
||||
) : AccessibleMessage, FromUserMessage
|
||||
|
||||
@@ -6,7 +6,7 @@ import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup
|
||||
import dev.inmo.tgbotapi.types.chat.*
|
||||
import dev.inmo.tgbotapi.types.chat.CommonBot
|
||||
import dev.inmo.tgbotapi.types.chat.User
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.PrivateContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.content.MessageContent
|
||||
|
||||
@@ -18,9 +18,26 @@ data class PrivateContentMessageImpl<T: MessageContent>(
|
||||
override val date: DateTime,
|
||||
override val editDate: DateTime?,
|
||||
override val hasProtectedContent: Boolean,
|
||||
override val forwardInfo: ForwardInfo?,
|
||||
override val replyTo: Message?,
|
||||
override val forwardOrigin: MessageOrigin?,
|
||||
override val replyTo: AccessibleMessage?,
|
||||
override val replyMarkup: InlineKeyboardMarkup?,
|
||||
override val senderBot: CommonBot?,
|
||||
override val mediaGroupId: MediaGroupIdentifier?,
|
||||
) : PrivateContentMessage<T>
|
||||
) : PrivateContentMessage<T> {
|
||||
constructor(
|
||||
messageId: MessageId,
|
||||
from: User,
|
||||
chat: PreviewPrivateChat,
|
||||
content: T,
|
||||
date: DateTime,
|
||||
editDate: DateTime?,
|
||||
hasProtectedContent: Boolean,
|
||||
forwardInfo: ForwardInfo,
|
||||
replyTo: AccessibleMessage?,
|
||||
replyMarkup: InlineKeyboardMarkup?,
|
||||
senderBot: CommonBot?,
|
||||
mediaGroupId: MediaGroupIdentifier?,
|
||||
) : this(
|
||||
messageId, from, chat, content, date, editDate, hasProtectedContent, forwardInfo.messageOrigin(), replyTo, replyMarkup, senderBot, mediaGroupId
|
||||
)
|
||||
}
|
||||
|
||||
@@ -9,10 +9,8 @@ import dev.inmo.tgbotapi.types.dice.Dice
|
||||
import dev.inmo.tgbotapi.types.files.*
|
||||
import dev.inmo.tgbotapi.types.files.Sticker
|
||||
import dev.inmo.tgbotapi.types.games.RawGame
|
||||
import dev.inmo.tgbotapi.types.giveaway.Giveaway
|
||||
import dev.inmo.tgbotapi.types.giveaway.GiveawayCreated
|
||||
import dev.inmo.tgbotapi.types.giveaway.GiveawayPrivateResults
|
||||
import dev.inmo.tgbotapi.types.giveaway.GiveawayResults
|
||||
import dev.inmo.tgbotapi.types.giveaway.*
|
||||
import dev.inmo.tgbotapi.types.message.content.ScheduledGiveawayContent
|
||||
import dev.inmo.tgbotapi.types.location.Location
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.*
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.*
|
||||
@@ -52,12 +50,8 @@ internal data class RawMessage(
|
||||
private val messageThreadId: MessageThreadId? = null,
|
||||
private val from: User? = null,
|
||||
private val sender_chat: PreviewPublicChat? = null,
|
||||
private val forward_from: User? = null,
|
||||
private val forward_from_chat: Chat? = null,
|
||||
private val forward_from_message_id: MessageId? = null,
|
||||
private val forward_signature: ForwardSignature? = null,
|
||||
private val forward_sender_name: ForwardSenderName? = null,
|
||||
private val forward_date: TelegramDate? = null,
|
||||
private val forward_origin: MessageOrigin? = null,
|
||||
private val is_topic_message: Boolean? = null,
|
||||
private val is_automatic_forward: Boolean? = null,
|
||||
private val reply_to_message: RawMessage? = null,
|
||||
private val via_bot: CommonBot? = null,
|
||||
@@ -100,6 +94,8 @@ internal data class RawMessage(
|
||||
private val invoice: Invoice? = null,
|
||||
private val dice: Dice? = null,
|
||||
private val successful_payment: SuccessfulPayment? = null,
|
||||
private val giveaway: ScheduledGiveaway? = null,
|
||||
private val giveaway_winners: GiveawayResults? = null,
|
||||
|
||||
private val users_shared: UsersShared? = null,
|
||||
private val chat_shared: ChatShared? = null,
|
||||
@@ -138,8 +134,6 @@ internal data class RawMessage(
|
||||
|
||||
// Giveaways
|
||||
private val giveaway_created: GiveawayCreated? = null,
|
||||
private val giveaway: Giveaway? = null,
|
||||
private val giveaway_winners: GiveawayResults? = null,
|
||||
private val giveaway_completed: GiveawayPrivateResults? = null,
|
||||
) {
|
||||
private val content: MessageContent? by lazy {
|
||||
@@ -183,7 +177,7 @@ internal data class RawMessage(
|
||||
adaptedCaptionEntities
|
||||
)
|
||||
photo != null -> PhotoContent(
|
||||
photo.toList(),
|
||||
photo,
|
||||
caption,
|
||||
adaptedCaptionEntities,
|
||||
has_media_spoiler ?: false
|
||||
@@ -197,44 +191,8 @@ internal data class RawMessage(
|
||||
venue != null -> VenueContent(venue)
|
||||
poll != null -> PollContent(poll)
|
||||
invoice != null -> InvoiceContent(invoice)
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
|
||||
private val forwarded: ForwardInfo? by lazy {
|
||||
forward_date
|
||||
?: return@lazy null // According to the documentation, now any forwarded message contains this field
|
||||
when {
|
||||
forward_sender_name != null -> ForwardInfo.ByAnonymous(
|
||||
forward_date,
|
||||
forward_sender_name
|
||||
)
|
||||
|
||||
forward_from_chat is ChannelChat -> if (forward_from_message_id == null) {
|
||||
ForwardInfo.PublicChat.SentByChannel(
|
||||
forward_date,
|
||||
forward_from_chat,
|
||||
forward_signature
|
||||
)
|
||||
} else {
|
||||
ForwardInfo.PublicChat.FromChannel(
|
||||
forward_date,
|
||||
forward_from_message_id,
|
||||
forward_from_chat,
|
||||
forward_signature
|
||||
)
|
||||
}
|
||||
|
||||
forward_from_chat is SupergroupChat -> ForwardInfo.PublicChat.FromSupergroup(
|
||||
forward_date,
|
||||
forward_from_chat
|
||||
)
|
||||
|
||||
forward_from != null -> ForwardInfo.ByUser(
|
||||
forward_date,
|
||||
forward_from
|
||||
)
|
||||
|
||||
giveaway != null -> ScheduledGiveawayContent(chat, messageId, giveaway)
|
||||
giveaway_winners is GiveawayPublicResults -> GiveawayPublicResultsContent(giveaway_winners)
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
@@ -244,7 +202,7 @@ internal data class RawMessage(
|
||||
new_chat_members != null -> NewChatMembers(new_chat_members.toList())
|
||||
left_chat_member != null -> LeftChatMemberEvent(left_chat_member)
|
||||
new_chat_title != null -> NewChatTitle(new_chat_title)
|
||||
new_chat_photo != null -> NewChatPhoto(new_chat_photo.toList())
|
||||
new_chat_photo != null -> NewChatPhoto(new_chat_photo)
|
||||
video_chat_started != null -> video_chat_started
|
||||
video_chat_scheduled != null -> video_chat_scheduled
|
||||
message_auto_delete_timer_changed != null -> message_auto_delete_timer_changed
|
||||
@@ -279,14 +237,20 @@ internal data class RawMessage(
|
||||
users_shared != null -> users_shared
|
||||
chat_shared != null -> chat_shared
|
||||
giveaway_created != null -> giveaway_created
|
||||
giveaway != null -> giveaway
|
||||
giveaway_winners != null -> giveaway_winners
|
||||
giveaway_winners is GiveawayPrivateResults -> giveaway_winners
|
||||
giveaway_completed != null -> giveaway_completed
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
|
||||
val asMessage: Message by lazy {
|
||||
val asMessage: AccessibleMessage by lazy {
|
||||
if (date.date == 0L) {
|
||||
return@lazy InaccessibleMessage(
|
||||
chat,
|
||||
messageId
|
||||
)
|
||||
}
|
||||
|
||||
try {
|
||||
chatEvent?.let { chatEvent ->
|
||||
when (chat) {
|
||||
@@ -327,7 +291,7 @@ internal data class RawMessage(
|
||||
date.asDate,
|
||||
edit_date?.asDate,
|
||||
has_protected_content == true,
|
||||
forwarded,
|
||||
forward_origin,
|
||||
reply_to_message?.asMessage,
|
||||
reply_markup,
|
||||
via_bot,
|
||||
@@ -349,7 +313,7 @@ internal data class RawMessage(
|
||||
messageId,
|
||||
messageThreadId,
|
||||
date.asDate,
|
||||
forwarded,
|
||||
forward_origin,
|
||||
edit_date ?.asDate,
|
||||
has_protected_content == true,
|
||||
reply_to_message ?.asMessage,
|
||||
@@ -364,7 +328,7 @@ internal data class RawMessage(
|
||||
messageId,
|
||||
messageThreadId,
|
||||
date.asDate,
|
||||
forwarded,
|
||||
forward_origin,
|
||||
edit_date ?.asDate,
|
||||
has_protected_content == true,
|
||||
reply_to_message ?.asMessage,
|
||||
@@ -380,7 +344,7 @@ internal data class RawMessage(
|
||||
messageThreadId,
|
||||
from ?: error("It is expected that in messages from non anonymous users and channels user must be specified"),
|
||||
date.asDate,
|
||||
forwarded,
|
||||
forward_origin,
|
||||
edit_date ?.asDate,
|
||||
has_protected_content == true,
|
||||
reply_to_message ?.asMessage,
|
||||
@@ -398,7 +362,7 @@ internal data class RawMessage(
|
||||
sender_chat,
|
||||
messageId,
|
||||
date.asDate,
|
||||
forwarded,
|
||||
forward_origin,
|
||||
edit_date ?.asDate,
|
||||
has_protected_content == true,
|
||||
reply_to_message ?.asMessage,
|
||||
@@ -414,7 +378,7 @@ internal data class RawMessage(
|
||||
sender_chat,
|
||||
messageId,
|
||||
date.asDate,
|
||||
forwarded,
|
||||
forward_origin,
|
||||
edit_date ?.asDate,
|
||||
has_protected_content == true,
|
||||
reply_to_message ?.asMessage,
|
||||
@@ -429,7 +393,7 @@ internal data class RawMessage(
|
||||
chat,
|
||||
messageId,
|
||||
date.asDate,
|
||||
forwarded,
|
||||
forward_origin,
|
||||
edit_date ?.asDate,
|
||||
has_protected_content == true,
|
||||
reply_to_message ?.asMessage,
|
||||
@@ -444,7 +408,7 @@ internal data class RawMessage(
|
||||
messageId,
|
||||
from ?: error("It is expected that in messages from non anonymous users and channels user must be specified"),
|
||||
date.asDate,
|
||||
forwarded,
|
||||
forward_origin,
|
||||
edit_date ?.asDate,
|
||||
has_protected_content == true,
|
||||
reply_to_message ?.asMessage,
|
||||
@@ -462,7 +426,7 @@ internal data class RawMessage(
|
||||
sender_chat,
|
||||
messageId,
|
||||
date.asDate,
|
||||
forwarded,
|
||||
forward_origin,
|
||||
edit_date ?.asDate,
|
||||
has_protected_content == true,
|
||||
reply_to_message ?.asMessage,
|
||||
@@ -478,7 +442,7 @@ internal data class RawMessage(
|
||||
sender_chat,
|
||||
messageId,
|
||||
date.asDate,
|
||||
forwarded,
|
||||
forward_origin,
|
||||
edit_date ?.asDate,
|
||||
has_protected_content == true,
|
||||
reply_to_message ?.asMessage,
|
||||
@@ -493,7 +457,7 @@ internal data class RawMessage(
|
||||
chat,
|
||||
messageId,
|
||||
date.asDate,
|
||||
forwarded,
|
||||
forward_origin,
|
||||
edit_date ?.asDate,
|
||||
has_protected_content == true,
|
||||
reply_to_message ?.asMessage,
|
||||
@@ -508,7 +472,7 @@ internal data class RawMessage(
|
||||
messageId,
|
||||
from ?: error("It is expected that in messages from non anonymous users and channels user must be specified"),
|
||||
date.asDate,
|
||||
forwarded,
|
||||
forward_origin,
|
||||
edit_date ?.asDate,
|
||||
has_protected_content == true,
|
||||
reply_to_message ?.asMessage,
|
||||
@@ -527,7 +491,7 @@ internal data class RawMessage(
|
||||
date.asDate,
|
||||
edit_date?.asDate,
|
||||
has_protected_content == true,
|
||||
forwarded,
|
||||
forward_origin,
|
||||
reply_to_message?.asMessage,
|
||||
reply_markup,
|
||||
via_bot,
|
||||
|
||||
@@ -2,6 +2,6 @@ package dev.inmo.tgbotapi.types.message.abstracts
|
||||
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.ChatEvent
|
||||
|
||||
interface ChatEventMessage<T : ChatEvent> : Message {
|
||||
interface ChatEventMessage<T : ChatEvent> : AccessibleMessage {
|
||||
val chatEvent: T
|
||||
}
|
||||
@@ -2,7 +2,7 @@ package dev.inmo.tgbotapi.types.message.abstracts
|
||||
|
||||
import dev.inmo.tgbotapi.types.message.content.MessageContent
|
||||
|
||||
sealed interface CommonMessage<out T: MessageContent> : Message,
|
||||
sealed interface CommonMessage<out T: MessageContent> : AccessibleMessage,
|
||||
PossiblyForwardedMessage,
|
||||
PossiblyEditedMessage,
|
||||
PossiblyReplyMessage,
|
||||
|
||||
@@ -2,7 +2,7 @@ package dev.inmo.tgbotapi.types.message.abstracts
|
||||
|
||||
import dev.inmo.tgbotapi.types.message.content.MessageContent
|
||||
|
||||
interface ContentMessage<out T: MessageContent>: Message {
|
||||
interface ContentMessage<out T: MessageContent>: AccessibleMessage {
|
||||
val hasProtectedContent: Boolean
|
||||
val content: T
|
||||
|
||||
|
||||
@@ -2,4 +2,4 @@ package dev.inmo.tgbotapi.types.message.abstracts
|
||||
|
||||
import dev.inmo.tgbotapi.abstracts.FromUser
|
||||
|
||||
interface FromUserMessage : FromUser, Message
|
||||
interface FromUserMessage : FromUser, AccessibleMessage
|
||||
|
||||
@@ -2,21 +2,56 @@ package dev.inmo.tgbotapi.types.message.abstracts
|
||||
|
||||
import dev.inmo.tgbotapi.abstracts.WithMessageId
|
||||
import korlibs.time.DateTime
|
||||
import dev.inmo.tgbotapi.abstracts.WithPreviewChat
|
||||
import dev.inmo.tgbotapi.abstracts.WithPreviewChatAndMessageId
|
||||
import dev.inmo.tgbotapi.types.ChatIdentifier
|
||||
import dev.inmo.tgbotapi.utils.internal.ClassCastsIncluded
|
||||
import dev.inmo.tgbotapi.types.MessageId
|
||||
import dev.inmo.tgbotapi.types.chat.Chat
|
||||
import dev.inmo.tgbotapi.types.MessageThreadId
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewChat
|
||||
import dev.inmo.tgbotapi.types.message.RawMessage
|
||||
import dev.inmo.tgbotapi.types.threadId
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.descriptors.*
|
||||
import kotlinx.serialization.encoding.Decoder
|
||||
import kotlinx.serialization.encoding.Encoder
|
||||
import kotlin.jvm.JvmInline
|
||||
|
||||
@ClassCastsIncluded(excludeRegex = ".*Impl")
|
||||
interface Message : WithPreviewChatAndMessageId {
|
||||
val date: DateTime
|
||||
val metaInfo: MetaInfo
|
||||
get() = MetaInfo(chat.id, messageId)
|
||||
|
||||
@Serializable
|
||||
@JvmInline
|
||||
value class MetaInfo(
|
||||
val chatIdMessageIdThreadId: Triple<ChatIdentifier, MessageId, MessageThreadId?>
|
||||
) : WithMessageId {
|
||||
val chatId: ChatIdentifier
|
||||
get() = chatIdMessageIdThreadId.first
|
||||
override val messageId: MessageId
|
||||
get() = chatIdMessageIdThreadId.second
|
||||
val threadId: MessageThreadId?
|
||||
get() = chatIdMessageIdThreadId.third
|
||||
|
||||
constructor(chatId: ChatIdentifier, messageId: MessageId, threadId: MessageThreadId? = chatId.threadId) : this(Triple(chatId, messageId, threadId))
|
||||
constructor(chatIdMessageId: Pair<ChatIdentifier, MessageId>, threadId: MessageThreadId? = chatIdMessageId.first.threadId) : this(Triple(chatIdMessageId.first, chatIdMessageId.second, threadId))
|
||||
|
||||
fun copy(
|
||||
chatId: ChatIdentifier = this.chatId, messageId: MessageId = this.messageId, threadId: MessageThreadId? = chatId.threadId
|
||||
) = MetaInfo(chatId, messageId, threadId)
|
||||
}
|
||||
}
|
||||
|
||||
interface AccessibleMessage : Message
|
||||
|
||||
@Serializable
|
||||
data class InaccessibleMessage(
|
||||
override val chat: PreviewChat,
|
||||
override val messageId: MessageId,
|
||||
) : AccessibleMessage {
|
||||
override val date: DateTime
|
||||
get() = DateTime.invoke(0L)
|
||||
}
|
||||
|
||||
data class UnknownMessageType(
|
||||
@@ -24,7 +59,7 @@ data class UnknownMessageType(
|
||||
override val chat: PreviewChat,
|
||||
override val date: DateTime,
|
||||
val insideException: Exception
|
||||
) : Message
|
||||
) : AccessibleMessage
|
||||
|
||||
internal class TelegramBotAPIMessageDeserializationStrategyClass<T> : DeserializationStrategy<T> {
|
||||
@OptIn(InternalSerializationApi::class)
|
||||
|
||||
@@ -2,6 +2,6 @@ package dev.inmo.tgbotapi.types.message.abstracts
|
||||
|
||||
import korlibs.time.DateTime
|
||||
|
||||
interface PossiblyEditedMessage : Message {
|
||||
interface PossiblyEditedMessage : AccessibleMessage {
|
||||
val editDate: DateTime?
|
||||
}
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
package dev.inmo.tgbotapi.types.message.abstracts
|
||||
|
||||
import dev.inmo.tgbotapi.types.message.ForwardInfo
|
||||
import dev.inmo.tgbotapi.types.message.MessageOrigin
|
||||
import dev.inmo.tgbotapi.types.message.forwardInfo
|
||||
|
||||
interface PossiblyForwardedMessage : Message {
|
||||
interface PossiblyForwardedMessage : AccessibleMessage {
|
||||
val forwardOrigin: MessageOrigin?
|
||||
val forwardInfo: ForwardInfo?
|
||||
get() = forwardOrigin ?.forwardInfo()
|
||||
}
|
||||
@@ -2,6 +2,6 @@ package dev.inmo.tgbotapi.types.message.abstracts
|
||||
|
||||
import dev.inmo.tgbotapi.types.message.payments.abstracts.PaymentInfo
|
||||
|
||||
interface PossiblyPaymentMessage : Message {
|
||||
interface PossiblyPaymentMessage : AccessibleMessage {
|
||||
val paymentInfo: PaymentInfo?
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
package dev.inmo.tgbotapi.types.message.abstracts
|
||||
|
||||
interface PossiblyReplyMessage {
|
||||
val replyTo: Message?
|
||||
val replyTo: AccessibleMessage?
|
||||
}
|
||||
@@ -2,6 +2,6 @@ package dev.inmo.tgbotapi.types.message.abstracts
|
||||
|
||||
import dev.inmo.tgbotapi.types.MessageThreadId
|
||||
|
||||
interface PossiblyTopicMessage : Message {
|
||||
interface PossiblyTopicMessage : AccessibleMessage {
|
||||
val threadId: MessageThreadId?
|
||||
}
|
||||
|
||||
@@ -2,6 +2,6 @@ package dev.inmo.tgbotapi.types.message.abstracts
|
||||
|
||||
import dev.inmo.tgbotapi.types.AuthorSignature
|
||||
|
||||
interface SignedMessage : Message {
|
||||
interface SignedMessage : AccessibleMessage {
|
||||
val authorSignature: AuthorSignature?
|
||||
}
|
||||
@@ -52,6 +52,8 @@ sealed interface MessageContent: ResendableContent {
|
||||
subclass(StickerContent::class)
|
||||
subclass(InvoiceContent::class)
|
||||
subclass(StoryContent::class)
|
||||
subclass(GiveawayPublicResultsContent::class)
|
||||
subclass(ScheduledGiveawayContent::class)
|
||||
|
||||
additionalBuilder()
|
||||
}
|
||||
@@ -139,18 +141,6 @@ sealed interface TextedContent : MessageContent, TextedInput
|
||||
sealed interface MediaContent: MessageContent {
|
||||
val media: TelegramMediaFile
|
||||
fun asTelegramMedia(): TelegramMedia
|
||||
|
||||
override fun createResend(
|
||||
chatId: ChatIdentifier,
|
||||
messageThreadId: MessageThreadId?,
|
||||
disableNotification: Boolean,
|
||||
protectContent: Boolean,
|
||||
replyToMessageId: MessageId?,
|
||||
allowSendingWithoutReply: Boolean?,
|
||||
replyMarkup: KeyboardMarkup?
|
||||
): Request<out ContentMessage<MediaContent>> {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
}
|
||||
|
||||
sealed interface SpoilerableMediaContent : MediaContent, SpoilerableData
|
||||
@@ -165,5 +155,5 @@ sealed interface ResendableContent {
|
||||
replyToMessageId: MessageId? = null,
|
||||
allowSendingWithoutReply: Boolean? = null,
|
||||
replyMarkup: KeyboardMarkup? = null
|
||||
): Request<out Message>
|
||||
): Request<out AccessibleMessage>
|
||||
}
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
package dev.inmo.tgbotapi.types.message.content
|
||||
|
||||
import dev.inmo.tgbotapi.requests.ForwardMessage
|
||||
import dev.inmo.tgbotapi.requests.abstracts.Request
|
||||
import dev.inmo.tgbotapi.types.*
|
||||
import dev.inmo.tgbotapi.types.buttons.KeyboardMarkup
|
||||
import dev.inmo.tgbotapi.types.giveaway.GiveawayPublicResults
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class GiveawayPublicResultsContent(
|
||||
val giveaway: GiveawayPublicResults
|
||||
) : MessageContent {
|
||||
override fun createResend(
|
||||
chatId: ChatIdentifier,
|
||||
messageThreadId: MessageThreadId?,
|
||||
disableNotification: Boolean,
|
||||
protectContent: Boolean,
|
||||
replyToMessageId: MessageId?,
|
||||
allowSendingWithoutReply: Boolean?,
|
||||
replyMarkup: KeyboardMarkup?
|
||||
): Request<out AccessibleMessage> {
|
||||
return ForwardMessage(
|
||||
giveaway.chat.id,
|
||||
toChatId = chatId,
|
||||
messageId = giveaway.messageId,
|
||||
threadId = messageThreadId,
|
||||
disableNotification = disableNotification,
|
||||
protectContent = protectContent
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,6 @@ import dev.inmo.tgbotapi.types.buttons.KeyboardMarkup
|
||||
import dev.inmo.tgbotapi.types.files.TelegramMediaFile
|
||||
import dev.inmo.tgbotapi.types.media.TelegramMedia
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.textsources.TextSource
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
package dev.inmo.tgbotapi.types.message.content
|
||||
|
||||
import dev.inmo.micro_utils.language_codes.IetfLang
|
||||
import dev.inmo.tgbotapi.requests.ForwardMessage
|
||||
import dev.inmo.tgbotapi.requests.abstracts.Request
|
||||
import dev.inmo.tgbotapi.types.*
|
||||
import dev.inmo.tgbotapi.types.buttons.KeyboardMarkup
|
||||
import dev.inmo.tgbotapi.types.chat.Chat
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewChat
|
||||
import dev.inmo.tgbotapi.types.giveaway.GiveawayInfo
|
||||
import dev.inmo.tgbotapi.types.giveaway.ScheduledGiveaway
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class ScheduledGiveawayContent(
|
||||
private val chat: Chat,
|
||||
private val messageId: MessageId,
|
||||
val giveaway: ScheduledGiveaway
|
||||
) : MessageContent {
|
||||
override fun createResend(
|
||||
chatId: ChatIdentifier,
|
||||
messageThreadId: MessageThreadId?,
|
||||
disableNotification: Boolean,
|
||||
protectContent: Boolean,
|
||||
replyToMessageId: MessageId?,
|
||||
allowSendingWithoutReply: Boolean?,
|
||||
replyMarkup: KeyboardMarkup?
|
||||
): Request<out AccessibleMessage> {
|
||||
return ForwardMessage(
|
||||
chat.id,
|
||||
toChatId = chatId,
|
||||
messageId = messageId,
|
||||
threadId = messageThreadId,
|
||||
disableNotification = disableNotification,
|
||||
protectContent = protectContent
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -7,8 +7,6 @@ import dev.inmo.tgbotapi.types.MessageId
|
||||
import dev.inmo.tgbotapi.types.MessageThreadId
|
||||
import dev.inmo.tgbotapi.types.buttons.KeyboardMarkup
|
||||
import dev.inmo.tgbotapi.types.chat.Chat
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.PossiblyForwardedMessage
|
||||
import dev.inmo.tgbotapi.types.stories.Story
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@@ -32,5 +32,7 @@ typealias VisualMediaGroupMessage = CommonMessage<VisualMediaGroupPartContent>
|
||||
typealias VideoMessage = CommonMessage<VideoContent>
|
||||
typealias PhotoMessage = CommonMessage<PhotoContent>
|
||||
typealias AnimationMessage = CommonMessage<AnimationContent>
|
||||
typealias ScheduledGiveawayContentMessage = CommonMessage<ScheduledGiveawayContent>
|
||||
typealias GiveawayPublicResultsContentMessage = CommonMessage<GiveawayPublicResultsContent>
|
||||
|
||||
|
||||
|
||||
@@ -17,4 +17,4 @@ data class Invoice(
|
||||
override val currency: Currency,
|
||||
@SerialName(totalAmountField)
|
||||
override val amount: Long
|
||||
) : Amounted, Currencied
|
||||
) : Amounted, Currencied, ExternalReplyInfo.ContentVariant
|
||||
|
||||
@@ -49,7 +49,7 @@ val LongSeconds.asExactScheduledCloseInfo
|
||||
|
||||
@Serializable(PollSerializer::class)
|
||||
@ClassCastsIncluded
|
||||
sealed interface Poll {
|
||||
sealed interface Poll : ExternalReplyInfo.ContentVariant {
|
||||
val id: PollIdentifier
|
||||
val question: String
|
||||
val options: List<PollOption>
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package dev.inmo.tgbotapi.types.queries.callback
|
||||
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.content.MessageContent
|
||||
|
||||
sealed interface AbstractMessageCallbackQuery : CallbackQuery {
|
||||
val message: Message
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package dev.inmo.tgbotapi.types.queries.callback
|
||||
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.InaccessibleMessage
|
||||
|
||||
sealed interface InaccessibleMessageCallbackQuery : AbstractMessageCallbackQuery {
|
||||
override val message: InaccessibleMessage
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package dev.inmo.tgbotapi.types.queries.callback
|
||||
|
||||
import dev.inmo.tgbotapi.types.CallbackQueryIdentifier
|
||||
import dev.inmo.tgbotapi.types.chat.CommonUser
|
||||
import dev.inmo.tgbotapi.types.chat.User
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.InaccessibleMessage
|
||||
import dev.inmo.tgbotapi.types.message.content.MessageContent
|
||||
|
||||
data class InaccessibleMessageDataCallbackQuery(
|
||||
override val id: CallbackQueryIdentifier,
|
||||
override val from: CommonUser,
|
||||
override val chatInstance: String,
|
||||
override val message: InaccessibleMessage,
|
||||
override val data: String
|
||||
) : DataCallbackQuery, InaccessibleMessageCallbackQuery
|
||||
@@ -0,0 +1,16 @@
|
||||
package dev.inmo.tgbotapi.types.queries.callback
|
||||
|
||||
import dev.inmo.tgbotapi.types.CallbackQueryIdentifier
|
||||
import dev.inmo.tgbotapi.types.chat.CommonUser
|
||||
import dev.inmo.tgbotapi.types.chat.User
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.InaccessibleMessage
|
||||
import dev.inmo.tgbotapi.types.message.content.MessageContent
|
||||
|
||||
data class InaccessibleMessageGameShortNameCallbackQuery(
|
||||
override val id: CallbackQueryIdentifier,
|
||||
override val from: CommonUser,
|
||||
override val chatInstance: String,
|
||||
override val message: InaccessibleMessage,
|
||||
override val gameShortName: String
|
||||
) : GameShortNameCallbackQuery, InaccessibleMessageCallbackQuery
|
||||
@@ -3,6 +3,6 @@ package dev.inmo.tgbotapi.types.queries.callback
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.content.MessageContent
|
||||
|
||||
sealed interface MessageCallbackQuery : CallbackQuery {
|
||||
val message: ContentMessage<MessageContent>
|
||||
sealed interface MessageCallbackQuery : AbstractMessageCallbackQuery {
|
||||
override val message: ContentMessage<MessageContent>
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ internal data class RawCallbackQuery(
|
||||
@SerialName(fromField)
|
||||
val from: CommonUser,
|
||||
@Serializable(TelegramBotAPIMessageDeserializeOnlySerializer::class)
|
||||
val message: ContentMessage<MessageContent>? = null,
|
||||
val message: Message? = null,
|
||||
@SerialName(inlineMessageIdField)
|
||||
val inlineMessageId: InlineMessageIdentifier? = null,
|
||||
@SerialName("chat_instance")
|
||||
@@ -28,8 +28,26 @@ internal data class RawCallbackQuery(
|
||||
private var inited: CallbackQuery? = null
|
||||
fun asCallbackQuery(raw: String): CallbackQuery {
|
||||
return inited ?: when {
|
||||
message != null && data != null -> MessageDataCallbackQuery(id, from, chatInstance, message, data)
|
||||
message != null && gameShortName != null -> MessageGameShortNameCallbackQuery(id, from, chatInstance, message, gameShortName)
|
||||
message != null && data != null -> when {
|
||||
message is ContentMessage<*> -> MessageDataCallbackQuery(id, from, chatInstance, message, data)
|
||||
message is InaccessibleMessage -> InaccessibleMessageDataCallbackQuery(id, from, chatInstance, message, data)
|
||||
else -> UnknownCallbackQueryType(
|
||||
id,
|
||||
from,
|
||||
chatInstance,
|
||||
raw
|
||||
)
|
||||
}
|
||||
message != null && gameShortName != null -> when {
|
||||
message is ContentMessage<*> -> MessageGameShortNameCallbackQuery(id, from, chatInstance, message, gameShortName)
|
||||
message is InaccessibleMessage -> InaccessibleMessageGameShortNameCallbackQuery(id, from, chatInstance, message, gameShortName)
|
||||
else -> UnknownCallbackQueryType(
|
||||
id,
|
||||
from,
|
||||
chatInstance,
|
||||
raw
|
||||
)
|
||||
}
|
||||
inlineMessageId != null && data != null -> InlineMessageIdDataCallbackQuery(id, from, chatInstance, inlineMessageId, data)
|
||||
inlineMessageId != null && gameShortName != null -> InlineMessageIdGameShortNameCallbackQuery(id, from, chatInstance, inlineMessageId, gameShortName)
|
||||
else -> UnknownCallbackQueryType(
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package dev.inmo.tgbotapi.types.stories
|
||||
|
||||
import dev.inmo.tgbotapi.types.ExternalReplyInfo
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
class Story
|
||||
class Story : ExternalReplyInfo.ContentVariant
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package dev.inmo.tgbotapi.types.update
|
||||
|
||||
import dev.inmo.tgbotapi.types.UpdateIdentifier
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
import dev.inmo.tgbotapi.types.update.abstracts.BaseSentMessageUpdate
|
||||
|
||||
data class ChannelPostUpdate(
|
||||
override val updateId: UpdateIdentifier,
|
||||
override val data: Message
|
||||
override val data: AccessibleMessage
|
||||
) : BaseSentMessageUpdate {
|
||||
override fun copy(newData: Message): BaseSentMessageUpdate = copy(updateId, newData)
|
||||
override fun copy(newData: AccessibleMessage): BaseSentMessageUpdate = copy(updateId, newData)
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package dev.inmo.tgbotapi.types.update
|
||||
|
||||
import dev.inmo.tgbotapi.types.UpdateIdentifier
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
import dev.inmo.tgbotapi.types.update.abstracts.BaseSentMessageUpdate
|
||||
|
||||
data class MessageUpdate(
|
||||
override val updateId: UpdateIdentifier,
|
||||
override val data: Message
|
||||
override val data: AccessibleMessage
|
||||
) : BaseSentMessageUpdate {
|
||||
override fun copy(newData: Message) = copy(updateId, newData)
|
||||
override fun copy(newData: AccessibleMessage) = copy(updateId, newData)
|
||||
}
|
||||
|
||||
@@ -28,11 +28,11 @@ internal data class RawUpdate constructor(
|
||||
@Serializable(TelegramBotAPIMessageDeserializeOnlySerializer::class)
|
||||
private val edited_message: CommonMessage<*>? = null,
|
||||
@Serializable(TelegramBotAPIMessageDeserializeOnlySerializer::class)
|
||||
private val message: Message? = null,
|
||||
private val message: AccessibleMessage? = null,
|
||||
@Serializable(TelegramBotAPIMessageDeserializeOnlySerializer::class)
|
||||
private val edited_channel_post: CommonMessage<*>? = null,
|
||||
@Serializable(TelegramBotAPIMessageDeserializeOnlySerializer::class)
|
||||
private val channel_post: Message? = null,
|
||||
private val channel_post: AccessibleMessage? = null,
|
||||
private val inline_query: RawInlineQuery? = null,
|
||||
private val chosen_inline_result: RawChosenInlineResult? = null,
|
||||
private val callback_query: RawCallbackQuery? = null,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package dev.inmo.tgbotapi.types.update.abstracts
|
||||
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
|
||||
interface BaseMessageUpdate : Update {
|
||||
override val data: Message
|
||||
override val data: AccessibleMessage
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
package dev.inmo.tgbotapi.types.update.abstracts
|
||||
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
|
||||
interface BaseSentMessageUpdate : BaseMessageUpdate {
|
||||
fun copy(newData: Message): BaseSentMessageUpdate
|
||||
fun copy(newData: AccessibleMessage): BaseSentMessageUpdate
|
||||
}
|
||||
|
||||
@@ -23,4 +23,4 @@ data class Venue(
|
||||
override val googlePlaceId: GooglePlaceId? = null,
|
||||
@SerialName(googlePlaceTypeField)
|
||||
override val googlePlaceType: GooglePlaceType? = null
|
||||
) : CommonVenueData, Locationed by location
|
||||
) : CommonVenueData, Locationed by location, ExternalReplyInfo.ContentVariant
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package dev.inmo.tgbotapi.utils.extensions
|
||||
|
||||
import dev.inmo.tgbotapi.types.MediaGroupIdentifier
|
||||
import dev.inmo.tgbotapi.types.message.AnonymousForumContentMessageImpl
|
||||
import dev.inmo.tgbotapi.types.message.AnonymousGroupContentMessageImpl
|
||||
import dev.inmo.tgbotapi.types.message.ChannelContentMessageImpl
|
||||
@@ -15,7 +14,6 @@ import dev.inmo.tgbotapi.types.message.abstracts.AnonymousGroupContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.ChannelContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.CommonForumContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.CommonGroupContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.CommonMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.ConnectedFromChannelGroupContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.FromChannelForumContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.PossiblySentViaBotCommonMessage
|
||||
@@ -41,7 +39,7 @@ fun <T : MediaGroupPartContent> List<PossiblySentViaBotCommonMessage<T>>.asMedia
|
||||
sourceMessage.date,
|
||||
sourceMessage.editDate,
|
||||
sourceMessage.hasProtectedContent,
|
||||
sourceMessage.forwardInfo,
|
||||
sourceMessage.forwardOrigin,
|
||||
sourceMessage.replyTo,
|
||||
sourceMessage.replyMarkup,
|
||||
sourceMessage.senderBot,
|
||||
@@ -56,7 +54,7 @@ fun <T : MediaGroupPartContent> List<PossiblySentViaBotCommonMessage<T>>.asMedia
|
||||
sourceMessage.date,
|
||||
sourceMessage.editDate,
|
||||
sourceMessage.hasProtectedContent,
|
||||
sourceMessage.forwardInfo,
|
||||
sourceMessage.forwardOrigin,
|
||||
sourceMessage.replyTo,
|
||||
sourceMessage.replyMarkup,
|
||||
sourceMessage.senderBot,
|
||||
@@ -66,7 +64,7 @@ fun <T : MediaGroupPartContent> List<PossiblySentViaBotCommonMessage<T>>.asMedia
|
||||
sourceMessage.chat,
|
||||
sourceMessage.messageId,
|
||||
sourceMessage.date,
|
||||
sourceMessage.forwardInfo,
|
||||
sourceMessage.forwardOrigin,
|
||||
sourceMessage.editDate,
|
||||
sourceMessage.hasProtectedContent,
|
||||
sourceMessage.replyTo,
|
||||
@@ -81,7 +79,7 @@ fun <T : MediaGroupPartContent> List<PossiblySentViaBotCommonMessage<T>>.asMedia
|
||||
sourceMessage.messageId,
|
||||
sourceMessage.user,
|
||||
sourceMessage.date,
|
||||
sourceMessage.forwardInfo,
|
||||
sourceMessage.forwardOrigin,
|
||||
sourceMessage.editDate,
|
||||
sourceMessage.hasProtectedContent,
|
||||
sourceMessage.replyTo,
|
||||
@@ -95,7 +93,7 @@ fun <T : MediaGroupPartContent> List<PossiblySentViaBotCommonMessage<T>>.asMedia
|
||||
sourceMessage.channel,
|
||||
sourceMessage.messageId,
|
||||
sourceMessage.date,
|
||||
sourceMessage.forwardInfo,
|
||||
sourceMessage.forwardOrigin,
|
||||
sourceMessage.editDate,
|
||||
sourceMessage.hasProtectedContent,
|
||||
sourceMessage.replyTo,
|
||||
@@ -110,7 +108,7 @@ fun <T : MediaGroupPartContent> List<PossiblySentViaBotCommonMessage<T>>.asMedia
|
||||
sourceMessage.channel,
|
||||
sourceMessage.messageId,
|
||||
sourceMessage.date,
|
||||
sourceMessage.forwardInfo,
|
||||
sourceMessage.forwardOrigin,
|
||||
sourceMessage.editDate,
|
||||
sourceMessage.hasProtectedContent,
|
||||
sourceMessage.replyTo,
|
||||
@@ -125,7 +123,7 @@ fun <T : MediaGroupPartContent> List<PossiblySentViaBotCommonMessage<T>>.asMedia
|
||||
sourceMessage.messageId,
|
||||
sourceMessage.threadId,
|
||||
sourceMessage.date,
|
||||
sourceMessage.forwardInfo,
|
||||
sourceMessage.forwardOrigin,
|
||||
sourceMessage.editDate,
|
||||
sourceMessage.hasProtectedContent,
|
||||
sourceMessage.replyTo,
|
||||
@@ -141,7 +139,7 @@ fun <T : MediaGroupPartContent> List<PossiblySentViaBotCommonMessage<T>>.asMedia
|
||||
sourceMessage.threadId,
|
||||
sourceMessage.user,
|
||||
sourceMessage.date,
|
||||
sourceMessage.forwardInfo,
|
||||
sourceMessage.forwardOrigin,
|
||||
sourceMessage.editDate,
|
||||
sourceMessage.hasProtectedContent,
|
||||
sourceMessage.replyTo,
|
||||
@@ -156,7 +154,7 @@ fun <T : MediaGroupPartContent> List<PossiblySentViaBotCommonMessage<T>>.asMedia
|
||||
sourceMessage.messageId,
|
||||
sourceMessage.threadId,
|
||||
sourceMessage.date,
|
||||
sourceMessage.forwardInfo,
|
||||
sourceMessage.forwardOrigin,
|
||||
sourceMessage.editDate,
|
||||
sourceMessage.hasProtectedContent,
|
||||
sourceMessage.replyTo,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package dev.inmo.tgbotapi.utils.extensions
|
||||
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.PossiblyTopicMessage
|
||||
|
||||
val Message.threadIdOrNull
|
||||
val AccessibleMessage.threadIdOrNull
|
||||
get() = (this as? PossiblyTopicMessage) ?.threadId
|
||||
|
||||
@@ -978,346 +978,346 @@ inline fun SecureValue.requireSecureValueWithTranslations(): SecureValueWithTran
|
||||
this as SecureValueWithTranslations
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenAnonymousGroupContentMessageImpl(block: (AnonymousGroupContentMessageImpl<MessageContent>) -> T) =
|
||||
inline fun <T> AccessibleMessage.whenAnonymousGroupContentMessageImpl(block: (AnonymousGroupContentMessageImpl<MessageContent>) -> T) =
|
||||
asAnonymousGroupContentMessageImpl()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asAnonymousGroupContentMessageImpl(): AnonymousGroupContentMessageImpl<MessageContent>? =
|
||||
inline fun AccessibleMessage.asAnonymousGroupContentMessageImpl(): AnonymousGroupContentMessageImpl<MessageContent>? =
|
||||
this as? AnonymousGroupContentMessageImpl<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requireAnonymousGroupContentMessageImpl(): AnonymousGroupContentMessageImpl<MessageContent> =
|
||||
inline fun AccessibleMessage.requireAnonymousGroupContentMessageImpl(): AnonymousGroupContentMessageImpl<MessageContent> =
|
||||
this as AnonymousGroupContentMessageImpl<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenChannelContentMessageImpl(block: (UnconnectedFromChannelGroupContentMessageImpl<MessageContent>) -> T) =
|
||||
inline fun <T> AccessibleMessage.whenChannelContentMessageImpl(block: (UnconnectedFromChannelGroupContentMessageImpl<MessageContent>) -> T) =
|
||||
asChannelContentMessageImpl()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asChannelContentMessageImpl(): UnconnectedFromChannelGroupContentMessageImpl<MessageContent>? =
|
||||
inline fun AccessibleMessage.asChannelContentMessageImpl(): UnconnectedFromChannelGroupContentMessageImpl<MessageContent>? =
|
||||
this as? UnconnectedFromChannelGroupContentMessageImpl<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requireChannelContentMessageImpl(): UnconnectedFromChannelGroupContentMessageImpl<MessageContent> =
|
||||
inline fun AccessibleMessage.requireChannelContentMessageImpl(): UnconnectedFromChannelGroupContentMessageImpl<MessageContent> =
|
||||
this as UnconnectedFromChannelGroupContentMessageImpl<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenPassportMessage(block: (PassportMessage) -> T) = asPassportMessage()?.let(block)
|
||||
inline fun <T> AccessibleMessage.whenPassportMessage(block: (PassportMessage) -> T) = asPassportMessage()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asPassportMessage(): PassportMessage? = this as? PassportMessage
|
||||
inline fun AccessibleMessage.asPassportMessage(): PassportMessage? = this as? PassportMessage
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requirePassportMessage(): PassportMessage = this as PassportMessage
|
||||
inline fun AccessibleMessage.requirePassportMessage(): PassportMessage = this as PassportMessage
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenPrivateContentMessageImpl(block: (PrivateContentMessageImpl<MessageContent>) -> T) =
|
||||
inline fun <T> AccessibleMessage.whenPrivateContentMessageImpl(block: (PrivateContentMessageImpl<MessageContent>) -> T) =
|
||||
asPrivateContentMessageImpl()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asPrivateContentMessageImpl(): PrivateContentMessageImpl<MessageContent>? =
|
||||
inline fun AccessibleMessage.asPrivateContentMessageImpl(): PrivateContentMessageImpl<MessageContent>? =
|
||||
this as? PrivateContentMessageImpl<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requirePrivateContentMessageImpl(): PrivateContentMessageImpl<MessageContent> =
|
||||
inline fun AccessibleMessage.requirePrivateContentMessageImpl(): PrivateContentMessageImpl<MessageContent> =
|
||||
this as PrivateContentMessageImpl<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenChannelEventMessage(block: (ChannelEventMessage<ChannelEvent>) -> T) =
|
||||
inline fun <T> AccessibleMessage.whenChannelEventMessage(block: (ChannelEventMessage<ChannelEvent>) -> T) =
|
||||
asChannelEventMessage()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asChannelEventMessage(): ChannelEventMessage<ChannelEvent>? =
|
||||
inline fun AccessibleMessage.asChannelEventMessage(): ChannelEventMessage<ChannelEvent>? =
|
||||
this as? ChannelEventMessage<ChannelEvent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requireChannelEventMessage(): ChannelEventMessage<ChannelEvent> =
|
||||
inline fun AccessibleMessage.requireChannelEventMessage(): ChannelEventMessage<ChannelEvent> =
|
||||
this as ChannelEventMessage<ChannelEvent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenCommonGroupEventMessage(block: (CommonGroupEventMessage<GroupEvent>) -> T) =
|
||||
inline fun <T> AccessibleMessage.whenCommonGroupEventMessage(block: (CommonGroupEventMessage<GroupEvent>) -> T) =
|
||||
asCommonGroupEventMessage()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asCommonGroupEventMessage(): CommonGroupEventMessage<GroupEvent>? =
|
||||
inline fun AccessibleMessage.asCommonGroupEventMessage(): CommonGroupEventMessage<GroupEvent>? =
|
||||
this as? CommonGroupEventMessage<GroupEvent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requireCommonGroupEventMessage(): CommonGroupEventMessage<GroupEvent> =
|
||||
inline fun AccessibleMessage.requireCommonGroupEventMessage(): CommonGroupEventMessage<GroupEvent> =
|
||||
this as CommonGroupEventMessage<GroupEvent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenCommonSupergroupEventMessage(block: (CommonSupergroupEventMessage<SupergroupEvent>) -> T) =
|
||||
inline fun <T> AccessibleMessage.whenCommonSupergroupEventMessage(block: (CommonSupergroupEventMessage<SupergroupEvent>) -> T) =
|
||||
asCommonSupergroupEventMessage()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asCommonSupergroupEventMessage(): CommonSupergroupEventMessage<SupergroupEvent>? =
|
||||
inline fun AccessibleMessage.asCommonSupergroupEventMessage(): CommonSupergroupEventMessage<SupergroupEvent>? =
|
||||
this as? CommonSupergroupEventMessage<SupergroupEvent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requireCommonSupergroupEventMessage(): CommonSupergroupEventMessage<SupergroupEvent> =
|
||||
inline fun AccessibleMessage.requireCommonSupergroupEventMessage(): CommonSupergroupEventMessage<SupergroupEvent> =
|
||||
this as CommonSupergroupEventMessage<SupergroupEvent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenAnonymousGroupContentMessage(block: (AnonymousGroupContentMessage<MessageContent>) -> T) =
|
||||
inline fun <T> AccessibleMessage.whenAnonymousGroupContentMessage(block: (AnonymousGroupContentMessage<MessageContent>) -> T) =
|
||||
asAnonymousGroupContentMessage()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asAnonymousGroupContentMessage(): AnonymousGroupContentMessage<MessageContent>? =
|
||||
inline fun AccessibleMessage.asAnonymousGroupContentMessage(): AnonymousGroupContentMessage<MessageContent>? =
|
||||
this as? AnonymousGroupContentMessage<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requireAnonymousGroupContentMessage(): AnonymousGroupContentMessage<MessageContent> =
|
||||
inline fun AccessibleMessage.requireAnonymousGroupContentMessage(): AnonymousGroupContentMessage<MessageContent> =
|
||||
this as AnonymousGroupContentMessage<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenChannelContentMessage(block: (ChannelContentMessage<MessageContent>) -> T) =
|
||||
inline fun <T> AccessibleMessage.whenChannelContentMessage(block: (ChannelContentMessage<MessageContent>) -> T) =
|
||||
asChannelContentMessage()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asChannelContentMessage(): ChannelContentMessage<MessageContent>? =
|
||||
inline fun AccessibleMessage.asChannelContentMessage(): ChannelContentMessage<MessageContent>? =
|
||||
this as? ChannelContentMessage<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requireChannelContentMessage(): ChannelContentMessage<MessageContent> =
|
||||
inline fun AccessibleMessage.requireChannelContentMessage(): ChannelContentMessage<MessageContent> =
|
||||
this as ChannelContentMessage<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenConnectedFromChannelGroupContentMessage(block: (ConnectedFromChannelGroupContentMessage<MessageContent>) -> T) =
|
||||
inline fun <T> AccessibleMessage.whenConnectedFromChannelGroupContentMessage(block: (ConnectedFromChannelGroupContentMessage<MessageContent>) -> T) =
|
||||
asConnectedFromChannelGroupContentMessage()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asConnectedFromChannelGroupContentMessage(): ConnectedFromChannelGroupContentMessage<MessageContent>? =
|
||||
inline fun AccessibleMessage.asConnectedFromChannelGroupContentMessage(): ConnectedFromChannelGroupContentMessage<MessageContent>? =
|
||||
this as? ConnectedFromChannelGroupContentMessage<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requireConnectedFromChannelGroupContentMessage(): ConnectedFromChannelGroupContentMessage<MessageContent> =
|
||||
inline fun AccessibleMessage.requireConnectedFromChannelGroupContentMessage(): ConnectedFromChannelGroupContentMessage<MessageContent> =
|
||||
this as ConnectedFromChannelGroupContentMessage<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenUnconnectedFromChannelGroupContentMessage(block: (UnconnectedFromChannelGroupContentMessage<MessageContent>) -> T) =
|
||||
inline fun <T> AccessibleMessage.whenUnconnectedFromChannelGroupContentMessage(block: (UnconnectedFromChannelGroupContentMessage<MessageContent>) -> T) =
|
||||
asUnconnectedFromChannelGroupContentMessage()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asUnconnectedFromChannelGroupContentMessage(): UnconnectedFromChannelGroupContentMessage<MessageContent>? =
|
||||
inline fun AccessibleMessage.asUnconnectedFromChannelGroupContentMessage(): UnconnectedFromChannelGroupContentMessage<MessageContent>? =
|
||||
this as? UnconnectedFromChannelGroupContentMessage<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requireUnconnectedFromChannelGroupContentMessage(): UnconnectedFromChannelGroupContentMessage<MessageContent> =
|
||||
inline fun AccessibleMessage.requireUnconnectedFromChannelGroupContentMessage(): UnconnectedFromChannelGroupContentMessage<MessageContent> =
|
||||
this as UnconnectedFromChannelGroupContentMessage<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenChatEventMessage(block: (ChatEventMessage<ChatEvent>) -> T) =
|
||||
inline fun <T> AccessibleMessage.whenChatEventMessage(block: (ChatEventMessage<ChatEvent>) -> T) =
|
||||
asChatEventMessage()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asChatEventMessage(): ChatEventMessage<ChatEvent>? = this as? ChatEventMessage<ChatEvent>
|
||||
inline fun AccessibleMessage.asChatEventMessage(): ChatEventMessage<ChatEvent>? = this as? ChatEventMessage<ChatEvent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requireChatEventMessage(): ChatEventMessage<ChatEvent> = this as ChatEventMessage<ChatEvent>
|
||||
inline fun AccessibleMessage.requireChatEventMessage(): ChatEventMessage<ChatEvent> = this as ChatEventMessage<ChatEvent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenCommonGroupContentMessage(block: (CommonGroupContentMessage<MessageContent>) -> T) =
|
||||
inline fun <T> AccessibleMessage.whenCommonGroupContentMessage(block: (CommonGroupContentMessage<MessageContent>) -> T) =
|
||||
asCommonGroupContentMessage()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asCommonGroupContentMessage(): CommonGroupContentMessage<MessageContent>? =
|
||||
inline fun AccessibleMessage.asCommonGroupContentMessage(): CommonGroupContentMessage<MessageContent>? =
|
||||
this as? CommonGroupContentMessage<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requireCommonGroupContentMessage(): CommonGroupContentMessage<MessageContent> =
|
||||
inline fun AccessibleMessage.requireCommonGroupContentMessage(): CommonGroupContentMessage<MessageContent> =
|
||||
this as CommonGroupContentMessage<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenCommonMessage(block: (CommonMessage<MessageContent>) -> T) = asCommonMessage()?.let(block)
|
||||
inline fun <T> AccessibleMessage.whenCommonMessage(block: (CommonMessage<MessageContent>) -> T) = asCommonMessage()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asCommonMessage(): CommonMessage<MessageContent>? = this as? CommonMessage<MessageContent>
|
||||
inline fun AccessibleMessage.asCommonMessage(): CommonMessage<MessageContent>? = this as? CommonMessage<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requireCommonMessage(): CommonMessage<MessageContent> = this as CommonMessage<MessageContent>
|
||||
inline fun AccessibleMessage.requireCommonMessage(): CommonMessage<MessageContent> = this as CommonMessage<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenContentMessage(block: (ContentMessage<MessageContent>) -> T) = asContentMessage()?.let(block)
|
||||
inline fun <T> AccessibleMessage.whenContentMessage(block: (ContentMessage<MessageContent>) -> T) = asContentMessage()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asContentMessage(): ContentMessage<MessageContent>? = this as? ContentMessage<MessageContent>
|
||||
inline fun AccessibleMessage.asContentMessage(): ContentMessage<MessageContent>? = this as? ContentMessage<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requireContentMessage(): ContentMessage<MessageContent> = this as ContentMessage<MessageContent>
|
||||
inline fun AccessibleMessage.requireContentMessage(): ContentMessage<MessageContent> = this as ContentMessage<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenFromChannelGroupContentMessage(block: (FromChannelGroupContentMessage<MessageContent>) -> T) =
|
||||
inline fun <T> AccessibleMessage.whenFromChannelGroupContentMessage(block: (FromChannelGroupContentMessage<MessageContent>) -> T) =
|
||||
asFromChannelGroupContentMessage()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asFromChannelGroupContentMessage(): FromChannelGroupContentMessage<MessageContent>? =
|
||||
inline fun AccessibleMessage.asFromChannelGroupContentMessage(): FromChannelGroupContentMessage<MessageContent>? =
|
||||
this as? FromChannelGroupContentMessage<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requireFromChannelGroupContentMessage(): FromChannelGroupContentMessage<MessageContent> =
|
||||
inline fun AccessibleMessage.requireFromChannelGroupContentMessage(): FromChannelGroupContentMessage<MessageContent> =
|
||||
this as FromChannelGroupContentMessage<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenGroupEventMessage(block: (GroupEventMessage<GroupEvent>) -> T) =
|
||||
inline fun <T> AccessibleMessage.whenGroupEventMessage(block: (GroupEventMessage<GroupEvent>) -> T) =
|
||||
asGroupEventMessage()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asGroupEventMessage(): GroupEventMessage<GroupEvent>? = this as? GroupEventMessage<GroupEvent>
|
||||
inline fun AccessibleMessage.asGroupEventMessage(): GroupEventMessage<GroupEvent>? = this as? GroupEventMessage<GroupEvent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requireGroupEventMessage(): GroupEventMessage<GroupEvent> = this as GroupEventMessage<GroupEvent>
|
||||
inline fun AccessibleMessage.requireGroupEventMessage(): GroupEventMessage<GroupEvent> = this as GroupEventMessage<GroupEvent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenPrivateEventMessage(block: (PrivateEventMessage<PrivateEvent>) -> T) =
|
||||
inline fun <T> AccessibleMessage.whenPrivateEventMessage(block: (PrivateEventMessage<PrivateEvent>) -> T) =
|
||||
asPrivateEventMessage()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asPrivateEventMessage(): PrivateEventMessage<PrivateEvent>? =
|
||||
inline fun AccessibleMessage.asPrivateEventMessage(): PrivateEventMessage<PrivateEvent>? =
|
||||
this as? PrivateEventMessage<PrivateEvent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requirePrivateEventMessage(): PrivateEventMessage<PrivateEvent> =
|
||||
inline fun AccessibleMessage.requirePrivateEventMessage(): PrivateEventMessage<PrivateEvent> =
|
||||
this as PrivateEventMessage<PrivateEvent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenGroupContentMessage(block: (GroupContentMessage<MessageContent>) -> T) =
|
||||
inline fun <T> AccessibleMessage.whenGroupContentMessage(block: (GroupContentMessage<MessageContent>) -> T) =
|
||||
asGroupContentMessage()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asGroupContentMessage(): GroupContentMessage<MessageContent>? =
|
||||
inline fun AccessibleMessage.asGroupContentMessage(): GroupContentMessage<MessageContent>? =
|
||||
this as? GroupContentMessage<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requireGroupContentMessage(): GroupContentMessage<MessageContent> =
|
||||
inline fun AccessibleMessage.requireGroupContentMessage(): GroupContentMessage<MessageContent> =
|
||||
this as GroupContentMessage<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenMediaGroupMessage(block: (MediaGroupMessage<MediaGroupPartContent>) -> T) =
|
||||
inline fun <T> AccessibleMessage.whenMediaGroupMessage(block: (MediaGroupMessage<MediaGroupPartContent>) -> T) =
|
||||
asMediaGroupMessage()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asMediaGroupMessage(): MediaGroupMessage<MediaGroupPartContent>? =
|
||||
inline fun AccessibleMessage.asMediaGroupMessage(): MediaGroupMessage<MediaGroupPartContent>? =
|
||||
this as? MediaGroupMessage<MediaGroupPartContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requireMediaGroupMessage(): MediaGroupMessage<MediaGroupPartContent> =
|
||||
inline fun AccessibleMessage.requireMediaGroupMessage(): MediaGroupMessage<MediaGroupPartContent> =
|
||||
this as MediaGroupMessage<MediaGroupPartContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenPossiblyEditedMessage(block: (PossiblyEditedMessage) -> T) =
|
||||
inline fun <T> AccessibleMessage.whenPossiblyEditedMessage(block: (PossiblyEditedMessage) -> T) =
|
||||
asPossiblyEditedMessage()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asPossiblyEditedMessage(): PossiblyEditedMessage? = this as? PossiblyEditedMessage
|
||||
inline fun AccessibleMessage.asPossiblyEditedMessage(): PossiblyEditedMessage? = this as? PossiblyEditedMessage
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requirePossiblyEditedMessage(): PossiblyEditedMessage = this as PossiblyEditedMessage
|
||||
inline fun AccessibleMessage.requirePossiblyEditedMessage(): PossiblyEditedMessage = this as PossiblyEditedMessage
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenPossiblyReplyMessage(block: (PossiblyReplyMessage) -> T) =
|
||||
inline fun <T> AccessibleMessage.whenPossiblyReplyMessage(block: (PossiblyReplyMessage) -> T) =
|
||||
asPossiblyReplyMessage()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asPossiblyReplyMessage(): PossiblyReplyMessage? = this as? PossiblyReplyMessage
|
||||
inline fun AccessibleMessage.asPossiblyReplyMessage(): PossiblyReplyMessage? = this as? PossiblyReplyMessage
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requirePossiblyReplyMessage(): PossiblyReplyMessage = this as PossiblyReplyMessage
|
||||
inline fun AccessibleMessage.requirePossiblyReplyMessage(): PossiblyReplyMessage = this as PossiblyReplyMessage
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenPossiblyForwardedMessage(block: (PossiblyForwardedMessage) -> T) =
|
||||
inline fun <T> AccessibleMessage.whenPossiblyForwardedMessage(block: (PossiblyForwardedMessage) -> T) =
|
||||
asPossiblyForwardedMessage()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asPossiblyForwardedMessage(): PossiblyForwardedMessage? = this as? PossiblyForwardedMessage
|
||||
inline fun AccessibleMessage.asPossiblyForwardedMessage(): PossiblyForwardedMessage? = this as? PossiblyForwardedMessage
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requirePossiblyForwardedMessage(): PossiblyForwardedMessage = this as PossiblyForwardedMessage
|
||||
inline fun AccessibleMessage.requirePossiblyForwardedMessage(): PossiblyForwardedMessage = this as PossiblyForwardedMessage
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenPossiblyPaymentMessage(block: (PossiblyPaymentMessage) -> T) =
|
||||
inline fun <T> AccessibleMessage.whenPossiblyPaymentMessage(block: (PossiblyPaymentMessage) -> T) =
|
||||
asPossiblyPaymentMessage()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asPossiblyPaymentMessage(): PossiblyPaymentMessage? = this as? PossiblyPaymentMessage
|
||||
inline fun AccessibleMessage.asPossiblyPaymentMessage(): PossiblyPaymentMessage? = this as? PossiblyPaymentMessage
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requirePossiblyPaymentMessage(): PossiblyPaymentMessage = this as PossiblyPaymentMessage
|
||||
inline fun AccessibleMessage.requirePossiblyPaymentMessage(): PossiblyPaymentMessage = this as PossiblyPaymentMessage
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenPrivateContentMessage(block: (PrivateContentMessage<MessageContent>) -> T) =
|
||||
inline fun <T> AccessibleMessage.whenPrivateContentMessage(block: (PrivateContentMessage<MessageContent>) -> T) =
|
||||
asPrivateContentMessage()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asPrivateContentMessage(): PrivateContentMessage<MessageContent>? =
|
||||
inline fun AccessibleMessage.asPrivateContentMessage(): PrivateContentMessage<MessageContent>? =
|
||||
this as? PrivateContentMessage<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requirePrivateContentMessage(): PrivateContentMessage<MessageContent> =
|
||||
inline fun AccessibleMessage.requirePrivateContentMessage(): PrivateContentMessage<MessageContent> =
|
||||
this as PrivateContentMessage<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenPublicContentMessage(block: (PublicContentMessage<MessageContent>) -> T) =
|
||||
inline fun <T> AccessibleMessage.whenPublicContentMessage(block: (PublicContentMessage<MessageContent>) -> T) =
|
||||
asPublicContentMessage()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asPublicContentMessage(): PublicContentMessage<MessageContent>? =
|
||||
inline fun AccessibleMessage.asPublicContentMessage(): PublicContentMessage<MessageContent>? =
|
||||
this as? PublicContentMessage<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requirePublicContentMessage(): PublicContentMessage<MessageContent> =
|
||||
inline fun AccessibleMessage.requirePublicContentMessage(): PublicContentMessage<MessageContent> =
|
||||
this as PublicContentMessage<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenSignedMessage(block: (SignedMessage) -> T) = asSignedMessage()?.let(block)
|
||||
inline fun <T> AccessibleMessage.whenSignedMessage(block: (SignedMessage) -> T) = asSignedMessage()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asSignedMessage(): SignedMessage? = this as? SignedMessage
|
||||
inline fun AccessibleMessage.asSignedMessage(): SignedMessage? = this as? SignedMessage
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requireSignedMessage(): SignedMessage = this as SignedMessage
|
||||
inline fun AccessibleMessage.requireSignedMessage(): SignedMessage = this as SignedMessage
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenSupergroupEventMessage(block: (SupergroupEventMessage<SupergroupEvent>) -> T) =
|
||||
inline fun <T> AccessibleMessage.whenSupergroupEventMessage(block: (SupergroupEventMessage<SupergroupEvent>) -> T) =
|
||||
asSupergroupEventMessage()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asSupergroupEventMessage(): SupergroupEventMessage<SupergroupEvent>? =
|
||||
inline fun AccessibleMessage.asSupergroupEventMessage(): SupergroupEventMessage<SupergroupEvent>? =
|
||||
this as? SupergroupEventMessage<SupergroupEvent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requireSupergroupEventMessage(): SupergroupEventMessage<SupergroupEvent> =
|
||||
inline fun AccessibleMessage.requireSupergroupEventMessage(): SupergroupEventMessage<SupergroupEvent> =
|
||||
this as SupergroupEventMessage<SupergroupEvent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenUnknownMessageType(block: (UnknownMessageType) -> T) = asUnknownMessageType()?.let(block)
|
||||
inline fun <T> AccessibleMessage.whenUnknownMessageType(block: (UnknownMessageType) -> T) = asUnknownMessageType()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asUnknownMessageType(): UnknownMessageType? = this as? UnknownMessageType
|
||||
inline fun AccessibleMessage.asUnknownMessageType(): UnknownMessageType? = this as? UnknownMessageType
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requireUnknownMessageType(): UnknownMessageType = this as UnknownMessageType
|
||||
inline fun AccessibleMessage.requireUnknownMessageType(): UnknownMessageType = this as UnknownMessageType
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenPossiblySentViaBotCommonMessage(block: (PossiblySentViaBotCommonMessage<MessageContent>) -> T) =
|
||||
inline fun <T> AccessibleMessage.whenPossiblySentViaBotCommonMessage(block: (PossiblySentViaBotCommonMessage<MessageContent>) -> T) =
|
||||
asPossiblySentViaBotCommonMessage()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asPossiblySentViaBotCommonMessage(): PossiblySentViaBotCommonMessage<MessageContent>? =
|
||||
inline fun AccessibleMessage.asPossiblySentViaBotCommonMessage(): PossiblySentViaBotCommonMessage<MessageContent>? =
|
||||
this as? PossiblySentViaBotCommonMessage<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requirePossiblySentViaBotCommonMessage(): PossiblySentViaBotCommonMessage<MessageContent> =
|
||||
inline fun AccessibleMessage.requirePossiblySentViaBotCommonMessage(): PossiblySentViaBotCommonMessage<MessageContent> =
|
||||
this as PossiblySentViaBotCommonMessage<MessageContent>
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> Message.whenFromUserMessage(block: (FromUserMessage) -> T) = asFromUserMessage()?.let(block)
|
||||
inline fun <T> AccessibleMessage.whenFromUserMessage(block: (FromUserMessage) -> T) = asFromUserMessage()?.let(block)
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.asFromUserMessage(): FromUserMessage? = this as? FromUserMessage
|
||||
inline fun AccessibleMessage.asFromUserMessage(): FromUserMessage? = this as? FromUserMessage
|
||||
|
||||
@PreviewFeature
|
||||
inline fun Message.requireFromUserMessage(): FromUserMessage = this as FromUserMessage
|
||||
inline fun AccessibleMessage.requireFromUserMessage(): FromUserMessage = this as FromUserMessage
|
||||
|
||||
@PreviewFeature
|
||||
inline fun <T> BotAction.whenFindLocationAction(block: (FindLocationAction) -> T) = asFindLocationAction()?.let(block)
|
||||
|
||||
@@ -197,11 +197,8 @@ import dev.inmo.tgbotapi.types.files.VideoFile
|
||||
import dev.inmo.tgbotapi.types.files.VideoNoteFile
|
||||
import dev.inmo.tgbotapi.types.files.VideoSticker
|
||||
import dev.inmo.tgbotapi.types.files.VoiceFile
|
||||
import dev.inmo.tgbotapi.types.giveaway.Giveaway
|
||||
import dev.inmo.tgbotapi.types.giveaway.GiveawayCreated
|
||||
import dev.inmo.tgbotapi.types.giveaway.GiveawayPrivateResults
|
||||
import dev.inmo.tgbotapi.types.giveaway.GiveawayPublicResults
|
||||
import dev.inmo.tgbotapi.types.giveaway.GiveawayResults
|
||||
import dev.inmo.tgbotapi.types.location.LiveLocation
|
||||
import dev.inmo.tgbotapi.types.location.Location
|
||||
import dev.inmo.tgbotapi.types.location.StaticLocation
|
||||
@@ -260,6 +257,7 @@ import dev.inmo.tgbotapi.types.message.CommonSupergroupEventMessage
|
||||
import dev.inmo.tgbotapi.types.message.ForwardInfo
|
||||
import dev.inmo.tgbotapi.types.message.PassportMessage
|
||||
import dev.inmo.tgbotapi.types.message.PrivateEventMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AnonymousForumContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AnonymousGroupContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.ChannelContentMessage
|
||||
@@ -275,6 +273,7 @@ import dev.inmo.tgbotapi.types.message.abstracts.FromChannelGroupContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.FromUserMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.GroupContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.GroupEventMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.InaccessibleMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.PossiblyEditedMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.PossiblyForwardedMessage
|
||||
@@ -296,6 +295,7 @@ import dev.inmo.tgbotapi.types.message.content.DiceContent
|
||||
import dev.inmo.tgbotapi.types.message.content.DocumentContent
|
||||
import dev.inmo.tgbotapi.types.message.content.DocumentMediaGroupPartContent
|
||||
import dev.inmo.tgbotapi.types.message.content.GameContent
|
||||
import dev.inmo.tgbotapi.types.message.content.GiveawayPublicResultsContent
|
||||
import dev.inmo.tgbotapi.types.message.content.InvoiceContent
|
||||
import dev.inmo.tgbotapi.types.message.content.LiveLocationContent
|
||||
import dev.inmo.tgbotapi.types.message.content.LocationContent
|
||||
@@ -308,6 +308,7 @@ import dev.inmo.tgbotapi.types.message.content.MessageContent
|
||||
import dev.inmo.tgbotapi.types.message.content.PhotoContent
|
||||
import dev.inmo.tgbotapi.types.message.content.PollContent
|
||||
import dev.inmo.tgbotapi.types.message.content.ResendableContent
|
||||
import dev.inmo.tgbotapi.types.message.content.ScheduledGiveawayContent
|
||||
import dev.inmo.tgbotapi.types.message.content.SpoilerableMediaContent
|
||||
import dev.inmo.tgbotapi.types.message.content.StaticLocationContent
|
||||
import dev.inmo.tgbotapi.types.message.content.StickerContent
|
||||
@@ -414,9 +415,13 @@ import dev.inmo.tgbotapi.types.polls.QuizPoll
|
||||
import dev.inmo.tgbotapi.types.polls.RegularPoll
|
||||
import dev.inmo.tgbotapi.types.polls.ScheduledCloseInfo
|
||||
import dev.inmo.tgbotapi.types.polls.UnknownPollType
|
||||
import dev.inmo.tgbotapi.types.queries.callback.AbstractMessageCallbackQuery
|
||||
import dev.inmo.tgbotapi.types.queries.callback.CallbackQuery
|
||||
import dev.inmo.tgbotapi.types.queries.callback.DataCallbackQuery
|
||||
import dev.inmo.tgbotapi.types.queries.callback.GameShortNameCallbackQuery
|
||||
import dev.inmo.tgbotapi.types.queries.callback.InaccessibleMessageCallbackQuery
|
||||
import dev.inmo.tgbotapi.types.queries.callback.InaccessibleMessageDataCallbackQuery
|
||||
import dev.inmo.tgbotapi.types.queries.callback.InaccessibleMessageGameShortNameCallbackQuery
|
||||
import dev.inmo.tgbotapi.types.queries.callback.InlineMessageIdCallbackQuery
|
||||
import dev.inmo.tgbotapi.types.queries.callback.InlineMessageIdDataCallbackQuery
|
||||
import dev.inmo.tgbotapi.types.queries.callback.InlineMessageIdGameShortNameCallbackQuery
|
||||
@@ -841,6 +846,16 @@ public inline fun WithUser.pollAnswerOrThrow(): PollAnswer = this as
|
||||
public inline fun <T> WithUser.ifPollAnswer(block: (PollAnswer) -> T): T? = pollAnswerOrNull()
|
||||
?.let(block)
|
||||
|
||||
public inline fun WithUser.abstractMessageCallbackQueryOrNull(): AbstractMessageCallbackQuery? =
|
||||
this as? dev.inmo.tgbotapi.types.queries.callback.AbstractMessageCallbackQuery
|
||||
|
||||
public inline fun WithUser.abstractMessageCallbackQueryOrThrow(): AbstractMessageCallbackQuery =
|
||||
this as dev.inmo.tgbotapi.types.queries.callback.AbstractMessageCallbackQuery
|
||||
|
||||
public inline fun <T>
|
||||
WithUser.ifAbstractMessageCallbackQuery(block: (AbstractMessageCallbackQuery) -> T): T? =
|
||||
abstractMessageCallbackQueryOrNull() ?.let(block)
|
||||
|
||||
public inline fun WithUser.callbackQueryOrNull(): CallbackQuery? = this as?
|
||||
dev.inmo.tgbotapi.types.queries.callback.CallbackQuery
|
||||
|
||||
@@ -878,6 +893,42 @@ public inline fun <T>
|
||||
WithUser.ifGameShortNameCallbackQuery(block: (GameShortNameCallbackQuery) -> T): T? =
|
||||
gameShortNameCallbackQueryOrNull() ?.let(block)
|
||||
|
||||
public inline fun WithUser.inaccessibleMessageCallbackQueryOrNull():
|
||||
InaccessibleMessageCallbackQuery? = this as?
|
||||
dev.inmo.tgbotapi.types.queries.callback.InaccessibleMessageCallbackQuery
|
||||
|
||||
public inline fun WithUser.inaccessibleMessageCallbackQueryOrThrow():
|
||||
InaccessibleMessageCallbackQuery = this as
|
||||
dev.inmo.tgbotapi.types.queries.callback.InaccessibleMessageCallbackQuery
|
||||
|
||||
public inline fun <T>
|
||||
WithUser.ifInaccessibleMessageCallbackQuery(block: (InaccessibleMessageCallbackQuery) -> T): T?
|
||||
= inaccessibleMessageCallbackQueryOrNull() ?.let(block)
|
||||
|
||||
public inline fun WithUser.inaccessibleMessageDataCallbackQueryOrNull():
|
||||
InaccessibleMessageDataCallbackQuery? = this as?
|
||||
dev.inmo.tgbotapi.types.queries.callback.InaccessibleMessageDataCallbackQuery
|
||||
|
||||
public inline fun WithUser.inaccessibleMessageDataCallbackQueryOrThrow():
|
||||
InaccessibleMessageDataCallbackQuery = this as
|
||||
dev.inmo.tgbotapi.types.queries.callback.InaccessibleMessageDataCallbackQuery
|
||||
|
||||
public inline fun <T>
|
||||
WithUser.ifInaccessibleMessageDataCallbackQuery(block: (InaccessibleMessageDataCallbackQuery) -> T):
|
||||
T? = inaccessibleMessageDataCallbackQueryOrNull() ?.let(block)
|
||||
|
||||
public inline fun WithUser.inaccessibleMessageGameShortNameCallbackQueryOrNull():
|
||||
InaccessibleMessageGameShortNameCallbackQuery? = this as?
|
||||
dev.inmo.tgbotapi.types.queries.callback.InaccessibleMessageGameShortNameCallbackQuery
|
||||
|
||||
public inline fun WithUser.inaccessibleMessageGameShortNameCallbackQueryOrThrow():
|
||||
InaccessibleMessageGameShortNameCallbackQuery = this as
|
||||
dev.inmo.tgbotapi.types.queries.callback.InaccessibleMessageGameShortNameCallbackQuery
|
||||
|
||||
public inline fun <T>
|
||||
WithUser.ifInaccessibleMessageGameShortNameCallbackQuery(block: (InaccessibleMessageGameShortNameCallbackQuery) -> T):
|
||||
T? = inaccessibleMessageGameShortNameCallbackQueryOrNull() ?.let(block)
|
||||
|
||||
public inline fun WithUser.inlineMessageIdCallbackQueryOrNull(): InlineMessageIdCallbackQuery? =
|
||||
this as? dev.inmo.tgbotapi.types.queries.callback.InlineMessageIdCallbackQuery
|
||||
|
||||
@@ -2729,15 +2780,6 @@ public inline fun TelegramMedia.titledTelegramMediaOrThrow(): TitledTelegramMedi
|
||||
public inline fun <T> TelegramMedia.ifTitledTelegramMedia(block: (TitledTelegramMedia) -> T): T? =
|
||||
titledTelegramMediaOrNull() ?.let(block)
|
||||
|
||||
public inline fun ChatEvent.giveawayOrNull(): Giveaway? = this as?
|
||||
dev.inmo.tgbotapi.types.giveaway.Giveaway
|
||||
|
||||
public inline fun ChatEvent.giveawayOrThrow(): Giveaway = this as
|
||||
dev.inmo.tgbotapi.types.giveaway.Giveaway
|
||||
|
||||
public inline fun <T> ChatEvent.ifGiveaway(block: (Giveaway) -> T): T? = giveawayOrNull()
|
||||
?.let(block)
|
||||
|
||||
public inline fun ChatEvent.giveawayCreatedOrNull(): GiveawayCreated? = this as?
|
||||
dev.inmo.tgbotapi.types.giveaway.GiveawayCreated
|
||||
|
||||
@@ -2756,24 +2798,6 @@ public inline fun ChatEvent.giveawayPrivateResultsOrThrow(): GiveawayPrivateResu
|
||||
public inline fun <T> ChatEvent.ifGiveawayPrivateResults(block: (GiveawayPrivateResults) -> T): T? =
|
||||
giveawayPrivateResultsOrNull() ?.let(block)
|
||||
|
||||
public inline fun ChatEvent.giveawayPublicResultsOrNull(): GiveawayPublicResults? = this as?
|
||||
dev.inmo.tgbotapi.types.giveaway.GiveawayPublicResults
|
||||
|
||||
public inline fun ChatEvent.giveawayPublicResultsOrThrow(): GiveawayPublicResults = this as
|
||||
dev.inmo.tgbotapi.types.giveaway.GiveawayPublicResults
|
||||
|
||||
public inline fun <T> ChatEvent.ifGiveawayPublicResults(block: (GiveawayPublicResults) -> T): T? =
|
||||
giveawayPublicResultsOrNull() ?.let(block)
|
||||
|
||||
public inline fun ChatEvent.giveawayResultsOrNull(): GiveawayResults? = this as?
|
||||
dev.inmo.tgbotapi.types.giveaway.GiveawayResults
|
||||
|
||||
public inline fun ChatEvent.giveawayResultsOrThrow(): GiveawayResults = this as
|
||||
dev.inmo.tgbotapi.types.giveaway.GiveawayResults
|
||||
|
||||
public inline fun <T> ChatEvent.ifGiveawayResults(block: (GiveawayResults) -> T): T? =
|
||||
giveawayResultsOrNull() ?.let(block)
|
||||
|
||||
public inline fun ChatEvent.channelChatCreatedOrNull(): ChannelChatCreated? = this as?
|
||||
dev.inmo.tgbotapi.types.message.ChatEvents.ChannelChatCreated
|
||||
|
||||
@@ -3396,6 +3420,24 @@ public inline fun <T>
|
||||
Message.ifCommonForumContentMessage(block: (CommonForumContentMessage<MessageContent>) -> T): T?
|
||||
= commonForumContentMessageOrNull() ?.let(block)
|
||||
|
||||
public inline fun Message.accessibleMessageOrNull(): AccessibleMessage? = this as?
|
||||
dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
|
||||
public inline fun Message.accessibleMessageOrThrow(): AccessibleMessage = this as
|
||||
dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
|
||||
public inline fun <T> Message.ifAccessibleMessage(block: (AccessibleMessage) -> T): T? =
|
||||
accessibleMessageOrNull() ?.let(block)
|
||||
|
||||
public inline fun Message.inaccessibleMessageOrNull(): InaccessibleMessage? = this as?
|
||||
dev.inmo.tgbotapi.types.message.abstracts.InaccessibleMessage
|
||||
|
||||
public inline fun Message.inaccessibleMessageOrThrow(): InaccessibleMessage = this as
|
||||
dev.inmo.tgbotapi.types.message.abstracts.InaccessibleMessage
|
||||
|
||||
public inline fun <T> Message.ifInaccessibleMessage(block: (InaccessibleMessage) -> T): T? =
|
||||
inaccessibleMessageOrNull() ?.let(block)
|
||||
|
||||
public inline fun Message.unknownMessageTypeOrNull(): UnknownMessageType? = this as?
|
||||
dev.inmo.tgbotapi.types.message.abstracts.UnknownMessageType
|
||||
|
||||
@@ -3678,6 +3720,18 @@ public inline fun ResendableContent.gameContentOrThrow(): GameContent = this as
|
||||
public inline fun <T> ResendableContent.ifGameContent(block: (GameContent) -> T): T? =
|
||||
gameContentOrNull() ?.let(block)
|
||||
|
||||
public inline fun ResendableContent.giveawayPublicResultsContentOrNull():
|
||||
GiveawayPublicResultsContent? = this as?
|
||||
dev.inmo.tgbotapi.types.message.content.GiveawayPublicResultsContent
|
||||
|
||||
public inline fun ResendableContent.giveawayPublicResultsContentOrThrow():
|
||||
GiveawayPublicResultsContent = this as
|
||||
dev.inmo.tgbotapi.types.message.content.GiveawayPublicResultsContent
|
||||
|
||||
public inline fun <T>
|
||||
ResendableContent.ifGiveawayPublicResultsContent(block: (GiveawayPublicResultsContent) -> T): T?
|
||||
= giveawayPublicResultsContentOrNull() ?.let(block)
|
||||
|
||||
public inline fun ResendableContent.invoiceContentOrNull(): InvoiceContent? = this as?
|
||||
dev.inmo.tgbotapi.types.message.content.InvoiceContent
|
||||
|
||||
@@ -3745,6 +3799,16 @@ public inline fun ResendableContent.pollContentOrThrow(): PollContent = this as
|
||||
public inline fun <T> ResendableContent.ifPollContent(block: (PollContent) -> T): T? =
|
||||
pollContentOrNull() ?.let(block)
|
||||
|
||||
public inline fun ResendableContent.scheduledGiveawayContentOrNull(): ScheduledGiveawayContent? =
|
||||
this as? dev.inmo.tgbotapi.types.message.content.ScheduledGiveawayContent
|
||||
|
||||
public inline fun ResendableContent.scheduledGiveawayContentOrThrow(): ScheduledGiveawayContent =
|
||||
this as dev.inmo.tgbotapi.types.message.content.ScheduledGiveawayContent
|
||||
|
||||
public inline fun <T>
|
||||
ResendableContent.ifScheduledGiveawayContent(block: (ScheduledGiveawayContent) -> T): T? =
|
||||
scheduledGiveawayContentOrNull() ?.let(block)
|
||||
|
||||
public inline fun ResendableContent.stickerContentOrNull(): StickerContent? = this as?
|
||||
dev.inmo.tgbotapi.types.message.content.StickerContent
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ import dev.inmo.tgbotapi.types.MessageId
|
||||
import dev.inmo.tgbotapi.types.MessageThreadId
|
||||
import dev.inmo.tgbotapi.types.Username
|
||||
import dev.inmo.tgbotapi.types.chat.Chat
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
import dev.inmo.tgbotapi.types.threadId
|
||||
import dev.inmo.tgbotapi.utils.extensions.threadIdOrNull
|
||||
|
||||
@@ -32,43 +32,43 @@ inline fun WithPreviewChat.sameChat(chat: Chat) =
|
||||
* @return true in case if [this] message is placed in the same chat that [other]
|
||||
*/
|
||||
@Suppress("NOTHING_TO_INLINE")
|
||||
inline fun WithPreviewChat.sameChat(other: Message) = sameChat(other.chat)
|
||||
inline fun WithPreviewChat.sameChat(other: AccessibleMessage) = sameChat(other.chat)
|
||||
|
||||
/**
|
||||
* @return true in case if [this] message is from the same chat (with id == [chatId]) and [this] [Message.messageId]
|
||||
* @return true in case if [this] message is from the same chat (with id == [chatId]) and [this] [AccessibleMessage.messageId]
|
||||
* equal [messageId] identifier
|
||||
*/
|
||||
@Suppress("NOTHING_TO_INLINE")
|
||||
inline fun Message.sameMessage(
|
||||
inline fun AccessibleMessage.sameMessage(
|
||||
chatId: ChatIdentifier,
|
||||
messageId: MessageId
|
||||
) = sameChat(chatId) && this.messageId == messageId
|
||||
|
||||
/**
|
||||
* @return true in case if [this] message is from the same [chat] and [this] [Message.messageId] equal [messageId]
|
||||
* @return true in case if [this] message is from the same [chat] and [this] [AccessibleMessage.messageId] equal [messageId]
|
||||
* identifier
|
||||
*/
|
||||
@Suppress("NOTHING_TO_INLINE")
|
||||
inline fun Message.sameMessage(
|
||||
inline fun AccessibleMessage.sameMessage(
|
||||
chat: Chat,
|
||||
messageId: MessageId
|
||||
) = sameChat(chat) && this.messageId == messageId
|
||||
|
||||
/**
|
||||
* @return true in case if [this] message is the same as [other]. The same here means that these messages from one chat
|
||||
* and have equal [Message.messageId] identifier
|
||||
* and have equal [AccessibleMessage.messageId] identifier
|
||||
*/
|
||||
@Suppress("NOTHING_TO_INLINE")
|
||||
inline fun Message.sameMessage(other: Message) = sameMessage(other.chat, other.messageId)
|
||||
inline fun AccessibleMessage.sameMessage(other: AccessibleMessage) = sameMessage(other.chat, other.messageId)
|
||||
|
||||
/**
|
||||
* Thread is the same thing that topic
|
||||
*
|
||||
* @return true in case if [this] message is in the chat [chatId] and topic [threadId]. The same here means that these
|
||||
* messages from one chat and have equal [Message.threadIdOrNull] identifier
|
||||
* messages from one chat and have equal [AccessibleMessage.threadIdOrNull] identifier
|
||||
*/
|
||||
@Suppress("NOTHING_TO_INLINE")
|
||||
inline fun Message.sameTopic(
|
||||
inline fun AccessibleMessage.sameTopic(
|
||||
chatId: ChatIdentifier,
|
||||
threadId: MessageThreadId? = chatId.threadId
|
||||
) = sameChat(chatId) && threadIdOrNull == threadId
|
||||
@@ -77,10 +77,10 @@ inline fun Message.sameTopic(
|
||||
* Thread is the same thing that topic
|
||||
*
|
||||
* @return true in case if [this] message is in the chat [chatId] and topic [threadId]. The same here means that these
|
||||
* messages from one chat and have equal [Message.threadIdOrNull] identifier
|
||||
* messages from one chat and have equal [AccessibleMessage.threadIdOrNull] identifier
|
||||
*/
|
||||
@Suppress("NOTHING_TO_INLINE")
|
||||
inline fun Message.sameThread(
|
||||
inline fun AccessibleMessage.sameThread(
|
||||
chatId: ChatIdentifier,
|
||||
threadId: MessageThreadId? = chatId.threadId
|
||||
) = sameTopic(chatId, threadId)
|
||||
@@ -89,10 +89,10 @@ inline fun Message.sameThread(
|
||||
* Thread is the same thing that topic
|
||||
*
|
||||
* @return true in case if [this] message is from the [chat] and topic [threadId]. The same here means that these
|
||||
* messages from one chat and have equal [Message.threadIdOrNull] identifier
|
||||
* messages from one chat and have equal [AccessibleMessage.threadIdOrNull] identifier
|
||||
*/
|
||||
@Suppress("NOTHING_TO_INLINE")
|
||||
inline fun Message.sameTopic(
|
||||
inline fun AccessibleMessage.sameTopic(
|
||||
chat: Chat,
|
||||
threadId: MessageThreadId? = chat.id.threadId
|
||||
) = sameTopic(chat.id, threadId)
|
||||
@@ -101,10 +101,10 @@ inline fun Message.sameTopic(
|
||||
* Thread is the same thing that topic
|
||||
*
|
||||
* @return true in case if [this] message is from the [chat] and topic [threadId]. The same here means that these
|
||||
* messages from one chat and have equal [Message.threadIdOrNull] identifier
|
||||
* messages from one chat and have equal [AccessibleMessage.threadIdOrNull] identifier
|
||||
*/
|
||||
@Suppress("NOTHING_TO_INLINE")
|
||||
inline fun Message.sameThread(
|
||||
inline fun AccessibleMessage.sameThread(
|
||||
chat: Chat,
|
||||
threadId: MessageThreadId? = chat.id.threadId
|
||||
) = sameThread(chat.id, threadId)
|
||||
@@ -113,16 +113,16 @@ inline fun Message.sameThread(
|
||||
* Thread is the same thing that topic
|
||||
*
|
||||
* @return true in case if [this] message is from the same chat and topic as [other]. The same here means that these
|
||||
* messages from one chat and have equal [Message.threadIdOrNull] identifier
|
||||
* messages from one chat and have equal [AccessibleMessage.threadIdOrNull] identifier
|
||||
*/
|
||||
@Suppress("NOTHING_TO_INLINE")
|
||||
inline fun Message.sameTopic(other: Message) = sameTopic(other.chat, other.threadIdOrNull)
|
||||
inline fun AccessibleMessage.sameTopic(other: AccessibleMessage) = sameTopic(other.chat, other.threadIdOrNull)
|
||||
|
||||
/**
|
||||
* Thread is the same thing that topic
|
||||
*
|
||||
* @return true in case if [this] message is in the same topic as the [other]. The same here means that these messages
|
||||
* from one chat and have equal [Message.threadIdOrNull] identifier
|
||||
* from one chat and have equal [AccessibleMessage.threadIdOrNull] identifier
|
||||
*/
|
||||
@Suppress("NOTHING_TO_INLINE")
|
||||
inline fun Message.sameThread(other: Message) = sameTopic(other)
|
||||
inline fun AccessibleMessage.sameThread(other: AccessibleMessage) = sameTopic(other)
|
||||
|
||||
@@ -18,9 +18,8 @@ import dev.inmo.tgbotapi.utils.PreviewFeature
|
||||
|
||||
fun CallbackQuery.sourceChat() = when (this) {
|
||||
is InlineMessageIdDataCallbackQuery -> null
|
||||
is MessageDataCallbackQuery -> message.chat
|
||||
is AbstractMessageCallbackQuery -> message.chat
|
||||
is InlineMessageIdGameShortNameCallbackQuery -> null
|
||||
is MessageGameShortNameCallbackQuery -> message.chat
|
||||
is UnknownCallbackQueryType -> null
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ import dev.inmo.tgbotapi.types.location.Location
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.*
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.voice.*
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.ConnectedFromChannelGroupContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.content.TextContent
|
||||
import dev.inmo.tgbotapi.types.message.textsources.TextSourcesList
|
||||
@@ -22,58 +23,58 @@ import dev.inmo.tgbotapi.types.venue.Venue
|
||||
import dev.inmo.tgbotapi.utils.RiskFeature
|
||||
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.from: User?
|
||||
inline val AccessibleMessage.from: User?
|
||||
get() = asFromUser() ?.from
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.sender_chat: PublicChat?
|
||||
inline val AccessibleMessage.sender_chat: PublicChat?
|
||||
get() = asFromChannelGroupContentMessage() ?.senderChat
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.forward_from: User?
|
||||
inline val AccessibleMessage.forward_from: User?
|
||||
get() = asPossiblyForwardedMessage() ?.forwardInfo ?.asUserForwardInfo() ?.from
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.forward_from_chat: Chat?
|
||||
inline val AccessibleMessage.forward_from_chat: Chat?
|
||||
get() = asPossiblyForwardedMessage() ?.forwardInfo ?.asForwardFromPublicChatInfo() ?.chat
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.forward_from_message_id: MessageId?
|
||||
inline val AccessibleMessage.forward_from_message_id: MessageId?
|
||||
get() = asPossiblyForwardedMessage() ?.forwardInfo ?.fromChannelOrNull() ?.messageId
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.forward_signature: ForwardSignature?
|
||||
inline val AccessibleMessage.forward_signature: ForwardSignature?
|
||||
get() = asPossiblyForwardedMessage() ?.forwardInfo ?.fromChannelOrNull() ?.signature
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.forward_sender_name: ForwardSenderName?
|
||||
inline val AccessibleMessage.forward_sender_name: ForwardSenderName?
|
||||
get() = asPossiblyForwardedMessage() ?.forwardInfo ?.asAnonymousForwardInfo() ?.senderName
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.forward_date: TelegramDate?
|
||||
inline val AccessibleMessage.forward_date: TelegramDate?
|
||||
get() = asPossiblyForwardedMessage() ?.forwardInfo ?.dateOfOriginal
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.is_automatic_forward: Boolean?
|
||||
inline val AccessibleMessage.is_automatic_forward: Boolean?
|
||||
get() = this is ConnectedFromChannelGroupContentMessage<*>
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.reply_to_message: Message?
|
||||
inline val AccessibleMessage.reply_to_message: AccessibleMessage?
|
||||
get() = asPossiblyReplyMessage() ?.replyTo
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.via_bot: CommonBot?
|
||||
inline val AccessibleMessage.via_bot: CommonBot?
|
||||
get() = asPossiblySentViaBotCommonMessage() ?.senderBot
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.edit_date: TelegramDate?
|
||||
inline val AccessibleMessage.edit_date: TelegramDate?
|
||||
get() = asPossiblyEditedMessage() ?.editDate ?.toTelegramDate()
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.has_protected_content: Boolean?
|
||||
inline val AccessibleMessage.has_protected_content: Boolean?
|
||||
get() = asContentMessage() ?.hasProtectedContent
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.media_group_id: MediaGroupIdentifier?
|
||||
inline val AccessibleMessage.media_group_id: MediaGroupIdentifier?
|
||||
get() = asMediaGroupMessage() ?.mediaGroupId
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.author_signature: AuthorSignature?
|
||||
inline val AccessibleMessage.author_signature: AuthorSignature?
|
||||
get() = asSignedMessage() ?.authorSignature
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.text: String?
|
||||
inline val AccessibleMessage.text: String?
|
||||
get() = asContentMessage() ?.content ?.asTextContent() ?.text
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.entities: TextSourcesList?
|
||||
inline val AccessibleMessage.entities: TextSourcesList?
|
||||
get() = asContentMessage() ?.content ?.asTextContent() ?.textSources
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.caption: String?
|
||||
inline val AccessibleMessage.caption: String?
|
||||
get() = whenContentMessage {
|
||||
if (it.content !is TextContent) {
|
||||
it.content.asTextedInput() ?.text
|
||||
@@ -82,7 +83,7 @@ inline val Message.caption: String?
|
||||
}
|
||||
}
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.caption_entities: TextSourcesList?
|
||||
inline val AccessibleMessage.caption_entities: TextSourcesList?
|
||||
get() = whenContentMessage {
|
||||
if (it.content !is TextContent) {
|
||||
it.content.asTextedInput() ?.textSources
|
||||
@@ -91,117 +92,117 @@ inline val Message.caption_entities: TextSourcesList?
|
||||
}
|
||||
}
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.audio: AudioFile?
|
||||
inline val AccessibleMessage.audio: AudioFile?
|
||||
get() = asContentMessage() ?.content ?.asAudioContent() ?.media
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.document: DocumentFile?
|
||||
inline val AccessibleMessage.document: DocumentFile?
|
||||
get() = asContentMessage() ?.content ?.asDocumentContent() ?.media
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.animation: AnimationFile?
|
||||
inline val AccessibleMessage.animation: AnimationFile?
|
||||
get() = asContentMessage() ?.content ?.asAnimationContent() ?.media
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.game: Game?
|
||||
inline val AccessibleMessage.game: Game?
|
||||
get() = asContentMessage() ?.content ?.asGameContent() ?.game
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.photo: Photo?
|
||||
inline val AccessibleMessage.photo: Photo?
|
||||
get() = asContentMessage() ?.content ?.asPhotoContent() ?.mediaCollection
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.sticker: Sticker?
|
||||
inline val AccessibleMessage.sticker: Sticker?
|
||||
get() = asContentMessage() ?.content ?.asStickerContent() ?.media
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.video: VideoFile?
|
||||
inline val AccessibleMessage.video: VideoFile?
|
||||
get() = asContentMessage() ?.content ?.asVideoContent() ?.media
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.voice: VoiceFile?
|
||||
inline val AccessibleMessage.voice: VoiceFile?
|
||||
get() = asContentMessage() ?.content ?.asVoiceContent() ?.media
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.video_note: VideoNoteFile?
|
||||
inline val AccessibleMessage.video_note: VideoNoteFile?
|
||||
get() = asContentMessage() ?.content ?.asVideoNoteContent() ?.media
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.contact: Contact?
|
||||
inline val AccessibleMessage.contact: Contact?
|
||||
get() = asContentMessage() ?.content ?.asContactContent() ?.contact
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.location: Location?
|
||||
inline val AccessibleMessage.location: Location?
|
||||
get() = asContentMessage() ?.content ?.asLocationContent() ?.location
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.venue: Venue?
|
||||
inline val AccessibleMessage.venue: Venue?
|
||||
get() = asContentMessage() ?.content ?.asVenueContent() ?.venue
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.poll: Poll?
|
||||
inline val AccessibleMessage.poll: Poll?
|
||||
get() = asContentMessage() ?.content ?.asPollContent() ?.poll
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.invoice: Invoice?
|
||||
inline val AccessibleMessage.invoice: Invoice?
|
||||
get() = asContentMessage() ?.content ?.asInvoiceContent() ?.invoice
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.dice: Dice?
|
||||
inline val AccessibleMessage.dice: Dice?
|
||||
get() = asContentMessage() ?.content ?.asDiceContent() ?.dice
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.new_chat_members: List<User>?
|
||||
inline val AccessibleMessage.new_chat_members: List<User>?
|
||||
get() = asChatEventMessage() ?.chatEvent ?.asNewChatMembers() ?.members
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.left_chat_member: User?
|
||||
inline val AccessibleMessage.left_chat_member: User?
|
||||
get() = asChatEventMessage() ?.chatEvent ?.asLeftChatMember() ?.user
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.new_chat_title: String?
|
||||
inline val AccessibleMessage.new_chat_title: String?
|
||||
get() = asChatEventMessage() ?.chatEvent ?.asNewChatTitle() ?.title
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.new_chat_photo: Photo?
|
||||
inline val AccessibleMessage.new_chat_photo: Photo?
|
||||
get() = asChatEventMessage() ?.chatEvent ?.asNewChatPhoto() ?.photo
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.delete_chat_photo: Boolean
|
||||
inline val AccessibleMessage.delete_chat_photo: Boolean
|
||||
get() = asChatEventMessage() ?.chatEvent is DeleteChatPhoto
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.group_chat_created: Boolean
|
||||
inline val AccessibleMessage.group_chat_created: Boolean
|
||||
get() = asChatEventMessage() ?.chatEvent is GroupChatCreated
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.supergroup_chat_created: Boolean
|
||||
inline val AccessibleMessage.supergroup_chat_created: Boolean
|
||||
get() = asChatEventMessage() ?.chatEvent is SupergroupChatCreated
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.channel_chat_created: Boolean
|
||||
inline val AccessibleMessage.channel_chat_created: Boolean
|
||||
get() = asChatEventMessage() ?.chatEvent is ChannelChatCreated
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.migrate_to_chat_id: IdChatIdentifier?
|
||||
inline val AccessibleMessage.migrate_to_chat_id: IdChatIdentifier?
|
||||
get() = asChatEventMessage() ?.chatEvent ?.asGroupChatCreated() ?.migratedTo
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.migrate_from_chat_id: IdChatIdentifier?
|
||||
inline val AccessibleMessage.migrate_from_chat_id: IdChatIdentifier?
|
||||
get() = asChatEventMessage() ?.chatEvent ?.let {
|
||||
it ?.asSupergroupChatCreated() ?.migratedFrom ?: it ?.asMigratedToSupergroup() ?.migratedFrom
|
||||
}
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.pinned_message: Message?
|
||||
inline val AccessibleMessage.pinned_message: Message?
|
||||
get() = asChatEventMessage() ?.chatEvent ?.asPinnedMessage() ?.message
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.successful_payment: SuccessfulPayment?
|
||||
inline val AccessibleMessage.successful_payment: SuccessfulPayment?
|
||||
get() = asChatEventMessage() ?.chatEvent ?.asSuccessfulPaymentEvent() ?.payment
|
||||
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.video_chat_scheduled: VideoChatScheduled?
|
||||
inline val AccessibleMessage.video_chat_scheduled: VideoChatScheduled?
|
||||
get() = asChatEventMessage() ?.chatEvent ?.asVideoChatScheduled()
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.video_chat_started: VideoChatStarted?
|
||||
inline val AccessibleMessage.video_chat_started: VideoChatStarted?
|
||||
get() = asChatEventMessage() ?.chatEvent ?.asVideoChatStarted()
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.video_chat_ended: VideoChatEnded?
|
||||
inline val AccessibleMessage.video_chat_ended: VideoChatEnded?
|
||||
get() = asChatEventMessage() ?.chatEvent ?.asVideoChatEnded()
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.video_chat_participants_invited: VideoChatParticipantsInvited?
|
||||
inline val AccessibleMessage.video_chat_participants_invited: VideoChatParticipantsInvited?
|
||||
get() = asChatEventMessage() ?.chatEvent ?.asVideoChatParticipantsInvited()
|
||||
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.message_auto_delete_timer_changed: MessageAutoDeleteTimerChanged?
|
||||
inline val AccessibleMessage.message_auto_delete_timer_changed: MessageAutoDeleteTimerChanged?
|
||||
get() = asChatEventMessage() ?.chatEvent ?.asMessageAutoDeleteTimerChanged()
|
||||
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.connected_website: String?
|
||||
inline val AccessibleMessage.connected_website: String?
|
||||
get() = asChatEventMessage() ?.chatEvent ?.asUserLoggedIn() ?.domain
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.proximity_alert_triggered: ProximityAlertTriggered?
|
||||
inline val AccessibleMessage.proximity_alert_triggered: ProximityAlertTriggered?
|
||||
get() = asChatEventMessage() ?.chatEvent ?.asProximityAlertTriggered()
|
||||
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.passport_data: PassportData?
|
||||
inline val AccessibleMessage.passport_data: PassportData?
|
||||
get() = asPassportMessage() ?.passportData
|
||||
|
||||
@RiskFeature(RawFieldsUsageWarning)
|
||||
inline val Message.reply_markup: InlineKeyboardMarkup?
|
||||
inline val AccessibleMessage.reply_markup: InlineKeyboardMarkup?
|
||||
get() = asCommonMessage() ?.replyMarkup
|
||||
|
||||
@@ -2,7 +2,7 @@ package dev.inmo.tgbotapi.extensions.utils.formatting
|
||||
|
||||
import dev.inmo.tgbotapi.types.*
|
||||
import dev.inmo.tgbotapi.types.chat.*
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
|
||||
import dev.inmo.tgbotapi.types.message.textsources.link
|
||||
import io.ktor.http.encodeURLQueryComponent
|
||||
|
||||
@@ -69,7 +69,7 @@ fun makeLinkToMessage(
|
||||
): String = makeLinkToMessage(chatId.chatId, messageId, chatId.threadId)
|
||||
|
||||
/**
|
||||
* Link which can be used as by any user to get access to [Message]. Returns null in case when there are no
|
||||
* Link which can be used as by any user to get access to [AccessibleMessage]. Returns null in case when there are no
|
||||
* known way to build link (for [PrivateChat]s, for example)
|
||||
*/
|
||||
fun makeLinkToMessage(
|
||||
@@ -88,7 +88,7 @@ fun makeLinkToMessage(
|
||||
/**
|
||||
* @see makeLinkToMessage
|
||||
*/
|
||||
val Message.messageLink: String?
|
||||
val AccessibleMessage.messageLink: String?
|
||||
get() = makeLinkToMessage(
|
||||
chat,
|
||||
messageId
|
||||
|
||||
@@ -2,7 +2,7 @@ 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.Message
|
||||
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
|
||||
@@ -58,10 +58,10 @@ fun CommonMessage<*>.hasNoCommands(): Boolean = !this.hasCommands()
|
||||
* }
|
||||
* ```
|
||||
*
|
||||
* @return true if this [Message] is from forum ([threadIdOrNull] is not null). False otherwise.
|
||||
* @return true if this [AccessibleMessage] is from forum ([threadIdOrNull] is not null). False otherwise.
|
||||
* @see notForumMessage
|
||||
*/
|
||||
fun Message.forumMessage(): Boolean = threadIdOrNull != null
|
||||
fun AccessibleMessage.forumMessage(): Boolean = threadIdOrNull != null
|
||||
|
||||
/**
|
||||
* A predicate to test that message has not been sent in the forum.
|
||||
@@ -76,7 +76,7 @@ fun Message.forumMessage(): Boolean = threadIdOrNull != null
|
||||
* }
|
||||
* ```
|
||||
*
|
||||
* @return true if this [Message] is not from forum ([threadIdOrNull] is not null). False otherwise.
|
||||
* @return true if this [AccessibleMessage] is not from forum ([threadIdOrNull] is not null). False otherwise.
|
||||
* @see forumMessage
|
||||
*/
|
||||
fun Message.notForumMessage(): Boolean = !forumMessage()
|
||||
fun AccessibleMessage.notForumMessage(): Boolean = !forumMessage()
|
||||
|
||||
Reference in New Issue
Block a user