tgbotapi/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/RawMessageEntity.kt

42 lines
2.0 KiB
Kotlin

package com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity
import com.github.insanusmokrassar.TelegramBotAPI.types.User
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable
import kotlinx.serialization.internal.ArrayListSerializer
@Serializable
data class RawMessageEntity(
val type: String,
val offset: Int,
val length: Int,
val url: String? = null,
val user: User? = null
) {
fun asMessageEntity(source: String): MessageEntity {
val sourceSubstring = source.substring(offset, offset + length)
return when (type) {
"mention" -> MentionMessageEntity(offset, length, sourceSubstring)
"hashtag" -> HashTagMessageEntity(offset, length, sourceSubstring)
"cashtag" -> TODO()
"bot_command" -> BotCommandMessageEntity(offset, length, sourceSubstring)
"url" -> URLMessageEntity(offset, length, sourceSubstring)
"email" -> EMailMessageEntity(offset, length, sourceSubstring)
"phone_number" -> PhoneNumberMessageEntity(offset, length, sourceSubstring)
"bold" -> BoldTextMessageEntity(offset, length, sourceSubstring)
"italic" -> ItalicTextMessageEntity(offset, length, sourceSubstring)
"code" -> CodeTextMessageEntity(offset, length, sourceSubstring)
"pre" -> PreTextMessageEntity(offset, length, sourceSubstring)
"text_link" -> TextLinkMessageEntity(offset, length, sourceSubstring, url ?: throw IllegalStateException("URL must not be null for text link"))
"text_mention" -> TextMentionMessageEntity(offset, length, sourceSubstring, user ?: throw IllegalStateException("User must not be null for text mention"))
else -> throw IllegalArgumentException("Unknown type of message entity")
}
}
}
typealias RawMessageEntities = List<RawMessageEntity>
object RawMessageEntitiesSerializer : KSerializer<List<RawMessageEntity>> by ArrayListSerializer(
RawMessageEntity.serializer()
)