mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2024-11-22 08:13:47 +00:00
fix of #291
This commit is contained in:
parent
8d27349868
commit
4df800eaa9
@ -8,6 +8,8 @@
|
|||||||
* Several extensions for `TelegramBotAPI` like `retrieveAccumulatedUpdates` have been added as a solution for
|
* Several extensions for `TelegramBotAPI` like `retrieveAccumulatedUpdates` have been added as a solution for
|
||||||
[#293](https://github.com/InsanusMokrassar/TelegramBotAPI/issues/293)
|
[#293](https://github.com/InsanusMokrassar/TelegramBotAPI/issues/293)
|
||||||
* Links for `tg://user?id=<user_id>` have been updated ([#292](https://github.com/InsanusMokrassar/TelegramBotAPI/issues/292))
|
* Links for `tg://user?id=<user_id>` have been updated ([#292](https://github.com/InsanusMokrassar/TelegramBotAPI/issues/292))
|
||||||
|
* All usages of captions or texts in resends and same things have been replaced with `textSources`
|
||||||
|
* Global `defaultParseMode` has been added ([#291](https://github.com/InsanusMokrassar/TelegramBotAPI/issues/291))
|
||||||
|
|
||||||
## 0.32.4
|
## 0.32.4
|
||||||
|
|
||||||
|
@ -60,6 +60,7 @@ kotlin {
|
|||||||
dependencies {
|
dependencies {
|
||||||
implementation kotlin('test-common')
|
implementation kotlin('test-common')
|
||||||
implementation kotlin('test-annotations-common')
|
implementation kotlin('test-annotations-common')
|
||||||
|
implementation project(":tgbotapi.extensions.utils")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,6 +35,14 @@ typealias Markdown = MarkdownParseMode
|
|||||||
typealias MarkdownV2 = MarkdownV2ParseMode
|
typealias MarkdownV2 = MarkdownV2ParseMode
|
||||||
typealias HTML = HTMLParseMode
|
typealias HTML = HTMLParseMode
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This variable respects to default parse mode used in places like next:
|
||||||
|
*
|
||||||
|
* * [dev.inmo.tgbotapi.types.message.content.TextContent.createResends]
|
||||||
|
* *
|
||||||
|
*/
|
||||||
|
var defaultParseMode: ParseMode = HTML
|
||||||
|
|
||||||
@Serializer(ParseMode::class)
|
@Serializer(ParseMode::class)
|
||||||
internal object ParseModeSerializerObject : KSerializer<ParseMode> {
|
internal object ParseModeSerializerObject : KSerializer<ParseMode> {
|
||||||
override fun deserialize(decoder: Decoder): ParseMode {
|
override fun deserialize(decoder: Decoder): ParseMode {
|
||||||
|
@ -5,8 +5,7 @@ import dev.inmo.tgbotapi.requests.abstracts.Request
|
|||||||
import dev.inmo.tgbotapi.requests.send.SendTextMessage
|
import dev.inmo.tgbotapi.requests.send.SendTextMessage
|
||||||
import dev.inmo.tgbotapi.types.ChatIdentifier
|
import dev.inmo.tgbotapi.types.ChatIdentifier
|
||||||
import dev.inmo.tgbotapi.types.MessageIdentifier
|
import dev.inmo.tgbotapi.types.MessageIdentifier
|
||||||
import dev.inmo.tgbotapi.types.ParseMode.HTMLParseMode
|
import dev.inmo.tgbotapi.types.ParseMode.*
|
||||||
import dev.inmo.tgbotapi.types.ParseMode.ParseMode
|
|
||||||
import dev.inmo.tgbotapi.types.buttons.KeyboardMarkup
|
import dev.inmo.tgbotapi.types.buttons.KeyboardMarkup
|
||||||
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
||||||
import dev.inmo.tgbotapi.types.message.content.abstracts.MessageContent
|
import dev.inmo.tgbotapi.types.message.content.abstracts.MessageContent
|
||||||
@ -31,19 +30,24 @@ data class TextContent(
|
|||||||
replyMarkup
|
replyMarkup
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@Deprecated(
|
||||||
|
"Useless due to fact that createResend currently use textSource and that will guarantee correct sending of message",
|
||||||
|
ReplaceWith("createResend")
|
||||||
|
)
|
||||||
override fun createResends(
|
override fun createResends(
|
||||||
chatId: ChatIdentifier,
|
chatId: ChatIdentifier,
|
||||||
disableNotification: Boolean,
|
disableNotification: Boolean,
|
||||||
replyToMessageId: MessageIdentifier?,
|
replyToMessageId: MessageIdentifier?,
|
||||||
allowSendingWithoutReply: Boolean?,
|
allowSendingWithoutReply: Boolean?,
|
||||||
replyMarkup: KeyboardMarkup?
|
replyMarkup: KeyboardMarkup?
|
||||||
): List<Request<ContentMessage<TextContent>>> = createResends(
|
): List<Request<ContentMessage<TextContent>>> = listOf(
|
||||||
chatId,
|
createResend(
|
||||||
disableNotification,
|
chatId,
|
||||||
replyToMessageId,
|
disableNotification,
|
||||||
allowSendingWithoutReply,
|
replyToMessageId,
|
||||||
replyMarkup,
|
allowSendingWithoutReply,
|
||||||
HTMLParseMode
|
replyMarkup
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
@Deprecated(
|
@Deprecated(
|
||||||
@ -56,8 +60,6 @@ data class TextContent(
|
|||||||
replyToMessageId: MessageIdentifier?,
|
replyToMessageId: MessageIdentifier?,
|
||||||
allowSendingWithoutReply: Boolean?,
|
allowSendingWithoutReply: Boolean?,
|
||||||
replyMarkup: KeyboardMarkup?,
|
replyMarkup: KeyboardMarkup?,
|
||||||
parseMode: ParseMode = HTMLParseMode
|
parseMode: ParseMode = defaultParseMode
|
||||||
): List<Request<ContentMessage<TextContent>>> = listOf(
|
): List<Request<ContentMessage<TextContent>>> = createResends(chatId, disableNotification, replyToMessageId, allowSendingWithoutReply, replyMarkup)
|
||||||
createResend(chatId, disableNotification, replyToMessageId, allowSendingWithoutReply, replyMarkup)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
@ -1,97 +0,0 @@
|
|||||||
package dev.inmo.tgbotapi.utils.internal
|
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.CommonAbstracts.*
|
|
||||||
import dev.inmo.tgbotapi.types.ParseMode.*
|
|
||||||
import dev.inmo.tgbotapi.types.captionLength
|
|
||||||
import dev.inmo.tgbotapi.types.message.content.TextContent
|
|
||||||
import dev.inmo.tgbotapi.types.textLength
|
|
||||||
|
|
||||||
internal fun createFormattedText(
|
|
||||||
entities: TextSourcesList,
|
|
||||||
partLength: Int = textLength.last,
|
|
||||||
mode: ParseMode = MarkdownParseMode
|
|
||||||
): List<String> {
|
|
||||||
val texts = mutableListOf<String>()
|
|
||||||
val textBuilder = StringBuilder(partLength)
|
|
||||||
for (entity in entities) {
|
|
||||||
val string = when (mode) {
|
|
||||||
is MarkdownParseMode -> entity.markdown
|
|
||||||
is MarkdownV2ParseMode -> entity.markdownV2
|
|
||||||
is HTMLParseMode -> entity.html
|
|
||||||
}
|
|
||||||
if (textBuilder.length + string.length > partLength) {
|
|
||||||
if (textBuilder.isNotEmpty()) {
|
|
||||||
texts.add(textBuilder.toString())
|
|
||||||
textBuilder.clear()
|
|
||||||
}
|
|
||||||
val chunked = string.chunked(partLength)
|
|
||||||
val last = chunked.last()
|
|
||||||
textBuilder.append(last)
|
|
||||||
val listToAdd = if (chunked.size > 1) {
|
|
||||||
chunked.subList(0, chunked.size - 1)
|
|
||||||
} else {
|
|
||||||
emptyList()
|
|
||||||
}
|
|
||||||
listToAdd.forEach {
|
|
||||||
texts.add(it)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
textBuilder.append(string)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (textBuilder.isNotEmpty()) {
|
|
||||||
texts.add(textBuilder.toString())
|
|
||||||
textBuilder.clear()
|
|
||||||
}
|
|
||||||
return texts
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
internal fun createMarkdownText(
|
|
||||||
entities: TextSourcesList,
|
|
||||||
partLength: Int = textLength.last
|
|
||||||
): List<String> = createFormattedText(entities, partLength, MarkdownParseMode)
|
|
||||||
|
|
||||||
internal fun TextSourcesList.toMarkdownTexts(): List<String> = createMarkdownText(
|
|
||||||
this,
|
|
||||||
textLength.last
|
|
||||||
)
|
|
||||||
internal fun TextContent.toMarkdownTexts(): List<String> = textSources.toMarkdownTexts()
|
|
||||||
|
|
||||||
|
|
||||||
internal fun createMarkdownV2Text(
|
|
||||||
entities: TextSourcesList,
|
|
||||||
partLength: Int = textLength.last
|
|
||||||
): List<String> = createFormattedText(entities, partLength, MarkdownV2ParseMode)
|
|
||||||
|
|
||||||
internal fun TextSourcesList.toMarkdownV2Captions(): List<String> = createMarkdownV2Text(
|
|
||||||
this,
|
|
||||||
captionLength.last
|
|
||||||
)
|
|
||||||
internal fun CaptionedInput.toMarkdownV2Captions(): List<String> = textSources.toMarkdownV2Captions()
|
|
||||||
|
|
||||||
internal fun TextSourcesList.toMarkdownV2Texts(): List<String> = createMarkdownV2Text(
|
|
||||||
this,
|
|
||||||
textLength.last
|
|
||||||
)
|
|
||||||
internal fun TextContent.toMarkdownV2Texts(): List<String> = textSources.toMarkdownV2Texts()
|
|
||||||
|
|
||||||
|
|
||||||
internal fun createHtmlText(
|
|
||||||
entities: TextSourcesList,
|
|
||||||
partLength: Int = textLength.last
|
|
||||||
): List<String> = createFormattedText(entities, partLength, HTMLParseMode)
|
|
||||||
|
|
||||||
internal fun TextSourcesList.toHtmlCaptions(): List<String> = createHtmlText(
|
|
||||||
this,
|
|
||||||
captionLength.last
|
|
||||||
)
|
|
||||||
internal fun CaptionedInput.toHtmlCaptions(): List<String> = textSources.toHtmlCaptions()
|
|
||||||
|
|
||||||
internal fun TextSourcesList.toHtmlTexts(): List<String> = createHtmlText(
|
|
||||||
this,
|
|
||||||
textLength.last
|
|
||||||
)
|
|
||||||
internal fun TextContent.toHtmlTexts(): List<String> = textSources.toHtmlTexts()
|
|
||||||
|
|
||||||
|
|
@ -2,8 +2,8 @@ package dev.inmo.tgbotapi.types.MessageEntity
|
|||||||
|
|
||||||
import dev.inmo.tgbotapi.CommonAbstracts.TextSource
|
import dev.inmo.tgbotapi.CommonAbstracts.TextSource
|
||||||
import dev.inmo.tgbotapi.CommonAbstracts.plus
|
import dev.inmo.tgbotapi.CommonAbstracts.plus
|
||||||
|
import dev.inmo.tgbotapi.extensions.utils.formatting.*
|
||||||
import dev.inmo.tgbotapi.types.MessageEntity.textsources.*
|
import dev.inmo.tgbotapi.types.MessageEntity.textsources.*
|
||||||
import dev.inmo.tgbotapi.utils.internal.*
|
|
||||||
import kotlin.test.Test
|
import kotlin.test.Test
|
||||||
import kotlin.test.assertEquals
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package dev.inmo.tgbotapi.types.MessageEntity
|
package dev.inmo.tgbotapi.types.MessageEntity
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.CommonAbstracts.justTextSources
|
import dev.inmo.tgbotapi.CommonAbstracts.justTextSources
|
||||||
import dev.inmo.tgbotapi.utils.internal.toHtmlTexts
|
import dev.inmo.tgbotapi.extensions.utils.formatting.toHtmlTexts
|
||||||
import dev.inmo.tgbotapi.utils.internal.toMarkdownV2Texts
|
import dev.inmo.tgbotapi.extensions.utils.formatting.toMarkdownV2Texts
|
||||||
import kotlin.test.Test
|
import kotlin.test.Test
|
||||||
import kotlin.test.assertEquals
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
|
@ -44,5 +44,23 @@ kotlin {
|
|||||||
api project(":tgbotapi.core")
|
api project(":tgbotapi.core")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
commonTest {
|
||||||
|
dependencies {
|
||||||
|
implementation kotlin('test-common')
|
||||||
|
implementation kotlin('test-annotations-common')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
jvmTest {
|
||||||
|
dependencies {
|
||||||
|
implementation kotlin('test-junit')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
jsTest {
|
||||||
|
dependencies {
|
||||||
|
implementation kotlin('test-junit')
|
||||||
|
implementation kotlin('test-js')
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,15 +8,15 @@ import dev.inmo.tgbotapi.types.message.content.TextContent
|
|||||||
fun createFormattedText(
|
fun createFormattedText(
|
||||||
entities: TextSourcesList,
|
entities: TextSourcesList,
|
||||||
partLength: Int = textLength.last,
|
partLength: Int = textLength.last,
|
||||||
mode: ParseMode = MarkdownParseMode
|
mode: ParseMode = defaultParseMode
|
||||||
): List<String> {
|
): List<String> {
|
||||||
val texts = mutableListOf<String>()
|
val texts = mutableListOf<String>()
|
||||||
val textBuilder = StringBuilder(partLength)
|
val textBuilder = StringBuilder(partLength)
|
||||||
for (entity in entities) {
|
for (entity in entities) {
|
||||||
val string = when (mode) {
|
val string = when (mode) {
|
||||||
is MarkdownParseMode -> entity.markdown
|
is Markdown -> entity.markdown
|
||||||
is MarkdownV2ParseMode -> entity.markdownV2
|
is MarkdownV2 -> entity.markdownV2
|
||||||
is HTMLParseMode -> entity.html
|
is HTML -> entity.html
|
||||||
}
|
}
|
||||||
if (textBuilder.length + string.length > partLength) {
|
if (textBuilder.length + string.length > partLength) {
|
||||||
if (textBuilder.isNotEmpty()) {
|
if (textBuilder.isNotEmpty()) {
|
||||||
@ -49,7 +49,7 @@ fun createFormattedText(
|
|||||||
fun createMarkdownText(
|
fun createMarkdownText(
|
||||||
entities: TextSourcesList,
|
entities: TextSourcesList,
|
||||||
partLength: Int = textLength.last
|
partLength: Int = textLength.last
|
||||||
): List<String> = createFormattedText(entities, partLength, MarkdownParseMode)
|
): List<String> = createFormattedText(entities, partLength, Markdown)
|
||||||
|
|
||||||
fun TextSourcesList.toMarkdownCaptions(): List<String> = createMarkdownText(
|
fun TextSourcesList.toMarkdownCaptions(): List<String> = createMarkdownText(
|
||||||
this,
|
this,
|
||||||
@ -73,7 +73,7 @@ fun ExplainedInput.toMarkdownExplanations(): List<String> = textSources.toMarkdo
|
|||||||
fun createMarkdownV2Text(
|
fun createMarkdownV2Text(
|
||||||
entities: TextSourcesList,
|
entities: TextSourcesList,
|
||||||
partLength: Int = textLength.last
|
partLength: Int = textLength.last
|
||||||
): List<String> = createFormattedText(entities, partLength, MarkdownV2ParseMode)
|
): List<String> = createFormattedText(entities, partLength, MarkdownV2)
|
||||||
|
|
||||||
fun TextSourcesList.toMarkdownV2Captions(): List<String> = createMarkdownV2Text(
|
fun TextSourcesList.toMarkdownV2Captions(): List<String> = createMarkdownV2Text(
|
||||||
this,
|
this,
|
||||||
@ -97,7 +97,7 @@ fun ExplainedInput.toMarkdownV2Explanations(): List<String> = textSources.toMark
|
|||||||
fun createHtmlText(
|
fun createHtmlText(
|
||||||
entities: TextSourcesList,
|
entities: TextSourcesList,
|
||||||
partLength: Int = textLength.last
|
partLength: Int = textLength.last
|
||||||
): List<String> = createFormattedText(entities, partLength, HTMLParseMode)
|
): List<String> = createFormattedText(entities, partLength, HTML)
|
||||||
|
|
||||||
fun TextSourcesList.toHtmlCaptions(): List<String> = createHtmlText(
|
fun TextSourcesList.toHtmlCaptions(): List<String> = createHtmlText(
|
||||||
this,
|
this,
|
||||||
|
Loading…
Reference in New Issue
Block a user