RegularTextMessageEntity and convertToFullMessageEntityList

This commit is contained in:
InsanusMokrassar 2019-01-29 09:47:01 +08:00
parent 2af4ebcd44
commit 81029db165
3 changed files with 42 additions and 15 deletions

View File

@ -14,6 +14,9 @@
* Updated built-in lengths restrictions
* Apply restrictions of text limit for sending messages
* Add `RegularTextMessageEntity` which is useful for representing regular text message entity
* Add `convertToFullMessageEntityList` which create list of entities with `RegularTextMessageEntity` on places where
must be regular text
### 0.8.5

View File

@ -0,0 +1,7 @@
package com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity
data class RegularTextMessageEntity(
override val offset: Int,
override val length: Int,
override val sourceString: String
) : MessageEntity

View File

@ -1,6 +1,7 @@
package com.github.insanusmokrassar.TelegramBotAPI.utils
import com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity.MessageEntity
import com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity.RegularTextMessageEntity
import com.github.insanusmokrassar.TelegramBotAPI.types.message.content.TextContent
import com.github.insanusmokrassar.TelegramBotAPI.types.message.content.abstracts.CaptionedMediaContent
import com.github.insanusmokrassar.TelegramBotAPI.utils.extensions.toMarkdown
@ -9,21 +10,7 @@ fun createMarkdownText(
text: String,
messageEntities: List<MessageEntity>
): String {
val builder = StringBuilder()
var offset = 0
for (entity in messageEntities) {
builder.append(
text.substring(offset until entity.offset).toMarkdown()
)
builder.append(
entity.asMarkdownSource
)
offset += entity.length
}
builder.append(
text.substring(offset).toMarkdown()
)
return builder.toString()
return convertToFullMessageEntityList(text, messageEntities).joinToString("", "", "") { it.asMarkdownSource }
}
fun CaptionedMediaContent.toMarkdownCaption(): String? = caption ?.let {
@ -33,7 +20,37 @@ fun CaptionedMediaContent.toMarkdownCaption(): String? = caption ?.let {
)
}
fun CaptionedMediaContent.fullEntitiesList(): List<MessageEntity> = caption ?.let {
convertToFullMessageEntityList(it, captionEntities)
} ?: emptyList()
fun TextContent.toMarkdownText(): String = createMarkdownText(
text,
entities
)
fun TextContent.fullEntitiesList(): List<MessageEntity> = convertToFullMessageEntityList(text, entities)
fun convertToFullMessageEntityList(
text: String,
messageEntities: List<MessageEntity>
): List<MessageEntity> {
val result = mutableListOf<MessageEntity>()
var offset = 0
for (entity in messageEntities) {
val newEntitySize = entity.offset - offset
if (newEntitySize > 0) {
val regularEntity = RegularTextMessageEntity(offset, newEntitySize, text.substring(offset, entity.offset))
result.add(regularEntity)
offset += regularEntity.length
}
result.add(entity)
offset += entity.length
}
val newEntitySize = text.length - offset
if (newEntitySize > 0) {
result.add(RegularTextMessageEntity(offset, newEntitySize, text.substring(offset, text.length)))
}
return result
}