2020-10-04 11:06:30 +00:00
|
|
|
package dev.inmo.tgbotapi.types.message
|
2020-01-15 06:52:52 +00:00
|
|
|
|
2022-05-01 16:13:40 +00:00
|
|
|
import dev.inmo.tgbotapi.abstracts.FromUser
|
2022-08-05 18:39:46 +00:00
|
|
|
import dev.inmo.tgbotapi.utils.internal.ClassCastsIncluded
|
2020-10-04 11:06:30 +00:00
|
|
|
import dev.inmo.tgbotapi.types.*
|
2022-04-21 18:16:41 +00:00
|
|
|
import dev.inmo.tgbotapi.types.chat.*
|
|
|
|
import dev.inmo.tgbotapi.types.chat.User
|
2020-01-15 06:52:52 +00:00
|
|
|
|
2022-08-05 10:31:39 +00:00
|
|
|
@ClassCastsIncluded
|
2022-08-04 16:13:02 +00:00
|
|
|
sealed interface ForwardInfo {
|
2020-01-15 06:52:52 +00:00
|
|
|
abstract val dateOfOriginal: TelegramDate
|
|
|
|
|
2022-08-04 16:45:26 +00:00
|
|
|
data class ByAnonymous(
|
|
|
|
override val dateOfOriginal: TelegramDate,
|
|
|
|
val senderName: String
|
|
|
|
) : ForwardInfo
|
2020-01-15 06:52:52 +00:00
|
|
|
|
2022-08-04 16:45:26 +00:00
|
|
|
data class ByUser(
|
|
|
|
override val dateOfOriginal: TelegramDate,
|
|
|
|
override val from: User
|
|
|
|
) : ForwardInfo, FromUser
|
2020-01-15 06:52:52 +00:00
|
|
|
|
2022-08-04 16:45:26 +00:00
|
|
|
sealed interface PublicChat : ForwardInfo {
|
|
|
|
val chat: dev.inmo.tgbotapi.types.chat.PublicChat
|
2022-01-06 08:49:11 +00:00
|
|
|
|
2022-08-04 16:45:26 +00:00
|
|
|
/**
|
|
|
|
* Represent forward info for the message sent by [channelChat] into some group
|
|
|
|
*/
|
|
|
|
data class SentByChannel(
|
|
|
|
override val dateOfOriginal: TelegramDate,
|
|
|
|
val channelChat: ChannelChat,
|
|
|
|
val signature: String? = null
|
|
|
|
) : PublicChat {
|
|
|
|
override val chat: dev.inmo.tgbotapi.types.chat.PublicChat
|
|
|
|
get() = channelChat
|
|
|
|
}
|
2020-10-02 08:59:10 +00:00
|
|
|
|
2022-08-04 16:45:26 +00:00
|
|
|
/**
|
|
|
|
* Represent forward info for the message sent by [channelChat] into that channel
|
|
|
|
*/
|
|
|
|
data class FromChannel(
|
|
|
|
override val dateOfOriginal: TelegramDate,
|
2022-09-14 18:17:18 +00:00
|
|
|
val messageId: MessageId,
|
2022-08-04 16:45:26 +00:00
|
|
|
val channelChat: ChannelChat,
|
|
|
|
val signature: String? = null
|
|
|
|
) : PublicChat {
|
|
|
|
override val chat: dev.inmo.tgbotapi.types.chat.PublicChat
|
|
|
|
get() = channelChat
|
|
|
|
}
|
2022-08-04 16:13:02 +00:00
|
|
|
|
2022-08-04 16:45:26 +00:00
|
|
|
data class FromSupergroup(
|
|
|
|
override val dateOfOriginal: TelegramDate,
|
|
|
|
val group: SupergroupChat
|
|
|
|
) : PublicChat {
|
|
|
|
override val chat: dev.inmo.tgbotapi.types.chat.PublicChat
|
|
|
|
get() = group
|
|
|
|
}
|
2022-08-04 16:13:02 +00:00
|
|
|
}
|
2022-01-06 08:49:11 +00:00
|
|
|
}
|
2024-01-07 11:12:37 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
)
|
2024-01-07 14:00:07 +00:00
|
|
|
is MessageOrigin.Unknown -> null
|
2024-01-07 11:12:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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
|
|
|
|
)
|
|
|
|
}
|