mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2024-11-25 11:38:45 +00:00
commit
f13207064e
15
CHANGELOG.md
15
CHANGELOG.md
@ -1,5 +1,20 @@
|
|||||||
# TelegramBotAPI changelog
|
# TelegramBotAPI changelog
|
||||||
|
|
||||||
|
## 0.33.4
|
||||||
|
|
||||||
|
* `Common`:
|
||||||
|
* `Version`:
|
||||||
|
* `uuid`: `0.2.3` -> `0.2.4`
|
||||||
|
* `MicroUtils`: `0.4.33` -> `0.4.35`
|
||||||
|
* `Core`:
|
||||||
|
* All `TextSource` implementators have become `Serializable`
|
||||||
|
* New serializer `TextSourceSerializer`
|
||||||
|
* Interface`FromUserMessage` now extends `Message`
|
||||||
|
* New interface `FromUser`
|
||||||
|
* Interface `FromUserMessage` now extends `FromUser`
|
||||||
|
* `Extensions Utils`
|
||||||
|
* Fixes in `parseCommandsWithParams`
|
||||||
|
|
||||||
## 0.33.3
|
## 0.33.3
|
||||||
|
|
||||||
* `Common`:
|
* `Common`:
|
||||||
|
11
build.gradle
11
build.gradle
@ -18,6 +18,17 @@ plugins {
|
|||||||
id "org.jetbrains.kotlin.plugin.serialization" version "$kotlin_version" apply false
|
id "org.jetbrains.kotlin.plugin.serialization" version "$kotlin_version" apply false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// temporal crutch until legacy tests will be stabled or legacy target will be removed
|
||||||
|
allprojects {
|
||||||
|
if (it != rootProject.findProject("docs")) {
|
||||||
|
tasks.whenTaskAdded { task ->
|
||||||
|
if(task.name == "jsLegacyBrowserTest" || task.name == "jsLegacyNodeTest") {
|
||||||
|
task.enabled = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private String getCurrentVersionChangelog() {
|
private String getCurrentVersionChangelog() {
|
||||||
OutputStream changelogDataOS = new ByteArrayOutputStream()
|
OutputStream changelogDataOS = new ByteArrayOutputStream()
|
||||||
exec {
|
exec {
|
||||||
|
@ -9,14 +9,14 @@ kotlin_version=1.4.32
|
|||||||
kotlin_coroutines_version=1.4.3
|
kotlin_coroutines_version=1.4.3
|
||||||
kotlin_serialisation_runtime_version=1.1.0
|
kotlin_serialisation_runtime_version=1.1.0
|
||||||
klock_version=2.0.7
|
klock_version=2.0.7
|
||||||
uuid_version=0.2.3
|
uuid_version=0.2.4
|
||||||
ktor_version=1.5.3
|
ktor_version=1.5.3
|
||||||
|
|
||||||
micro_utils_version=0.4.33
|
micro_utils_version=0.4.35
|
||||||
|
|
||||||
javax_activation_version=1.1.1
|
javax_activation_version=1.1.1
|
||||||
|
|
||||||
library_group=dev.inmo
|
library_group=dev.inmo
|
||||||
library_version=0.33.3
|
library_version=0.33.4
|
||||||
|
|
||||||
github_release_plugin_version=2.2.12
|
github_release_plugin_version=2.2.12
|
||||||
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
|
|||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip
|
||||||
|
@ -52,6 +52,7 @@ kotlin {
|
|||||||
api "dev.inmo:micro_utils.coroutines:$micro_utils_version"
|
api "dev.inmo:micro_utils.coroutines:$micro_utils_version"
|
||||||
api "dev.inmo:micro_utils.serialization.base64:$micro_utils_version"
|
api "dev.inmo:micro_utils.serialization.base64:$micro_utils_version"
|
||||||
api "dev.inmo:micro_utils.serialization.encapsulator:$micro_utils_version"
|
api "dev.inmo:micro_utils.serialization.encapsulator:$micro_utils_version"
|
||||||
|
api "dev.inmo:micro_utils.serialization.typed_serializer:$micro_utils_version"
|
||||||
|
|
||||||
api "io.ktor:ktor-client-core:$ktor_version"
|
api "io.ktor:ktor-client-core:$ktor_version"
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,7 @@
|
|||||||
|
package dev.inmo.tgbotapi.CommonAbstracts
|
||||||
|
|
||||||
|
import dev.inmo.tgbotapi.types.User
|
||||||
|
|
||||||
|
interface FromUser {
|
||||||
|
val user: User
|
||||||
|
}
|
@ -1,14 +1,17 @@
|
|||||||
package dev.inmo.tgbotapi.CommonAbstracts
|
package dev.inmo.tgbotapi.CommonAbstracts
|
||||||
|
|
||||||
|
import dev.inmo.tgbotapi.types.MessageEntity.textsources.TextSourceSerializer
|
||||||
import dev.inmo.tgbotapi.types.MessageEntity.textsources.regular
|
import dev.inmo.tgbotapi.types.MessageEntity.textsources.regular
|
||||||
import dev.inmo.tgbotapi.types.MessageEntity.toTextParts
|
import dev.inmo.tgbotapi.types.MessageEntity.toTextParts
|
||||||
import dev.inmo.tgbotapi.types.captionLength
|
import dev.inmo.tgbotapi.types.captionLength
|
||||||
import dev.inmo.tgbotapi.types.textLength
|
import dev.inmo.tgbotapi.types.textLength
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
const val DirectInvocationOfTextSourceConstructor = "It is strongly not recommended to use constructors directly instead of factory methods"
|
const val DirectInvocationOfTextSourceConstructor = "It is strongly not recommended to use constructors directly instead of factory methods"
|
||||||
|
|
||||||
typealias TextSourcesList = List<TextSource>
|
typealias TextSourcesList = List<TextSource>
|
||||||
|
|
||||||
|
@Serializable(TextSourceSerializer::class)
|
||||||
interface TextSource {
|
interface TextSource {
|
||||||
val markdown: String
|
val markdown: String
|
||||||
val markdownV2: String
|
val markdownV2: String
|
||||||
@ -17,6 +20,10 @@ interface TextSource {
|
|||||||
|
|
||||||
val asText: String
|
val asText: String
|
||||||
get() = source
|
get() = source
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun serializer() = TextSourceSerializer
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("NOTHING_TO_INLINE")
|
@Suppress("NOTHING_TO_INLINE")
|
||||||
@ -28,8 +35,13 @@ inline operator fun TextSource.plus(text: String) = listOf(this, regular(text))
|
|||||||
@Suppress("NOTHING_TO_INLINE")
|
@Suppress("NOTHING_TO_INLINE")
|
||||||
inline operator fun List<TextSource>.plus(text: String) = this + regular(text)
|
inline operator fun List<TextSource>.plus(text: String) = this + regular(text)
|
||||||
|
|
||||||
|
@Serializable(TextSourceSerializer::class)
|
||||||
interface MultilevelTextSource : TextSource {
|
interface MultilevelTextSource : TextSource {
|
||||||
val subsources: List<TextSource>
|
val subsources: List<TextSource>
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun serializer() = TextSourceSerializer
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
data class TextPart(
|
data class TextPart(
|
||||||
|
@ -3,10 +3,13 @@ package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
|||||||
import dev.inmo.tgbotapi.CommonAbstracts.*
|
import dev.inmo.tgbotapi.CommonAbstracts.*
|
||||||
import dev.inmo.tgbotapi.utils.RiskFeature
|
import dev.inmo.tgbotapi.utils.RiskFeature
|
||||||
import dev.inmo.tgbotapi.utils.internal.*
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import kotlinx.serialization.SerialName
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see bold
|
* @see bold
|
||||||
*/
|
*/
|
||||||
|
@Serializable
|
||||||
data class BoldTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
data class BoldTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
||||||
override val source: String,
|
override val source: String,
|
||||||
override val subsources: List<TextSource>
|
override val subsources: List<TextSource>
|
||||||
|
@ -4,12 +4,14 @@ import dev.inmo.tgbotapi.CommonAbstracts.DirectInvocationOfTextSourceConstructor
|
|||||||
import dev.inmo.tgbotapi.CommonAbstracts.TextSource
|
import dev.inmo.tgbotapi.CommonAbstracts.TextSource
|
||||||
import dev.inmo.tgbotapi.utils.RiskFeature
|
import dev.inmo.tgbotapi.utils.RiskFeature
|
||||||
import dev.inmo.tgbotapi.utils.internal.*
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
private val commandRegex = Regex("[/!][^@\\s]*")
|
private val commandRegex = Regex("[/!][^@\\s]*")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see botCommand
|
* @see botCommand
|
||||||
*/
|
*/
|
||||||
|
@Serializable
|
||||||
data class BotCommandTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
data class BotCommandTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
||||||
override val source: String
|
override val source: String
|
||||||
) : TextSource {
|
) : TextSource {
|
||||||
|
@ -3,10 +3,12 @@ package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
|||||||
import dev.inmo.tgbotapi.CommonAbstracts.*
|
import dev.inmo.tgbotapi.CommonAbstracts.*
|
||||||
import dev.inmo.tgbotapi.utils.RiskFeature
|
import dev.inmo.tgbotapi.utils.RiskFeature
|
||||||
import dev.inmo.tgbotapi.utils.internal.*
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see cashTag
|
* @see cashTag
|
||||||
*/
|
*/
|
||||||
|
@Serializable
|
||||||
data class CashTagTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
data class CashTagTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
||||||
override val source: String,
|
override val source: String,
|
||||||
override val subsources: List<TextSource>
|
override val subsources: List<TextSource>
|
||||||
|
@ -4,10 +4,12 @@ import dev.inmo.tgbotapi.CommonAbstracts.DirectInvocationOfTextSourceConstructor
|
|||||||
import dev.inmo.tgbotapi.CommonAbstracts.TextSource
|
import dev.inmo.tgbotapi.CommonAbstracts.TextSource
|
||||||
import dev.inmo.tgbotapi.utils.RiskFeature
|
import dev.inmo.tgbotapi.utils.RiskFeature
|
||||||
import dev.inmo.tgbotapi.utils.internal.*
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see code
|
* @see code
|
||||||
*/
|
*/
|
||||||
|
@Serializable
|
||||||
data class CodeTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
data class CodeTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
||||||
override val source: String
|
override val source: String
|
||||||
) : TextSource {
|
) : TextSource {
|
||||||
|
@ -3,10 +3,12 @@ package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
|||||||
import dev.inmo.tgbotapi.CommonAbstracts.*
|
import dev.inmo.tgbotapi.CommonAbstracts.*
|
||||||
import dev.inmo.tgbotapi.utils.RiskFeature
|
import dev.inmo.tgbotapi.utils.RiskFeature
|
||||||
import dev.inmo.tgbotapi.utils.internal.*
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see email
|
* @see email
|
||||||
*/
|
*/
|
||||||
|
@Serializable
|
||||||
data class EMailTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
data class EMailTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
||||||
override val source: String,
|
override val source: String,
|
||||||
override val subsources: List<TextSource>
|
override val subsources: List<TextSource>
|
||||||
|
@ -3,10 +3,12 @@ package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
|||||||
import dev.inmo.tgbotapi.CommonAbstracts.*
|
import dev.inmo.tgbotapi.CommonAbstracts.*
|
||||||
import dev.inmo.tgbotapi.utils.RiskFeature
|
import dev.inmo.tgbotapi.utils.RiskFeature
|
||||||
import dev.inmo.tgbotapi.utils.internal.*
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see hashtag
|
* @see hashtag
|
||||||
*/
|
*/
|
||||||
|
@Serializable
|
||||||
data class HashTagTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
data class HashTagTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
||||||
override val source: String,
|
override val source: String,
|
||||||
override val subsources: List<TextSource>
|
override val subsources: List<TextSource>
|
||||||
|
@ -3,10 +3,12 @@ package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
|||||||
import dev.inmo.tgbotapi.CommonAbstracts.*
|
import dev.inmo.tgbotapi.CommonAbstracts.*
|
||||||
import dev.inmo.tgbotapi.utils.RiskFeature
|
import dev.inmo.tgbotapi.utils.RiskFeature
|
||||||
import dev.inmo.tgbotapi.utils.internal.*
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see italic
|
* @see italic
|
||||||
*/
|
*/
|
||||||
|
@Serializable
|
||||||
data class ItalicTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
data class ItalicTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
||||||
override val source: String,
|
override val source: String,
|
||||||
override val subsources: List<TextSource>
|
override val subsources: List<TextSource>
|
||||||
|
@ -3,6 +3,7 @@ package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
|||||||
import dev.inmo.tgbotapi.CommonAbstracts.*
|
import dev.inmo.tgbotapi.CommonAbstracts.*
|
||||||
import dev.inmo.tgbotapi.utils.RiskFeature
|
import dev.inmo.tgbotapi.utils.RiskFeature
|
||||||
import dev.inmo.tgbotapi.utils.internal.*
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
private val String.withoutCommercialAt
|
private val String.withoutCommercialAt
|
||||||
get() = if (startsWith("@")) {
|
get() = if (startsWith("@")) {
|
||||||
@ -14,6 +15,7 @@ private val String.withoutCommercialAt
|
|||||||
/**
|
/**
|
||||||
* @see mention
|
* @see mention
|
||||||
*/
|
*/
|
||||||
|
@Serializable
|
||||||
data class MentionTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
data class MentionTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
||||||
override val source: String,
|
override val source: String,
|
||||||
override val subsources: List<TextSource>
|
override val subsources: List<TextSource>
|
||||||
|
@ -3,10 +3,12 @@ package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
|||||||
import dev.inmo.tgbotapi.CommonAbstracts.*
|
import dev.inmo.tgbotapi.CommonAbstracts.*
|
||||||
import dev.inmo.tgbotapi.utils.RiskFeature
|
import dev.inmo.tgbotapi.utils.RiskFeature
|
||||||
import dev.inmo.tgbotapi.utils.internal.*
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see phone
|
* @see phone
|
||||||
*/
|
*/
|
||||||
|
@Serializable
|
||||||
data class PhoneNumberTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
data class PhoneNumberTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
||||||
override val source: String,
|
override val source: String,
|
||||||
override val subsources: List<TextSource>
|
override val subsources: List<TextSource>
|
||||||
|
@ -4,10 +4,12 @@ import dev.inmo.tgbotapi.CommonAbstracts.DirectInvocationOfTextSourceConstructor
|
|||||||
import dev.inmo.tgbotapi.CommonAbstracts.TextSource
|
import dev.inmo.tgbotapi.CommonAbstracts.TextSource
|
||||||
import dev.inmo.tgbotapi.utils.RiskFeature
|
import dev.inmo.tgbotapi.utils.RiskFeature
|
||||||
import dev.inmo.tgbotapi.utils.internal.*
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see pre
|
* @see pre
|
||||||
*/
|
*/
|
||||||
|
@Serializable
|
||||||
data class PreTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
data class PreTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
||||||
override val source: String,
|
override val source: String,
|
||||||
val language: String? = null
|
val language: String? = null
|
||||||
|
@ -4,10 +4,12 @@ import dev.inmo.tgbotapi.CommonAbstracts.DirectInvocationOfTextSourceConstructor
|
|||||||
import dev.inmo.tgbotapi.CommonAbstracts.TextSource
|
import dev.inmo.tgbotapi.CommonAbstracts.TextSource
|
||||||
import dev.inmo.tgbotapi.utils.RiskFeature
|
import dev.inmo.tgbotapi.utils.RiskFeature
|
||||||
import dev.inmo.tgbotapi.utils.internal.*
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see regular
|
* @see regular
|
||||||
*/
|
*/
|
||||||
|
@Serializable
|
||||||
data class RegularTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
data class RegularTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
||||||
override val source: String
|
override val source: String
|
||||||
) : TextSource {
|
) : TextSource {
|
||||||
|
@ -3,10 +3,12 @@ package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
|||||||
import dev.inmo.tgbotapi.CommonAbstracts.*
|
import dev.inmo.tgbotapi.CommonAbstracts.*
|
||||||
import dev.inmo.tgbotapi.utils.RiskFeature
|
import dev.inmo.tgbotapi.utils.RiskFeature
|
||||||
import dev.inmo.tgbotapi.utils.internal.*
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see strikethrough
|
* @see strikethrough
|
||||||
*/
|
*/
|
||||||
|
@Serializable
|
||||||
data class StrikethroughTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
data class StrikethroughTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
||||||
override val source: String,
|
override val source: String,
|
||||||
override val subsources: List<TextSource>
|
override val subsources: List<TextSource>
|
||||||
|
@ -4,10 +4,12 @@ import dev.inmo.tgbotapi.CommonAbstracts.DirectInvocationOfTextSourceConstructor
|
|||||||
import dev.inmo.tgbotapi.CommonAbstracts.TextSource
|
import dev.inmo.tgbotapi.CommonAbstracts.TextSource
|
||||||
import dev.inmo.tgbotapi.utils.RiskFeature
|
import dev.inmo.tgbotapi.utils.RiskFeature
|
||||||
import dev.inmo.tgbotapi.utils.internal.*
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see link
|
* @see link
|
||||||
*/
|
*/
|
||||||
|
@Serializable
|
||||||
data class TextLinkTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
data class TextLinkTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
||||||
override val source: String,
|
override val source: String,
|
||||||
val url: String
|
val url: String
|
||||||
|
@ -4,10 +4,12 @@ import dev.inmo.tgbotapi.CommonAbstracts.*
|
|||||||
import dev.inmo.tgbotapi.types.*
|
import dev.inmo.tgbotapi.types.*
|
||||||
import dev.inmo.tgbotapi.utils.RiskFeature
|
import dev.inmo.tgbotapi.utils.RiskFeature
|
||||||
import dev.inmo.tgbotapi.utils.internal.*
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see mention
|
* @see mention
|
||||||
*/
|
*/
|
||||||
|
@Serializable
|
||||||
data class TextMentionTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
data class TextMentionTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
||||||
override val source: String,
|
override val source: String,
|
||||||
val user: User,
|
val user: User,
|
||||||
|
@ -0,0 +1,43 @@
|
|||||||
|
package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
||||||
|
|
||||||
|
import dev.inmo.micro_utils.serialization.typed_serializer.TypedSerializer
|
||||||
|
import dev.inmo.tgbotapi.CommonAbstracts.TextSource
|
||||||
|
import dev.inmo.tgbotapi.CommonAbstracts.justTextSources
|
||||||
|
import dev.inmo.tgbotapi.types.MessageEntity.*
|
||||||
|
import dev.inmo.tgbotapi.types.MessageEntity.RawMessageEntities
|
||||||
|
import dev.inmo.tgbotapi.utils.RiskFeature
|
||||||
|
import kotlinx.serialization.*
|
||||||
|
import kotlinx.serialization.builtins.serializer
|
||||||
|
import kotlinx.serialization.descriptors.*
|
||||||
|
import kotlinx.serialization.encoding.*
|
||||||
|
|
||||||
|
private val baseSerializers: Map<String, KSerializer<out TextSource>> = mapOf(
|
||||||
|
"regular" to RegularTextSource.serializer(),
|
||||||
|
"text_link" to TextLinkTextSource.serializer(),
|
||||||
|
"code" to CodeTextSource.serializer(),
|
||||||
|
"url" to URLTextSource.serializer(),
|
||||||
|
"pre" to PreTextSource.serializer(),
|
||||||
|
"bot_command" to BotCommandTextSource.serializer(),
|
||||||
|
"strikethrough" to StrikethroughTextSource.serializer(),
|
||||||
|
"italic" to ItalicTextSource.serializer(),
|
||||||
|
"bold" to BoldTextSource.serializer(),
|
||||||
|
"email" to EMailTextSource.serializer(),
|
||||||
|
"underline" to UnderlineTextSource.serializer(),
|
||||||
|
"mention" to MentionTextSource.serializer(),
|
||||||
|
"phone_number" to PhoneNumberTextSource.serializer(),
|
||||||
|
"text_mention" to TextMentionTextSource.serializer(),
|
||||||
|
"hashtag" to HashTagTextSource.serializer(),
|
||||||
|
"cashtag" to CashTagTextSource.serializer(),
|
||||||
|
)
|
||||||
|
|
||||||
|
object TextSourceSerializer : TypedSerializer<TextSource>(TextSource::class, baseSerializers) {
|
||||||
|
override fun <T: TextSource> include(type: String, serializer: KSerializer<T>) {
|
||||||
|
require(type !in baseSerializers.keys)
|
||||||
|
super.include(type, serializer)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun exclude(type: String) {
|
||||||
|
require(type !in baseSerializers.keys)
|
||||||
|
super.exclude(type)
|
||||||
|
}
|
||||||
|
}
|
@ -4,10 +4,12 @@ import dev.inmo.tgbotapi.CommonAbstracts.DirectInvocationOfTextSourceConstructor
|
|||||||
import dev.inmo.tgbotapi.CommonAbstracts.TextSource
|
import dev.inmo.tgbotapi.CommonAbstracts.TextSource
|
||||||
import dev.inmo.tgbotapi.utils.RiskFeature
|
import dev.inmo.tgbotapi.utils.RiskFeature
|
||||||
import dev.inmo.tgbotapi.utils.internal.*
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see link
|
* @see link
|
||||||
*/
|
*/
|
||||||
|
@Serializable
|
||||||
data class URLTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
data class URLTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
||||||
override val source: String
|
override val source: String
|
||||||
) : TextSource {
|
) : TextSource {
|
||||||
|
@ -3,10 +3,12 @@ package dev.inmo.tgbotapi.types.MessageEntity.textsources
|
|||||||
import dev.inmo.tgbotapi.CommonAbstracts.*
|
import dev.inmo.tgbotapi.CommonAbstracts.*
|
||||||
import dev.inmo.tgbotapi.utils.RiskFeature
|
import dev.inmo.tgbotapi.utils.RiskFeature
|
||||||
import dev.inmo.tgbotapi.utils.internal.*
|
import dev.inmo.tgbotapi.utils.internal.*
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see underline
|
* @see underline
|
||||||
*/
|
*/
|
||||||
|
@Serializable
|
||||||
data class UnderlineTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
data class UnderlineTextSource @RiskFeature(DirectInvocationOfTextSourceConstructor) constructor (
|
||||||
override val source: String,
|
override val source: String,
|
||||||
override val subsources: List<TextSource>
|
override val subsources: List<TextSource>
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
package dev.inmo.tgbotapi.types.message.abstracts
|
package dev.inmo.tgbotapi.types.message.abstracts
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.types.User
|
import dev.inmo.tgbotapi.CommonAbstracts.FromUser
|
||||||
|
|
||||||
interface FromUserMessage {
|
interface FromUserMessage : FromUser, Message
|
||||||
val user: User
|
|
||||||
}
|
|
||||||
|
@ -0,0 +1,40 @@
|
|||||||
|
package dev.inmo.tgbotapi.types
|
||||||
|
|
||||||
|
import dev.inmo.tgbotapi.CommonAbstracts.TextSource
|
||||||
|
import dev.inmo.tgbotapi.CommonAbstracts.makeString
|
||||||
|
import dev.inmo.tgbotapi.TestsJsonFormat
|
||||||
|
import dev.inmo.tgbotapi.extensions.utils.formatting.*
|
||||||
|
import dev.inmo.tgbotapi.types.MessageEntity.textsources.TextSourceSerializer
|
||||||
|
import kotlinx.serialization.PolymorphicSerializer
|
||||||
|
import kotlinx.serialization.builtins.ListSerializer
|
||||||
|
import kotlinx.serialization.encodeToString
|
||||||
|
import kotlin.test.Test
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
|
class TextSourcesTests {
|
||||||
|
@Test
|
||||||
|
fun testThatTextSourcesSerializedCorrectly() {
|
||||||
|
val testList = buildEntities {
|
||||||
|
bold(
|
||||||
|
buildEntities {
|
||||||
|
italic("It")
|
||||||
|
regular(" ")
|
||||||
|
link("is example", "https://is.example")
|
||||||
|
}
|
||||||
|
)
|
||||||
|
regular(" ")
|
||||||
|
underline("of")
|
||||||
|
regular(" ")
|
||||||
|
strikethrough("complex")
|
||||||
|
regular(" ")
|
||||||
|
pre("text", "kotlin")
|
||||||
|
}
|
||||||
|
val serialized = TestsJsonFormat.encodeToString(ListSerializer(TextSource.serializer()), testList)
|
||||||
|
val deserialized = TestsJsonFormat.decodeFromString(
|
||||||
|
ListSerializer(TextSource.serializer()),
|
||||||
|
serialized
|
||||||
|
)
|
||||||
|
assertEquals(testList, deserialized)
|
||||||
|
assertEquals(testList.makeString(), deserialized.makeString())
|
||||||
|
}
|
||||||
|
}
|
@ -513,6 +513,10 @@ inline fun Message.asPossiblySentViaBotCommonMessage(): PossiblySentViaBotCommon
|
|||||||
@PreviewFeature
|
@PreviewFeature
|
||||||
inline fun Message.requirePossiblySentViaBotCommonMessage(): PossiblySentViaBotCommonMessage<MessageContent> = this as PossiblySentViaBotCommonMessage<MessageContent>
|
inline fun Message.requirePossiblySentViaBotCommonMessage(): PossiblySentViaBotCommonMessage<MessageContent> = this as PossiblySentViaBotCommonMessage<MessageContent>
|
||||||
@PreviewFeature
|
@PreviewFeature
|
||||||
|
inline fun Message.asFromUserMessage(): FromUserMessage? = this as? FromUserMessage
|
||||||
|
@PreviewFeature
|
||||||
|
inline fun Message.requireFromUserMessage(): FromUserMessage = this as FromUserMessage
|
||||||
|
@PreviewFeature
|
||||||
inline fun BotAction.asFindLocationAction(): FindLocationAction? = this as? FindLocationAction
|
inline fun BotAction.asFindLocationAction(): FindLocationAction? = this as? FindLocationAction
|
||||||
@PreviewFeature
|
@PreviewFeature
|
||||||
inline fun BotAction.requireFindLocationAction(): FindLocationAction = this as FindLocationAction
|
inline fun BotAction.requireFindLocationAction(): FindLocationAction = this as FindLocationAction
|
||||||
|
@ -18,8 +18,11 @@ fun List<TextSource>.parseCommandsWithParams(
|
|||||||
var currentBotCommandSource: BotCommandTextSource? = null
|
var currentBotCommandSource: BotCommandTextSource? = null
|
||||||
var currentArgs = ""
|
var currentArgs = ""
|
||||||
fun includeCurrent() = currentBotCommandSource ?.let {
|
fun includeCurrent() = currentBotCommandSource ?.let {
|
||||||
result[it.command] = currentArgs.split(argsSeparator).toTypedArray()
|
currentArgs = currentArgs.trim()
|
||||||
currentArgs = ""
|
if (currentArgs.isNotEmpty()) {
|
||||||
|
result[it.command] = currentArgs.split(argsSeparator).toTypedArray()
|
||||||
|
currentArgs = ""
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for (textSource in this) {
|
for (textSource in this) {
|
||||||
if (textSource is BotCommandTextSource) {
|
if (textSource is BotCommandTextSource) {
|
||||||
|
Loading…
Reference in New Issue
Block a user