mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2024-11-22 08:13:47 +00:00
add separation of text sources
This commit is contained in:
parent
6ec0fcadd2
commit
ee6f0f3d5d
@ -67,6 +67,10 @@
|
|||||||
* New request `CopyMessage`
|
* New request `CopyMessage`
|
||||||
* New extension `List<TextSource>#makeString` for more comfortable work with new api with entities
|
* New extension `List<TextSource>#makeString` for more comfortable work with new api with entities
|
||||||
* Support for Google Places identifiers for venues
|
* Support for Google Places identifiers for venues
|
||||||
|
* New extensions for text sources separating:
|
||||||
|
* `List<TextSource>#separateForMessage`
|
||||||
|
* `List<TextSource>#separateForCaption`
|
||||||
|
* `List<TextSource>#separateForText`
|
||||||
* `API`:
|
* `API`:
|
||||||
* Extensions `TelegramBot#pinChatMessage` now support any `Chat` and `Message`s from any `Chat`
|
* Extensions `TelegramBot#pinChatMessage` now support any `Chat` and `Message`s from any `Chat`
|
||||||
* New extensions `TelegramBot#unpinAllChatMessages`
|
* New extensions `TelegramBot#unpinAllChatMessages`
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
package dev.inmo.tgbotapi.CommonAbstracts
|
package dev.inmo.tgbotapi.CommonAbstracts
|
||||||
|
|
||||||
|
import dev.inmo.tgbotapi.types.captionLength
|
||||||
|
import dev.inmo.tgbotapi.types.textLength
|
||||||
|
|
||||||
typealias FullTextSourcesList = List<TextSource>
|
typealias FullTextSourcesList = List<TextSource>
|
||||||
typealias FullTextPartsList = List<TextPart>
|
typealias FullTextPartsList = List<TextPart>
|
||||||
|
|
||||||
@ -22,3 +25,47 @@ data class TextPart(
|
|||||||
|
|
||||||
fun List<TextPart>.justTextSources() = map { it.source }
|
fun List<TextPart>.justTextSources() = map { it.source }
|
||||||
fun List<TextSource>.makeString() = joinToString("") { it.source }
|
fun List<TextSource>.makeString() = joinToString("") { it.source }
|
||||||
|
fun List<TextSource>.separateForMessage(limit: IntRange, numberOfParts: Int? = null): List<List<TextSource>> {
|
||||||
|
if (isEmpty()) {
|
||||||
|
return emptyList()
|
||||||
|
}
|
||||||
|
|
||||||
|
val resultList = mutableListOf<MutableList<TextSource>>(mutableListOf())
|
||||||
|
var currentPartLength = 0
|
||||||
|
val maxSize = limit.last + 1
|
||||||
|
|
||||||
|
for (current in this) {
|
||||||
|
if (current.source.length > maxSize) {
|
||||||
|
error("Currently unsupported parts with size more than target one-message parts (${current.source.length} > ${maxSize})")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (currentPartLength + current.source.length > maxSize) {
|
||||||
|
if (numberOfParts == null || numberOfParts < resultList.size) {
|
||||||
|
resultList.add(mutableListOf())
|
||||||
|
currentPartLength = 0
|
||||||
|
} else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resultList.last().add(current)
|
||||||
|
currentPartLength += current.source.length
|
||||||
|
}
|
||||||
|
|
||||||
|
return resultList
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method will prepare [TextSource]s list for messages. Remember, that first part will be separated with
|
||||||
|
* [captionLength] and all others with
|
||||||
|
*/
|
||||||
|
fun List<TextSource>.separateForCaption(): List<List<TextSource>> {
|
||||||
|
val captionPart = separateForMessage(captionLength, 1).first()
|
||||||
|
return listOf(captionPart) + minus(captionPart).separateForMessage(textLength)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method will prepare [TextSource]s list for messages with [textLength]
|
||||||
|
*/
|
||||||
|
@Suppress("NOTHING_TO_INLINE")
|
||||||
|
inline fun List<TextSource>.separateForText(): List<List<TextSource>> = separateForMessage(textLength)
|
||||||
|
Loading…
Reference in New Issue
Block a user