1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2025-11-20 22:35:46 +00:00

Compare commits

..

11 Commits

462 changed files with 702 additions and 638 deletions

View File

@@ -1,5 +1,43 @@
# TelegramBotAPI changelog # TelegramBotAPI changelog
## 0.20.0 MPP Migration
* Time library change: `joda-time` -> `com.soywiz.korlibs.klock:klock`
* `Currencied` now using as `currency` value with type `String`
* For `Java` there is `Currencied#javaCurrency` extension function, which will give an old currency work way
* `User` now have no field `userLocale`
* For `Java` there is `User#javaLocale` extension function, which will give an old locale work way
## 0.19.0 ImplicitReflection removing
* Total rework of serialization for requests. Now all `SimpleRequest` children have:
* `requestSerializer` - field, which must provide serializer of current type
* `resultDeserializer` - field, which must provide opportunity to deserializer result. Previously it was a function
* Removed deprecations:
* `com.github.insanusmokrassar.TelegramBotAPI.utils.extensions.WebhookPrivateKeyConfig`
* `com.github.insanusmokrassar.TelegramBotAPI.utils.extensions.UpdatesFilter`
* `com.github.insanusmokrassar.TelegramBotAPI.utils.extensions.createSimpleUpdateFilter`
* `com.github.insanusmokrassar.TelegramBotAPI.utils.createMarkdownText`
* `com.github.insanusmokrassar.TelegramBotAPI.utils.toMarkdownCaption`
* `com.github.insanusmokrassar.TelegramBotAPI.utils.toMarkdownText`
* `com.github.insanusmokrassar.TelegramBotAPI.updateshandlers.KtorUpdatesPoller`
* `com.github.insanusmokrassar.TelegramBotAPI.types.message.content.abstracts.CaptionedMediaContent`
* `com.github.insanusmokrassar.TelegramBotAPI.types.message.CommonForwardedMessage`
* `com.github.insanusmokrassar.TelegramBotAPI.types.InputMedia.CaptionedInputMedia`
* `com.github.insanusmokrassar.TelegramBotAPI.types.games.Game#text`
* `com.github.insanusmokrassar.TelegramBotAPI.types.games.Game#textEntities`
* `com.github.insanusmokrassar.TelegramBotAPI.types.files.PathedFileKt.makeFileUrl`
* `com.github.insanusmokrassar.TelegramBotAPI.types.files.PathedFileKt.downloadingFilesBaseUrl`
* `com.github.insanusmokrassar.TelegramBotAPI.requests.send.media.base.Data`
* `com.github.insanusmokrassar.TelegramBotAPI.CommonAbstracts.types.ByInlineMessageId`
* `com.github.insanusmokrassar.TelegramBotAPI.CommonAbstracts.types.ByMessageId`
* `com.github.insanusmokrassar.TelegramBotAPI.bot.RequestException`
* `com.github.insanusmokrassar.TelegramBotAPI.bot.exceptions.ReplyMessageNotFound`
* `com.github.insanusmokrassar.TelegramBotAPI.bot.BaseRequestsExecutor#baseUrl`
* `com.github.insanusmokrassar.TelegramBotAPI.bot.BaseRequestsExecutor#constructor(token, hostUrl)`
* `com.github.insanusmokrassar.TelegramBotAPI.bot.Ktor.KtorRequestsExecutor#constructor(token, client, hostUrl, callsFactories, excludeDefaultFactories, requestsLimiter, jsonFormatter)`
* `com.github.insanusmokrassar.TelegramBotAPI.bot.Ktor.KtorRequestsExecutor#constructor(token, engine, hostUrl)`
## 0.18.0 Raws cleaning ## 0.18.0 Raws cleaning
* Made internal and not available outside of library: * Made internal and not available outside of library:

View File

@@ -1,6 +1,3 @@
project.version = "0.18.1"
project.group = "com.github.insanusmokrassar"
buildscript { buildscript {
repositories { repositories {
mavenLocal() mavenLocal()
@@ -15,9 +12,13 @@ buildscript {
} }
} }
apply plugin: 'java-library' plugins {
apply plugin: 'kotlin' id "org.jetbrains.kotlin.multiplatform" version "$kotlin_version"
apply plugin: 'kotlinx-serialization' id "org.jetbrains.kotlin.plugin.serialization" version "$kotlin_version"
}
project.version = "0.19.0-kmpp-migration"
project.group = "com.github.insanusmokrassar"
apply from: "publish.gradle" apply from: "publish.gradle"
@@ -28,23 +29,49 @@ repositories {
maven { url "https://kotlin.bintray.com/kotlinx" } maven { url "https://kotlin.bintray.com/kotlinx" }
} }
kotlin {
jvm()
// js()
sourceSets {
commonMain {
dependencies { dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation kotlin('stdlib')
api "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines_version" api "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines_version"
api "org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:$kotlin_serialisation_runtime_version"
api "com.soywiz.korlibs.klock:klock:$klock_version"
api "io.ktor:ktor-client-core:$ktor_version"
}
}
commonTest {
dependencies {
implementation kotlin('test-common')
implementation kotlin('test-annotations-common')
}
}
jvmMain {
dependencies {
api "org.jetbrains.kotlinx:kotlinx-serialization-runtime:$kotlin_serialisation_runtime_version" api "org.jetbrains.kotlinx:kotlinx-serialization-runtime:$kotlin_serialisation_runtime_version"
api "joda-time:joda-time:$joda_time_version"
api "io.ktor:ktor-client:$ktor_version" api "io.ktor:ktor-client:$ktor_version"
api "io.ktor:ktor-client-cio:$ktor_version"
api "io.ktor:ktor-server:$ktor_version" api "io.ktor:ktor-server:$ktor_version"
api "io.ktor:ktor-server-host-common:$ktor_version" api "io.ktor:ktor-server-host-common:$ktor_version"
api "io.ktor:ktor-client-cio:$ktor_version"
testImplementation "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version" }
}
jvmTest {
dependencies {
implementation kotlin('test-junit')
}
} }
compileKotlin { // jsMain {
kotlinOptions { // dependencies {
freeCompilerArgs = [ disableImplicitReflectionSerializerAnnotation ] // api "org.jetbrains.kotlinx:kotlinx-serialization-runtime-js:$kotlin_serialisation_runtime_version"
// }
// }
} }
} }

View File

@@ -2,12 +2,10 @@ kotlin.code.style=official
kotlin_version=1.3.61 kotlin_version=1.3.61
kotlin_coroutines_version=1.3.2 kotlin_coroutines_version=1.3.2
kotlin_serialisation_runtime_version=0.14.0 kotlin_serialisation_runtime_version=0.14.0
joda_time_version=2.10.5 klock_version=1.8.0
ktor_version=1.2.6 ktor_version=1.2.6
gradle_bintray_plugin_version=1.8.4 gradle_bintray_plugin_version=1.8.4
project_public_name=Telegram Bot API project_public_name=Telegram Bot API
project_public_description=Library for Object-Oriented and type-safe work with Telegram Bot API project_public_description=Library for Object-Oriented and type-safe work with Telegram Bot API
disableImplicitReflectionSerializerAnnotation=-Xexperimental=kotlinx.serialization.ImplicitReflectionSerializer

View File

@@ -1,55 +1,51 @@
apply plugin: 'maven-publish' apply plugin: 'maven-publish'
apply plugin: 'signing' apply plugin: 'signing'
task sourcesJar(type: Jar) { task javadocsJar(type: Jar) {
from sourceSets.main.allSource
classifier = 'sources'
}
task javadocJar(type: Jar) {
from javadoc
classifier = 'javadoc' classifier = 'javadoc'
} }
publishing { afterEvaluate {
publications { project.publishing.publications.all {
maven(MavenPublication) { // rename artifacts
from components.java
groupId "${project.group}" groupId "${project.group}"
artifactId "${project.name}" if (it.name.contains('kotlinMultiplatform')) {
version "${project.version}" artifactId = "${project.name}"
} else {
artifactId = "${project.name}-$name"
}
}
}
artifact sourcesJar publishing {
artifact javadocJar publications.all {
artifact javadocsJar
pom.withXml { pom.withXml {
asNode().children().last() + { asNode().children().last() + {
resolveStrategy = Closure.DELEGATE_FIRST resolveStrategy = Closure.DELEGATE_FIRST
name "${project_public_name}"
description "${project_public_description}" description "Library for Object-Oriented and type-safe work with Telegram Bot API"
url "https://insanusmokrassar.github.io/${project.name}" name "Telegram Bot API"
url "https://insanusmokrassar.github.io/TelegramBotAPI"
scm { scm {
connection "scm:git:git://github.com/insanusmokrassar/${project.name}.git" developerConnection "scm:git:[fetch=]https://github.com/insanusmokrassar/TelegramBotAPI.git[push=]https://github.com/insanusmokrassar/TelegramBotAPI.git"
developerConnection "scm:git:[fetch=]https://github.com/insanusmokrassar/${project.name}.git[push=]ssh:git@github.com:insanusmokrassar/${project.name}.git" url "https://github.com/insanusmokrassar/TelegramBotAPI.git"
url "https://github.com/insanusmokrassar/${project.name}"
} }
developers { developers {
developer { developer {
id "InsanusMokrassar" id "InsanusMokrassar"
name "Ovsyannikov Alexey" name "Ovsiannikov Aleksei"
email "ovsyannikov.alexey95@gmail.com" email "ovsyannikov.alexey95@gmail.com"
} }
} }
licenses { licenses {
license { license {
name 'The Apache Software License, Version 2.0' name "Apache Software License 2.0"
url 'https://github.com/InsanusMokrassar/TelegramBotAPI/blob/master/LICENSE' url "https://github.com/InsanusMokrassar/TelegramBotAPI/blob/master/LICENSE"
distribution 'repo'
}
} }
} }
} }
@@ -59,5 +55,5 @@ publishing {
signing { signing {
useGpgCmd() useGpgCmd()
sign publishing.publications.maven sign(publishing.publications)
} }

View File

@@ -0,0 +1 @@
{"bintrayConfig":{"repo":"StandardRepository","packageName":"${project.name}","packageVcs":"https://github.com/InsanusMokrassar/TelegramBotAPI"},"licenses":[{"id":"Apache-2.0","title":"Apache Software License 2.0","url":"https://github.com/InsanusMokrassar/TelegramBotAPI/blob/master/LICENSE"}],"mavenConfig":{"name":"Telegram Bot API","description":"Library for Object-Oriented and type-safe work with Telegram Bot API","url":"https://insanusmokrassar.github.io/TelegramBotAPI","vcsUrl":"https://github.com/insanusmokrassar/TelegramBotAPI.git","developers":[{"id":"InsanusMokrassar","name":"Ovsiannikov Aleksei","eMail":"ovsyannikov.alexey95@gmail.com"}]}}

View File

@@ -1,33 +1,27 @@
apply plugin: 'com.jfrog.bintray' apply plugin: 'com.jfrog.bintray'
ext { apply from: "maven.publish.gradle"
projectBintrayDir = "${project.group}/".replace(".", "/") + "${project.name}/${project.version}"
}
bintray { bintray {
user = project.hasProperty('BINTRAY_USER') ? project.property('BINTRAY_USER') : System.getenv('BINTRAY_USER') user = project.hasProperty('BINTRAY_USER') ? project.property('BINTRAY_USER') : System.getenv('BINTRAY_USER')
key = project.hasProperty('BINTRAY_KEY') ? project.property('BINTRAY_KEY') : System.getenv('BINTRAY_KEY') key = project.hasProperty('BINTRAY_KEY') ? project.property('BINTRAY_KEY') : System.getenv('BINTRAY_KEY')
publications = ["maven"]
filesSpec {
into "$projectBintrayDir"
from("build/libs") {
include "**/*.asc"
}
from("build/publications/maven") {
rename 'pom-default.xml(.*)', "${project.name}-${project.version}.pom\$1"
}
}
pkg { pkg {
repo = 'StandardRepository' repo = "StandardRepository"
name = "${project.name}" name = "${project.name}"
vcsUrl = "https://github.com/InsanusMokrassar/${project.name}" vcsUrl = "https://github.com/InsanusMokrassar/TelegramBotAPI"
licenses = ['Apache-2.0'] licenses = ["Apache-2.0"]
version { version {
name = "${project.version}" name = "${project.version}"
released = new Date() released = new Date()
vcsTag = name vcsTag = "${project.version}"
} }
} }
} }
apply from: "maven.publish.gradle" bintrayUpload.doFirst {
publications = publishing.publications.collect {
it.name
}
}
bintrayUpload.dependsOn publishToMavenLocal

View File

@@ -0,0 +1,7 @@
package com.github.insanusmokrassar.TelegramBotAPI.bot
import com.github.insanusmokrassar.TelegramBotAPI.utils.TelegramAPIUrlsKeeper
abstract class BaseRequestsExecutor(
protected val telegramAPIUrlsKeeper: TelegramAPIUrlsKeeper
) : RequestsExecutor

View File

@@ -12,8 +12,7 @@ import com.github.insanusmokrassar.TelegramBotAPI.types.RetryAfterError
import com.github.insanusmokrassar.TelegramBotAPI.utils.TelegramAPIUrlsKeeper import com.github.insanusmokrassar.TelegramBotAPI.utils.TelegramAPIUrlsKeeper
import io.ktor.client.HttpClient import io.ktor.client.HttpClient
import io.ktor.client.call.HttpClientCall import io.ktor.client.call.HttpClientCall
import io.ktor.client.engine.HttpClientEngine import io.ktor.client.call.receive
import io.ktor.util.cio.toByteArray
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
@@ -25,28 +24,6 @@ class KtorRequestsExecutor(
private val requestsLimiter: RequestLimiter = EmptyLimiter, private val requestsLimiter: RequestLimiter = EmptyLimiter,
private val jsonFormatter: Json = Json.nonstrict private val jsonFormatter: Json = Json.nonstrict
) : BaseRequestsExecutor(telegramAPIUrlsKeeper) { ) : BaseRequestsExecutor(telegramAPIUrlsKeeper) {
@Deprecated("Deprecated due to new TelegramAPIUrlKeeper API")
constructor(
token: String,
client: HttpClient = HttpClient(),
hostUrl: String = "https://api.telegram.org",
callsFactories: List<KtorCallFactory> = emptyList(),
excludeDefaultFactories: Boolean = false,
requestsLimiter: RequestLimiter = EmptyLimiter,
jsonFormatter: Json = Json.nonstrict
) : this(TelegramAPIUrlsKeeper(token, hostUrl), client, callsFactories, excludeDefaultFactories, requestsLimiter, jsonFormatter)
@Deprecated("Deprecated due to new TelegramAPIUrlKeeper API")
constructor(
token: String,
engine: HttpClientEngine? = null,
hostUrl: String = "https://api.telegram.org"
) : this(
TelegramAPIUrlsKeeper(token, hostUrl),
engine ?.let { HttpClient(engine) } ?: HttpClient()
)
private val callsFactories: List<KtorCallFactory> = callsFactories.run { private val callsFactories: List<KtorCallFactory> = callsFactories.run {
if (!excludeDefaultFactories) { if (!excludeDefaultFactories) {
asSequence().plus(SimpleRequestCallFactory()).plus(MultipartRequestCallFactory()).toList() asSequence().plus(SimpleRequestCallFactory()).plus(MultipartRequestCallFactory()).toList()
@@ -71,13 +48,11 @@ class KtorRequestsExecutor(
if (call == null) { if (call == null) {
throw IllegalArgumentException("Can't execute request: $request") throw IllegalArgumentException("Can't execute request: $request")
} }
val content = call.response.use { val content = call.response.receive<String>()
it.content.toByteArray().toString(Charsets.UTF_8)
}
val responseObject = jsonFormatter.parse(Response.serializer(), content) val responseObject = jsonFormatter.parse(Response.serializer(), content)
(responseObject.result ?.let { (responseObject.result ?.let {
jsonFormatter.fromJson(request.resultDeserializer(), it) jsonFormatter.fromJson(request.resultDeserializer, it)
} ?: responseObject.parameters ?.let { } ?: responseObject.parameters ?.let {
val error = it.error val error = it.error
if (error is RetryAfterError) { if (error is RetryAfterError) {

View File

@@ -5,10 +5,8 @@ import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.Request
import io.ktor.client.HttpClient import io.ktor.client.HttpClient
import io.ktor.client.call.HttpClientCall import io.ktor.client.call.HttpClientCall
import io.ktor.client.call.call import io.ktor.client.call.call
import io.ktor.client.request.accept import io.ktor.client.request.*
import io.ktor.client.request.url import io.ktor.http.*
import io.ktor.http.ContentType
import io.ktor.http.HttpMethod
abstract class AbstractRequestCallFactory : KtorCallFactory { abstract class AbstractRequestCallFactory : KtorCallFactory {
private val methodsCache: MutableMap<String, String> = mutableMapOf() private val methodsCache: MutableMap<String, String> = mutableMapOf()

View File

@@ -21,14 +21,15 @@ class MultipartRequestCallFactory : AbstractRequestCallFactory() {
val params = castedRequest.paramsJson.mapWithCommonValues() val params = castedRequest.paramsJson.mapWithCommonValues()
for ((key, value) in castedRequest.mediaMap + params) { for ((key, value) in castedRequest.mediaMap + params) {
when (value) { when (value) {
is MultipartFile -> append( is MultipartFile -> appendInput(
key, key,
value.file.asInput().readBytes(),
Headers.build { Headers.build {
append(HttpHeaders.ContentType, value.mimeType) append(HttpHeaders.ContentType, value.mimeType)
append(HttpHeaders.ContentDisposition, "filename=${value.fileId}") append(HttpHeaders.ContentDisposition, "filename=${value.fileId}")
} }
) ) {
value.file.asInput()
}
is FileId -> append(key, value.fileId) is FileId -> append(key, value.fileId)
else -> append(key, value.toString()) else -> append(key, value.toString())
} }

View File

@@ -12,12 +12,11 @@ class SimpleRequestCallFactory : AbstractRequestCallFactory() {
baseUrl: String, baseUrl: String,
request: Request<T> request: Request<T>
): Any? = (request as? SimpleRequest<T>) ?.let { _ -> ): Any? = (request as? SimpleRequest<T>) ?.let { _ ->
val content = request.toJsonWithoutNulls(SimpleRequestSerializer).toString() val content = request.json().toString()
TextContent( TextContent(
content, content,
ContentType.Application.Json ContentType.Application.Json
) )
} }
} }

View File

@@ -1,10 +1,11 @@
package com.github.insanusmokrassar.TelegramBotAPI.bot package com.github.insanusmokrassar.TelegramBotAPI.bot
import com.github.insanusmokrassar.TelegramBotAPI.bot.exceptions.RequestException
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.Request import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.Request
import kotlinx.io.core.Closeable import kotlinx.io.core.Closeable
interface RequestsExecutor : Closeable { interface RequestsExecutor : Closeable {
@Throws(RequestException::class) /**
* @throws com.github.insanusmokrassar.TelegramBotAPI.bot.exceptions.RequestException
*/
suspend fun <T : Any> execute(request: Request<T>): T suspend fun <T : Any> execute(request: Request<T>): T
} }

View File

@@ -1,7 +1,7 @@
package com.github.insanusmokrassar.TelegramBotAPI.bot.exceptions package com.github.insanusmokrassar.TelegramBotAPI.bot.exceptions
import com.github.insanusmokrassar.TelegramBotAPI.types.Response import com.github.insanusmokrassar.TelegramBotAPI.types.Response
import java.io.IOException import kotlinx.io.errors.IOException
fun newRequestException( fun newRequestException(
response: Response, response: Response,
@@ -20,7 +20,7 @@ sealed class RequestException constructor(
message: String? = null, message: String? = null,
cause: Throwable? = null cause: Throwable? = null
) : IOException( ) : IOException(
message, message ?: "Something went wrong",
cause cause
) )
@@ -32,9 +32,3 @@ class UnauthorizedException(response: Response, plainAnswer: String, message: St
class ReplyMessageNotFoundException(response: Response, plainAnswer: String, message: String?, cause: Throwable?) : class ReplyMessageNotFoundException(response: Response, plainAnswer: String, message: String?, cause: Throwable?) :
RequestException(response, plainAnswer, message, cause) RequestException(response, plainAnswer, message, cause)
@Deprecated(
"Replaced by ReplyMessageNotFoundException",
ReplaceWith("ReplyMessageNotFoundException", "com.github.insanusmokrassar.TelegramBotAPI.bot.exceptions.ReplyMessageNotFoundException")
)
typealias ReplyMessageNotFound = ReplyMessageNotFoundException

View File

@@ -1,9 +1,10 @@
package com.github.insanusmokrassar.TelegramBotAPI.bot.settings.limiters package com.github.insanusmokrassar.TelegramBotAPI.bot.settings.limiters
import com.soywiz.klock.DateTime
import kotlinx.coroutines.* import kotlinx.coroutines.*
import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.Channel
private fun now(): Long = System.currentTimeMillis() private fun now(): Long = DateTime.nowUnixLong()
class CommonLimiter( class CommonLimiter(
private val lockCount: Int = 10, private val lockCount: Int = 10,

View File

@@ -4,8 +4,8 @@ import kotlinx.coroutines.*
import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.Channel
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient import kotlinx.serialization.Transient
import java.util.concurrent.Executors
import kotlin.coroutines.* import kotlin.coroutines.*
import kotlin.math.pow
private sealed class RequestEvent private sealed class RequestEvent
private class AddRequest( private class AddRequest(
@@ -21,9 +21,7 @@ data class PowLimiter(
private val powK: Double = 0.0016 private val powK: Double = 0.0016
) : RequestLimiter { ) : RequestLimiter {
@Transient @Transient
private val scope = CoroutineScope( private val scope = CoroutineScope(Dispatchers.Default)
Executors.newFixedThreadPool(3).asCoroutineDispatcher()
)
@Transient @Transient
private val eventsChannel = Channel<RequestEvent>(Channel.UNLIMITED) private val eventsChannel = Channel<RequestEvent>(Channel.UNLIMITED)
@Transient @Transient
@@ -35,7 +33,7 @@ data class PowLimiter(
for (event in eventsChannel) { for (event in eventsChannel) {
when (event) { when (event) {
is AddRequest -> { is AddRequest -> {
val awaitTime = ((Math.pow(requestsInWork, powValue) * powK) * 1000L).toLong() val awaitTime = (((requestsInWork.pow(powValue) * powK) * 1000L).toLong())
requestsInWork++ requestsInWork++
event.continuation.resume( event.continuation.resume(

View File

@@ -15,5 +15,8 @@ data class DeleteMessage(
) : SimpleRequest<Boolean>, MessageAction { ) : SimpleRequest<Boolean>, MessageAction {
override fun method(): String = "deleteMessage" override fun method(): String = "deleteMessage"
override fun resultDeserializer(): KSerializer<Boolean> = BooleanSerializer override val resultDeserializer: DeserializationStrategy<Boolean>
get() = BooleanSerializer
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -24,5 +24,8 @@ data class ForwardMessage(
override fun method(): String = "forwardMessage" override fun method(): String = "forwardMessage"
override fun resultDeserializer(): DeserializationStrategy<Message> = TelegramBotAPIMessageDeserializationStrategy override val resultDeserializer: DeserializationStrategy<Message>
get() = TelegramBotAPIMessageDeserializationStrategy
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -2,11 +2,13 @@ package com.github.insanusmokrassar.TelegramBotAPI.requests
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.SimpleRequest import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.SimpleRequest
import com.github.insanusmokrassar.TelegramBotAPI.types.User import com.github.insanusmokrassar.TelegramBotAPI.types.User
import kotlinx.serialization.KSerializer import kotlinx.serialization.*
import kotlinx.serialization.Serializable
@Serializable @Serializable
class GetMe : SimpleRequest<User> { class GetMe : SimpleRequest<User> {
override fun method(): String = "getMe" override fun method(): String = "getMe"
override fun resultDeserializer(): KSerializer<User> = User.serializer() override val resultDeserializer: DeserializationStrategy<User>
get() = User.serializer()
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -5,10 +5,13 @@ import com.github.insanusmokrassar.TelegramBotAPI.types.ALL_UPDATES_LIST
import com.github.insanusmokrassar.TelegramBotAPI.types.UpdateIdentifier import com.github.insanusmokrassar.TelegramBotAPI.types.UpdateIdentifier
import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.Update import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.Update
import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.UpdateSerializerWithoutDeserialization import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.UpdateSerializerWithoutDeserialization
import kotlinx.serialization.KSerializer import kotlinx.serialization.*
import kotlinx.serialization.Serializable
import kotlinx.serialization.internal.ArrayListSerializer import kotlinx.serialization.internal.ArrayListSerializer
private val updatesListSerializer = ArrayListSerializer(
UpdateSerializerWithoutDeserialization
)
@Serializable @Serializable
data class GetUpdates( data class GetUpdates(
val offset: UpdateIdentifier? = null,// set `last update id + 1` to receive next part of updates val offset: UpdateIdentifier? = null,// set `last update id + 1` to receive next part of updates
@@ -18,7 +21,9 @@ data class GetUpdates(
): SimpleRequest<List<Update>> { ): SimpleRequest<List<Update>> {
override fun method(): String = "getUpdates" override fun method(): String = "getUpdates"
override fun resultDeserializer(): KSerializer<List<Update>> = ArrayListSerializer( override val resultDeserializer: DeserializationStrategy<List<Update>>
UpdateSerializerWithoutDeserialization get() = updatesListSerializer
)
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -18,5 +18,8 @@ data class StopPoll(
override val replyMarkup: InlineKeyboardMarkup? = null override val replyMarkup: InlineKeyboardMarkup? = null
) : MessageAction, SimpleRequest<Poll>, ReplyMarkup { ) : MessageAction, SimpleRequest<Poll>, ReplyMarkup {
override fun method(): String = "stopPoll" override fun method(): String = "stopPoll"
override fun resultDeserializer(): KSerializer<Poll> = Poll.serializer() override val resultDeserializer: DeserializationStrategy<Poll>
get() = Poll.serializer()
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -3,7 +3,6 @@ package com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts
import com.github.insanusmokrassar.TelegramBotAPI.utils.StorageFile import com.github.insanusmokrassar.TelegramBotAPI.utils.StorageFile
import kotlinx.serialization.* import kotlinx.serialization.*
import kotlinx.serialization.internal.StringDescriptor import kotlinx.serialization.internal.StringDescriptor
import java.io.File
@Serializable(InputFileSerializer::class) @Serializable(InputFileSerializer::class)
sealed class InputFile { sealed class InputFile {
@@ -40,7 +39,3 @@ data class MultipartFile (
) : InputFile() { ) : InputFile() {
override val fileId: String = file.generateCustomName() override val fileId: String = file.generateCustomName()
} }
fun File.toInputFile(): InputFile = MultipartFile(
StorageFile(this)
)

View File

@@ -0,0 +1,8 @@
package com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts
import kotlinx.serialization.*
interface Request<T: Any> {
fun method(): String
val resultDeserializer: DeserializationStrategy<T>
}

View File

@@ -0,0 +1,12 @@
package com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts
import com.github.insanusmokrassar.TelegramBotAPI.utils.toJsonWithoutNulls
import kotlinx.serialization.SerializationStrategy
import kotlinx.serialization.json.JsonObject
interface SimpleRequest<T: Any> : Request<T> {
val requestSerializer: SerializationStrategy<*>
}
@Suppress("UNCHECKED_CAST")
inline fun <T: Any, K: SimpleRequest<T>> K.json(): JsonObject = toJsonWithoutNulls(requestSerializer as SerializationStrategy<K>)

View File

@@ -20,7 +20,10 @@ data class AnswerCallbackQuery(
val cachedTimeSeconds: Int? = null val cachedTimeSeconds: Int? = null
) : SimpleRequest<Boolean> { ) : SimpleRequest<Boolean> {
override fun method(): String = "answerCallbackQuery" override fun method(): String = "answerCallbackQuery"
override fun resultDeserializer(): KSerializer<Boolean> = BooleanSerializer override val resultDeserializer: DeserializationStrategy<Boolean>
get() = BooleanSerializer
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }
fun CallbackQuery.createAnswer( fun CallbackQuery.createAnswer(

View File

@@ -28,7 +28,10 @@ data class AnswerInlineQuery(
val switchPmParameter: String? = null val switchPmParameter: String? = null
): SimpleRequest<Boolean> { ): SimpleRequest<Boolean> {
override fun method(): String = "answerInlineQuery" override fun method(): String = "answerInlineQuery"
override fun resultDeserializer(): KSerializer<Boolean> = BooleanSerializer override val resultDeserializer: DeserializationStrategy<Boolean>
get() = BooleanSerializer
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }
fun InlineQuery.createAnswer( fun InlineQuery.createAnswer(

View File

@@ -3,8 +3,7 @@ package com.github.insanusmokrassar.TelegramBotAPI.requests.answers.payments
import com.github.insanusmokrassar.TelegramBotAPI.requests.answers.payments.abstracts.AnswerPreCheckoutQuery import com.github.insanusmokrassar.TelegramBotAPI.requests.answers.payments.abstracts.AnswerPreCheckoutQuery
import com.github.insanusmokrassar.TelegramBotAPI.types.* import com.github.insanusmokrassar.TelegramBotAPI.types.*
import com.github.insanusmokrassar.TelegramBotAPI.types.payments.PreCheckoutQuery import com.github.insanusmokrassar.TelegramBotAPI.types.payments.PreCheckoutQuery
import kotlinx.serialization.SerialName import kotlinx.serialization.*
import kotlinx.serialization.Serializable
@Serializable @Serializable
data class AnswerPreCheckoutQueryOk( data class AnswerPreCheckoutQueryOk(
@@ -13,6 +12,8 @@ data class AnswerPreCheckoutQueryOk(
) : AnswerPreCheckoutQuery { ) : AnswerPreCheckoutQuery {
@SerialName(okField) @SerialName(okField)
override val isOk: Boolean = true override val isOk: Boolean = true
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }
@@ -25,6 +26,8 @@ data class AnswerPreCheckoutQueryError(
) : AnswerPreCheckoutQuery { ) : AnswerPreCheckoutQuery {
@SerialName(okField) @SerialName(okField)
override val isOk: Boolean = false override val isOk: Boolean = false
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }
fun PreCheckoutQuery.createAnswerOk(): AnswerPreCheckoutQueryOk = AnswerPreCheckoutQueryOk( fun PreCheckoutQuery.createAnswerOk(): AnswerPreCheckoutQueryOk = AnswerPreCheckoutQueryOk(

View File

@@ -17,6 +17,8 @@ data class AnswerShippingQueryOk(
) : AnswerShippingQuery { ) : AnswerShippingQuery {
@SerialName(okField) @SerialName(okField)
override val isOk: Boolean = true override val isOk: Boolean = true
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }
object ShippingOptionsSerializer : KSerializer<List<ShippingOption>> by ArrayListSerializer( object ShippingOptionsSerializer : KSerializer<List<ShippingOption>> by ArrayListSerializer(
@@ -32,6 +34,8 @@ data class AnswerShippingQueryError(
) : AnswerShippingQuery { ) : AnswerShippingQuery {
@SerialName(okField) @SerialName(okField)
override val isOk: Boolean = false override val isOk: Boolean = false
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }
fun ShippingQuery.createAnswerOk( fun ShippingQuery.createAnswerOk(

View File

@@ -3,11 +3,13 @@ package com.github.insanusmokrassar.TelegramBotAPI.requests.answers.payments.abs
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.SimpleRequest import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.SimpleRequest
import com.github.insanusmokrassar.TelegramBotAPI.types.PreCheckoutQueryId import com.github.insanusmokrassar.TelegramBotAPI.types.PreCheckoutQueryId
import kotlinx.serialization.KSerializer import kotlinx.serialization.KSerializer
import kotlinx.serialization.internal.BooleanSerializer
import kotlinx.serialization.serializer import kotlinx.serialization.serializer
interface AnswerPreCheckoutQuery : SimpleRequest<Boolean> { interface AnswerPreCheckoutQuery : SimpleRequest<Boolean> {
override fun method(): String = "answerPreCheckoutQuery" override fun method(): String = "answerPreCheckoutQuery"
override fun resultDeserializer(): KSerializer<Boolean> = Boolean.serializer() override val resultDeserializer: KSerializer<Boolean>
get() = BooleanSerializer
val preCheckoutQueryId: PreCheckoutQueryId val preCheckoutQueryId: PreCheckoutQueryId
val isOk: Boolean val isOk: Boolean

View File

@@ -2,12 +2,13 @@ package com.github.insanusmokrassar.TelegramBotAPI.requests.answers.payments.abs
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.SimpleRequest import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.SimpleRequest
import com.github.insanusmokrassar.TelegramBotAPI.types.ShippingQueryIdentifier import com.github.insanusmokrassar.TelegramBotAPI.types.ShippingQueryIdentifier
import kotlinx.serialization.KSerializer import kotlinx.serialization.*
import kotlinx.serialization.serializer import kotlinx.serialization.internal.BooleanSerializer
interface AnswerShippingQuery : SimpleRequest<Boolean> { interface AnswerShippingQuery : SimpleRequest<Boolean> {
override fun method(): String = "answerShippingQuery" override fun method(): String = "answerShippingQuery"
override fun resultDeserializer(): KSerializer<Boolean> = Boolean.serializer() override val resultDeserializer: DeserializationStrategy<Boolean>
get() = BooleanSerializer
val shippingQueryId: ShippingQueryIdentifier val shippingQueryId: ShippingQueryIdentifier
val isOk: Boolean val isOk: Boolean

View File

@@ -13,5 +13,8 @@ data class ExportChatInviteLink(
override val chatId: ChatIdentifier override val chatId: ChatIdentifier
): ChatRequest, SimpleRequest<String> { ): ChatRequest, SimpleRequest<String> {
override fun method(): String = "exportChatInviteLink" override fun method(): String = "exportChatInviteLink"
override fun resultDeserializer(): KSerializer<String> = StringSerializer override val resultDeserializer: DeserializationStrategy<String>
get() = StringSerializer
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -13,5 +13,8 @@ data class LeaveChat(
override val chatId: ChatIdentifier override val chatId: ChatIdentifier
): ChatRequest, SimpleRequest<Boolean> { ): ChatRequest, SimpleRequest<Boolean> {
override fun method(): String = "leaveChat" override fun method(): String = "leaveChat"
override fun resultDeserializer(): KSerializer<Boolean> = BooleanSerializer override val resultDeserializer: DeserializationStrategy<Boolean>
get() = BooleanSerializer
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -14,5 +14,8 @@ data class GetChat(
override val chatId: ChatIdentifier override val chatId: ChatIdentifier
): ChatRequest, SimpleRequest<ExtendedChat> { ): ChatRequest, SimpleRequest<ExtendedChat> {
override fun method(): String = "getChat" override fun method(): String = "getChat"
override fun resultDeserializer(): KSerializer<ExtendedChat> = ExtendedChatSerializer override val resultDeserializer: DeserializationStrategy<ExtendedChat>
get() = ExtendedChatSerializer
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -9,13 +9,18 @@ import com.github.insanusmokrassar.TelegramBotAPI.types.chatIdField
import kotlinx.serialization.* import kotlinx.serialization.*
import kotlinx.serialization.internal.ArrayListSerializer import kotlinx.serialization.internal.ArrayListSerializer
private val chatMembersListSerializer = ArrayListSerializer(
ChatMemberSerializerWithoutDeserialization
)
@Serializable @Serializable
data class GetChatAdministrators( data class GetChatAdministrators(
@SerialName(chatIdField) @SerialName(chatIdField)
override val chatId: ChatIdentifier override val chatId: ChatIdentifier
): ChatRequest, SimpleRequest<List<ChatMember>> { ): ChatRequest, SimpleRequest<List<ChatMember>> {
override fun method(): String = "getChatAdministrators" override fun method(): String = "getChatAdministrators"
override fun resultDeserializer(): KSerializer<List<ChatMember>> = ArrayListSerializer( override val resultDeserializer: DeserializationStrategy<List<ChatMember>>
ChatMemberSerializerWithoutDeserialization get() = chatMembersListSerializer
) override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -13,5 +13,8 @@ data class GetChatMembersCount(
override val chatId: ChatIdentifier override val chatId: ChatIdentifier
): ChatRequest, SimpleRequest<Int> { ): ChatRequest, SimpleRequest<Int> {
override fun method(): String = "getChatMembersCount" override fun method(): String = "getChatMembersCount"
override fun resultDeserializer(): KSerializer<Int> = IntSerializer override val resultDeserializer: DeserializationStrategy<Int>
get() = IntSerializer
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -14,5 +14,8 @@ data class GetChatMember(
override val userId: UserId override val userId: UserId
) : ChatMemberRequest<ChatMember> { ) : ChatMemberRequest<ChatMember> {
override fun method(): String = "getChatMember" override fun method(): String = "getChatMember"
override fun resultDeserializer(): DeserializationStrategy<ChatMember> = ChatMemberDeserializationStrategy override val resultDeserializer: DeserializationStrategy<ChatMember>
get() = ChatMemberDeserializationStrategy
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -16,5 +16,8 @@ data class KickChatMember(
override val untilDate: TelegramDate? = null override val untilDate: TelegramDate? = null
) : ChatMemberRequest<Boolean>, UntilDate { ) : ChatMemberRequest<Boolean>, UntilDate {
override fun method(): String = "kickChatMember" override fun method(): String = "kickChatMember"
override fun resultDeserializer(): KSerializer<Boolean> = BooleanSerializer override val resultDeserializer: DeserializationStrategy<Boolean>
get() = BooleanSerializer
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -32,5 +32,8 @@ data class PromoteChatMember(
private val canPromoteMembers: Boolean? = null private val canPromoteMembers: Boolean? = null
) : ChatMemberRequest<Boolean>, UntilDate { ) : ChatMemberRequest<Boolean>, UntilDate {
override fun method(): String = "promoteChatMember" override fun method(): String = "promoteChatMember"
override fun resultDeserializer(): KSerializer<Boolean> = BooleanSerializer override val resultDeserializer: DeserializationStrategy<Boolean>
get() = BooleanSerializer
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -19,5 +19,8 @@ data class RestrictChatMember(
val permissions: ChatPermissions val permissions: ChatPermissions
) : ChatMemberRequest<Boolean>, UntilDate { ) : ChatMemberRequest<Boolean>, UntilDate {
override fun method(): String = "restrictChatMember" override fun method(): String = "restrictChatMember"
override fun resultDeserializer(): KSerializer<Boolean> = BooleanSerializer override val resultDeserializer: DeserializationStrategy<Boolean>
get() = BooleanSerializer
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -13,5 +13,8 @@ data class UnbanChatMember(
override val userId: UserId override val userId: UserId
) : ChatMemberRequest<Boolean> { ) : ChatMemberRequest<Boolean> {
override fun method(): String = "unbanChatMember" override fun method(): String = "unbanChatMember"
override fun resultDeserializer(): KSerializer<Boolean> = BooleanSerializer override val resultDeserializer: DeserializationStrategy<Boolean>
get() = BooleanSerializer
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -13,5 +13,8 @@ data class DeleteChatPhoto(
override val chatId: ChatIdentifier override val chatId: ChatIdentifier
): ChatRequest, SimpleRequest<Boolean> { ): ChatRequest, SimpleRequest<Boolean> {
override fun method(): String = "deleteChatPhoto" override fun method(): String = "deleteChatPhoto"
override fun resultDeserializer(): KSerializer<Boolean> = BooleanSerializer override val resultDeserializer: DeserializationStrategy<Boolean>
get() = BooleanSerializer
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -16,5 +16,8 @@ data class PinChatMessage (
override val disableNotification: Boolean = false override val disableNotification: Boolean = false
): ChatRequest, SimpleRequest<Boolean>, MessageAction, DisableNotification { ): ChatRequest, SimpleRequest<Boolean>, MessageAction, DisableNotification {
override fun method(): String = "pinChatMessage" override fun method(): String = "pinChatMessage"
override fun resultDeserializer(): KSerializer<Boolean> = BooleanSerializer override val resultDeserializer: DeserializationStrategy<Boolean>
get() = BooleanSerializer
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -20,5 +20,8 @@ data class SetChatDescription (
} }
override fun method(): String = "setChatDescription" override fun method(): String = "setChatDescription"
override fun resultDeserializer(): KSerializer<Boolean> = BooleanSerializer override val resultDeserializer: DeserializationStrategy<Boolean>
get() = BooleanSerializer
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -15,5 +15,8 @@ data class SetChatPermissions (
val permissions: ChatPermissions val permissions: ChatPermissions
): ChatRequest, SimpleRequest<Boolean> { ): ChatRequest, SimpleRequest<Boolean> {
override fun method(): String = "setChatPermissions" override fun method(): String = "setChatPermissions"
override fun resultDeserializer(): KSerializer<Boolean> = BooleanSerializer override val resultDeserializer: DeserializationStrategy<Boolean>
get() = BooleanSerializer
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -16,7 +16,8 @@ data class SetChatPhoto (
val photo: MultipartFile = throw IllegalArgumentException("Unfortunately, this type of objects can't be parsed automatically") val photo: MultipartFile = throw IllegalArgumentException("Unfortunately, this type of objects can't be parsed automatically")
): ChatRequest, MultipartRequest<Boolean> { ): ChatRequest, MultipartRequest<Boolean> {
override fun method(): String = "setChatPhoto" override fun method(): String = "setChatPhoto"
override fun resultDeserializer(): KSerializer<Boolean> = BooleanSerializer override val resultDeserializer: DeserializationStrategy<Boolean>
get() = BooleanSerializer
override val mediaMap: Map<String, MultipartFile> = mapOf(photoField to photo) override val mediaMap: Map<String, MultipartFile> = mapOf(photoField to photo)
override val paramsJson: JsonObject = toJson(serializer()) override val paramsJson: JsonObject = toJson(serializer())
} }

View File

@@ -20,5 +20,8 @@ data class SetChatTitle (
} }
override fun method(): String = "setChatTitle" override fun method(): String = "setChatTitle"
override fun resultDeserializer(): KSerializer<Boolean> = BooleanSerializer override val resultDeserializer: DeserializationStrategy<Boolean>
get() = BooleanSerializer
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -13,5 +13,8 @@ data class UnpinChatMessage(
override val chatId: ChatIdentifier override val chatId: ChatIdentifier
): ChatRequest, SimpleRequest<Boolean> { ): ChatRequest, SimpleRequest<Boolean> {
override fun method(): String = "unpinChatMessage" override fun method(): String = "unpinChatMessage"
override fun resultDeserializer(): KSerializer<Boolean> = BooleanSerializer override val resultDeserializer: DeserializationStrategy<Boolean>
get() = BooleanSerializer
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -13,5 +13,8 @@ data class DeleteChatStickerSet(
override val chatId: ChatIdentifier override val chatId: ChatIdentifier
): ChatRequest, SimpleRequest<Boolean> { ): ChatRequest, SimpleRequest<Boolean> {
override fun method(): String = "deleteChatStickerSet" override fun method(): String = "deleteChatStickerSet"
override fun resultDeserializer(): KSerializer<Boolean> = BooleanSerializer override val resultDeserializer: DeserializationStrategy<Boolean>
get() = BooleanSerializer
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -14,5 +14,8 @@ data class SetChatStickerSet(
val stickerSetName: StickerSetName val stickerSetName: StickerSetName
): ChatRequest, SimpleRequest<Boolean> { ): ChatRequest, SimpleRequest<Boolean> {
override fun method(): String = "setChatStickerSet" override fun method(): String = "setChatStickerSet"
override fun resultDeserializer(): KSerializer<Boolean> = BooleanSerializer override val resultDeserializer: DeserializationStrategy<Boolean>
get() = BooleanSerializer
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -4,7 +4,7 @@ import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.*
import kotlinx.serialization.json.JsonObject import kotlinx.serialization.json.JsonObject
data class CommonMultipartFileRequest<T: Any>( data class CommonMultipartFileRequest<T: Any>(
val data: Request<T>, val data: SimpleRequest<T>,
override val mediaMap: Map<String, MultipartFile> override val mediaMap: Map<String, MultipartFile>
) : MultipartRequest<T>, Request<T> by data { ) : MultipartRequest<T>, Request<T> by data {
override val paramsJson: JsonObject = data.json() override val paramsJson: JsonObject = data.json()

View File

@@ -21,5 +21,8 @@ data class EditChatMessageLiveLocation(
override val replyMarkup: InlineKeyboardMarkup? = null override val replyMarkup: InlineKeyboardMarkup? = null
) : EditChatMessage, EditReplyMessage, EditLocationMessage { ) : EditChatMessage, EditReplyMessage, EditLocationMessage {
override fun method(): String = "editMessageLiveLocation" override fun method(): String = "editMessageLiveLocation"
override fun resultDeserializer(): DeserializationStrategy<Message> = TelegramBotAPIMessageDeserializationStrategy override val resultDeserializer: DeserializationStrategy<Message>
get() = TelegramBotAPIMessageDeserializationStrategy
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -1,10 +1,10 @@
package com.github.insanusmokrassar.TelegramBotAPI.requests.edit.LiveLocation package com.github.insanusmokrassar.TelegramBotAPI.requests.edit.LiveLocation
import com.github.insanusmokrassar.TelegramBotAPI.requests.edit.abstracts.* import com.github.insanusmokrassar.TelegramBotAPI.requests.edit.abstracts.*
import com.github.insanusmokrassar.TelegramBotAPI.requests.edit.caption.EditInlineMessageCaption
import com.github.insanusmokrassar.TelegramBotAPI.types.* import com.github.insanusmokrassar.TelegramBotAPI.types.*
import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.InlineKeyboardMarkup import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.InlineKeyboardMarkup
import kotlinx.serialization.SerialName import kotlinx.serialization.*
import kotlinx.serialization.Serializable
@Serializable @Serializable
data class EditInlineMessageLiveLocation( data class EditInlineMessageLiveLocation(
@@ -18,4 +18,6 @@ data class EditInlineMessageLiveLocation(
override val replyMarkup: InlineKeyboardMarkup? = null override val replyMarkup: InlineKeyboardMarkup? = null
) : EditInlineMessage, EditReplyMessage, EditLocationMessage { ) : EditInlineMessage, EditReplyMessage, EditLocationMessage {
override fun method(): String = "editMessageLiveLocation" override fun method(): String = "editMessageLiveLocation"
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -18,5 +18,8 @@ data class StopChatMessageLiveLocation(
override val replyMarkup: InlineKeyboardMarkup? = null override val replyMarkup: InlineKeyboardMarkup? = null
) : EditChatMessage, EditReplyMessage { ) : EditChatMessage, EditReplyMessage {
override fun method(): String = "stopMessageLiveLocation" override fun method(): String = "stopMessageLiveLocation"
override fun resultDeserializer(): DeserializationStrategy<Message> = TelegramBotAPIMessageDeserializationStrategy override val resultDeserializer: DeserializationStrategy<Message>
get() = TelegramBotAPIMessageDeserializationStrategy
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -4,8 +4,7 @@ import com.github.insanusmokrassar.TelegramBotAPI.requests.edit.abstracts.EditIn
import com.github.insanusmokrassar.TelegramBotAPI.requests.edit.abstracts.EditReplyMessage import com.github.insanusmokrassar.TelegramBotAPI.requests.edit.abstracts.EditReplyMessage
import com.github.insanusmokrassar.TelegramBotAPI.types.* import com.github.insanusmokrassar.TelegramBotAPI.types.*
import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.InlineKeyboardMarkup import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.InlineKeyboardMarkup
import kotlinx.serialization.SerialName import kotlinx.serialization.*
import kotlinx.serialization.Serializable
@Serializable @Serializable
data class StopInlineMessageLiveLocation( data class StopInlineMessageLiveLocation(
@@ -15,4 +14,6 @@ data class StopInlineMessageLiveLocation(
override val replyMarkup: InlineKeyboardMarkup? = null override val replyMarkup: InlineKeyboardMarkup? = null
) : EditInlineMessage, EditReplyMessage { ) : EditInlineMessage, EditReplyMessage {
override fun method(): String = "stopMessageLiveLocation" override fun method(): String = "stopMessageLiveLocation"
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -21,5 +21,8 @@ data class EditChatMessageReplyMarkup(
) : EditChatMessage, EditReplyMessage { ) : EditChatMessage, EditReplyMessage {
override fun method(): String = editMessageReplyMarkupMethod override fun method(): String = editMessageReplyMarkupMethod
override fun resultDeserializer(): DeserializationStrategy<Message> = TelegramBotAPIMessageDeserializationStrategy override val resultDeserializer: DeserializationStrategy<Message>
get() = TelegramBotAPIMessageDeserializationStrategy
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -1,11 +1,11 @@
package com.github.insanusmokrassar.TelegramBotAPI.requests.edit.ReplyMarkup package com.github.insanusmokrassar.TelegramBotAPI.requests.edit.ReplyMarkup
import com.github.insanusmokrassar.TelegramBotAPI.requests.edit.LiveLocation.EditInlineMessageLiveLocation
import com.github.insanusmokrassar.TelegramBotAPI.requests.edit.abstracts.EditInlineMessage import com.github.insanusmokrassar.TelegramBotAPI.requests.edit.abstracts.EditInlineMessage
import com.github.insanusmokrassar.TelegramBotAPI.requests.edit.abstracts.EditReplyMessage import com.github.insanusmokrassar.TelegramBotAPI.requests.edit.abstracts.EditReplyMessage
import com.github.insanusmokrassar.TelegramBotAPI.types.* import com.github.insanusmokrassar.TelegramBotAPI.types.*
import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.InlineKeyboardMarkup import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.InlineKeyboardMarkup
import kotlinx.serialization.SerialName import kotlinx.serialization.*
import kotlinx.serialization.Serializable
@Serializable @Serializable
data class EditInlineMessageReplyMarkup( data class EditInlineMessageReplyMarkup(
@@ -15,4 +15,6 @@ data class EditInlineMessageReplyMarkup(
override val replyMarkup: InlineKeyboardMarkup? = null override val replyMarkup: InlineKeyboardMarkup? = null
) : EditInlineMessage, EditReplyMessage { ) : EditInlineMessage, EditReplyMessage {
override fun method(): String = editMessageReplyMarkupMethod override fun method(): String = editMessageReplyMarkupMethod
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -2,10 +2,11 @@ package com.github.insanusmokrassar.TelegramBotAPI.requests.edit.abstracts
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.SimpleRequest import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.SimpleRequest
import com.github.insanusmokrassar.TelegramBotAPI.types.InlineMessageIdentifier import com.github.insanusmokrassar.TelegramBotAPI.types.InlineMessageIdentifier
import kotlinx.serialization.KSerializer import kotlinx.serialization.*
import kotlinx.serialization.internal.BooleanSerializer import kotlinx.serialization.internal.BooleanSerializer
interface EditInlineMessage : SimpleRequest<Boolean> { interface EditInlineMessage : SimpleRequest<Boolean> {
val inlineMessageId: InlineMessageIdentifier val inlineMessageId: InlineMessageIdentifier
override fun resultDeserializer(): KSerializer<Boolean> = BooleanSerializer override val resultDeserializer: DeserializationStrategy<Boolean>
get() = BooleanSerializer
} }

View File

@@ -26,5 +26,8 @@ data class EditChatMessageCaption(
) : EditChatMessage, EditTextChatMessage, EditReplyMessage { ) : EditChatMessage, EditTextChatMessage, EditReplyMessage {
override fun method(): String = editMessageCaptionMethod override fun method(): String = editMessageCaptionMethod
override fun resultDeserializer(): DeserializationStrategy<Message> = TelegramBotAPIMessageDeserializationStrategy override val resultDeserializer: DeserializationStrategy<Message>
get() = TelegramBotAPIMessageDeserializationStrategy
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -5,8 +5,7 @@ import com.github.insanusmokrassar.TelegramBotAPI.types.*
import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.ParseMode import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.ParseMode
import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.parseModeField import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.parseModeField
import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.InlineKeyboardMarkup import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.InlineKeyboardMarkup
import kotlinx.serialization.SerialName import kotlinx.serialization.*
import kotlinx.serialization.Serializable
@Serializable @Serializable
data class EditInlineMessageCaption( data class EditInlineMessageCaption(
@@ -20,4 +19,6 @@ data class EditInlineMessageCaption(
override val replyMarkup: InlineKeyboardMarkup? = null override val replyMarkup: InlineKeyboardMarkup? = null
) : EditInlineMessage, EditTextChatMessage, EditReplyMessage { ) : EditInlineMessage, EditTextChatMessage, EditReplyMessage {
override fun method(): String = editMessageCaptionMethod override fun method(): String = editMessageCaptionMethod
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -30,5 +30,8 @@ data class EditChatMessageMedia(
} }
override fun method(): String = editMessageMediaMethod override fun method(): String = editMessageMediaMethod
override fun resultDeserializer(): DeserializationStrategy<Message> = TelegramBotAPIMessageDeserializationStrategy override val resultDeserializer: DeserializationStrategy<Message>
get() = TelegramBotAPIMessageDeserializationStrategy
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -1,12 +1,12 @@
package com.github.insanusmokrassar.TelegramBotAPI.requests.edit.media package com.github.insanusmokrassar.TelegramBotAPI.requests.edit.media
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.MultipartFile import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.MultipartFile
import com.github.insanusmokrassar.TelegramBotAPI.requests.edit.LiveLocation.EditInlineMessageLiveLocation
import com.github.insanusmokrassar.TelegramBotAPI.requests.edit.abstracts.* import com.github.insanusmokrassar.TelegramBotAPI.requests.edit.abstracts.*
import com.github.insanusmokrassar.TelegramBotAPI.types.* import com.github.insanusmokrassar.TelegramBotAPI.types.*
import com.github.insanusmokrassar.TelegramBotAPI.types.InputMedia.InputMedia import com.github.insanusmokrassar.TelegramBotAPI.types.InputMedia.InputMedia
import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.InlineKeyboardMarkup import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.InlineKeyboardMarkup
import kotlinx.serialization.SerialName import kotlinx.serialization.*
import kotlinx.serialization.Serializable
@Serializable @Serializable
data class EditInlineMessageMedia( data class EditInlineMessageMedia(
@@ -23,6 +23,8 @@ data class EditInlineMessageMedia(
throw IllegalArgumentException("For editing of media messages you MUST use file id (according to documentation)") throw IllegalArgumentException("For editing of media messages you MUST use file id (according to documentation)")
} }
} }
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
override fun method(): String = editMessageMediaMethod override fun method(): String = editMessageMediaMethod
} }

View File

@@ -28,5 +28,8 @@ data class EditChatMessageText(
) : EditChatMessage, EditTextChatMessage, EditReplyMessage, EditDisableWebPagePreviewMessage { ) : EditChatMessage, EditTextChatMessage, EditReplyMessage, EditDisableWebPagePreviewMessage {
override fun method(): String = editMessageTextMethod override fun method(): String = editMessageTextMethod
override fun resultDeserializer(): DeserializationStrategy<Message> = TelegramBotAPIMessageDeserializationStrategy override val resultDeserializer: DeserializationStrategy<Message>
get() = TelegramBotAPIMessageDeserializationStrategy
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -1,13 +1,13 @@
package com.github.insanusmokrassar.TelegramBotAPI.requests.edit.text package com.github.insanusmokrassar.TelegramBotAPI.requests.edit.text
import com.github.insanusmokrassar.TelegramBotAPI.requests.edit.LiveLocation.EditInlineMessageLiveLocation
import com.github.insanusmokrassar.TelegramBotAPI.requests.edit.abstracts.* import com.github.insanusmokrassar.TelegramBotAPI.requests.edit.abstracts.*
import com.github.insanusmokrassar.TelegramBotAPI.requests.edit.media.editMessageMediaMethod import com.github.insanusmokrassar.TelegramBotAPI.requests.edit.media.editMessageMediaMethod
import com.github.insanusmokrassar.TelegramBotAPI.types.* import com.github.insanusmokrassar.TelegramBotAPI.types.*
import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.ParseMode import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.ParseMode
import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.parseModeField import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.parseModeField
import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.InlineKeyboardMarkup import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.InlineKeyboardMarkup
import kotlinx.serialization.SerialName import kotlinx.serialization.*
import kotlinx.serialization.Serializable
@Serializable @Serializable
data class EditInlineMessageText( data class EditInlineMessageText(
@@ -23,4 +23,6 @@ data class EditInlineMessageText(
override val replyMarkup: InlineKeyboardMarkup? = null override val replyMarkup: InlineKeyboardMarkup? = null
) : EditInlineMessage, EditTextChatMessage, EditReplyMessage, EditDisableWebPagePreviewMessage { ) : EditInlineMessage, EditTextChatMessage, EditReplyMessage, EditDisableWebPagePreviewMessage {
override fun method(): String = editMessageMediaMethod override fun method(): String = editMessageMediaMethod
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -3,8 +3,7 @@ package com.github.insanusmokrassar.TelegramBotAPI.requests.games
import com.github.insanusmokrassar.TelegramBotAPI.CommonAbstracts.types.MessageAction import com.github.insanusmokrassar.TelegramBotAPI.CommonAbstracts.types.MessageAction
import com.github.insanusmokrassar.TelegramBotAPI.requests.games.abstracts.GetGameHighScores import com.github.insanusmokrassar.TelegramBotAPI.requests.games.abstracts.GetGameHighScores
import com.github.insanusmokrassar.TelegramBotAPI.types.* import com.github.insanusmokrassar.TelegramBotAPI.types.*
import kotlinx.serialization.SerialName import kotlinx.serialization.*
import kotlinx.serialization.Serializable
@Serializable @Serializable
data class GetGameHighScoresByChat ( data class GetGameHighScoresByChat (
@@ -14,4 +13,7 @@ data class GetGameHighScoresByChat (
override val chatId: ChatId, override val chatId: ChatId,
@SerialName(messageIdField) @SerialName(messageIdField)
override val messageId: MessageIdentifier override val messageId: MessageIdentifier
) : GetGameHighScores, MessageAction ) : GetGameHighScores, MessageAction {
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
}

View File

@@ -3,8 +3,7 @@ package com.github.insanusmokrassar.TelegramBotAPI.requests.games
import com.github.insanusmokrassar.TelegramBotAPI.CommonAbstracts.types.InlineMessageAction import com.github.insanusmokrassar.TelegramBotAPI.CommonAbstracts.types.InlineMessageAction
import com.github.insanusmokrassar.TelegramBotAPI.requests.games.abstracts.GetGameHighScores import com.github.insanusmokrassar.TelegramBotAPI.requests.games.abstracts.GetGameHighScores
import com.github.insanusmokrassar.TelegramBotAPI.types.* import com.github.insanusmokrassar.TelegramBotAPI.types.*
import kotlinx.serialization.SerialName import kotlinx.serialization.*
import kotlinx.serialization.Serializable
@Serializable @Serializable
data class GetGameHighScoresByInlineMessageId ( data class GetGameHighScoresByInlineMessageId (
@@ -12,4 +11,7 @@ data class GetGameHighScoresByInlineMessageId (
override val userId: UserId, override val userId: UserId,
@SerialName(inlineMessageIdField) @SerialName(inlineMessageIdField)
override val inlineMessageId: InlineMessageIdentifier override val inlineMessageId: InlineMessageIdentifier
) : GetGameHighScores, InlineMessageAction ) : GetGameHighScores, InlineMessageAction {
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
}

View File

@@ -3,8 +3,7 @@ package com.github.insanusmokrassar.TelegramBotAPI.requests.games
import com.github.insanusmokrassar.TelegramBotAPI.CommonAbstracts.types.MessageAction import com.github.insanusmokrassar.TelegramBotAPI.CommonAbstracts.types.MessageAction
import com.github.insanusmokrassar.TelegramBotAPI.requests.games.abstracts.SetGameScore import com.github.insanusmokrassar.TelegramBotAPI.requests.games.abstracts.SetGameScore
import com.github.insanusmokrassar.TelegramBotAPI.types.* import com.github.insanusmokrassar.TelegramBotAPI.types.*
import kotlinx.serialization.SerialName import kotlinx.serialization.*
import kotlinx.serialization.Serializable
@Serializable @Serializable
data class SetGameScoreByChatId ( data class SetGameScoreByChatId (
@@ -20,4 +19,7 @@ data class SetGameScoreByChatId (
override val force: Boolean = false, override val force: Boolean = false,
@SerialName(disableEditMessageField) @SerialName(disableEditMessageField)
override val disableEditMessage: Boolean = false override val disableEditMessage: Boolean = false
) : SetGameScore, MessageAction ) : SetGameScore, MessageAction {
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
}

View File

@@ -3,8 +3,7 @@ package com.github.insanusmokrassar.TelegramBotAPI.requests.games
import com.github.insanusmokrassar.TelegramBotAPI.CommonAbstracts.types.InlineMessageAction import com.github.insanusmokrassar.TelegramBotAPI.CommonAbstracts.types.InlineMessageAction
import com.github.insanusmokrassar.TelegramBotAPI.requests.games.abstracts.SetGameScore import com.github.insanusmokrassar.TelegramBotAPI.requests.games.abstracts.SetGameScore
import com.github.insanusmokrassar.TelegramBotAPI.types.* import com.github.insanusmokrassar.TelegramBotAPI.types.*
import kotlinx.serialization.SerialName import kotlinx.serialization.*
import kotlinx.serialization.Serializable
@Serializable @Serializable
data class SetGameScoreByInlineMessageId ( data class SetGameScoreByInlineMessageId (
@@ -18,4 +17,7 @@ data class SetGameScoreByInlineMessageId (
override val force: Boolean = false, override val force: Boolean = false,
@SerialName(disableEditMessageField) @SerialName(disableEditMessageField)
override val disableEditMessage: Boolean = false override val disableEditMessage: Boolean = false
) : SetGameScore, InlineMessageAction ) : SetGameScore, InlineMessageAction {
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
}

View File

@@ -3,6 +3,7 @@ package com.github.insanusmokrassar.TelegramBotAPI.requests.games.abstracts
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.SimpleRequest import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.SimpleRequest
import com.github.insanusmokrassar.TelegramBotAPI.types.UserId import com.github.insanusmokrassar.TelegramBotAPI.types.UserId
import com.github.insanusmokrassar.TelegramBotAPI.types.games.GameHighScore import com.github.insanusmokrassar.TelegramBotAPI.types.games.GameHighScore
import kotlinx.serialization.DeserializationStrategy
import kotlinx.serialization.KSerializer import kotlinx.serialization.KSerializer
import kotlinx.serialization.internal.ArrayListSerializer import kotlinx.serialization.internal.ArrayListSerializer
@@ -10,7 +11,8 @@ interface GetGameHighScores : SimpleRequest<List<GameHighScore>> {
val userId: UserId val userId: UserId
override fun method(): String = "getGameHighScores" override fun method(): String = "getGameHighScores"
override fun resultDeserializer(): KSerializer<List<GameHighScore>> = GameHighScoresSerializer override val resultDeserializer: DeserializationStrategy<List<GameHighScore>>
get() = GameHighScoresSerializer
} }
object GameHighScoresSerializer : KSerializer<List<GameHighScore>> by ArrayListSerializer(GameHighScore.serializer()) object GameHighScoresSerializer : KSerializer<List<GameHighScore>> by ArrayListSerializer(GameHighScore.serializer())

View File

@@ -2,8 +2,7 @@ package com.github.insanusmokrassar.TelegramBotAPI.requests.games.abstracts
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.SimpleRequest import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.SimpleRequest
import com.github.insanusmokrassar.TelegramBotAPI.types.UserId import com.github.insanusmokrassar.TelegramBotAPI.types.UserId
import kotlinx.serialization.KSerializer import kotlinx.serialization.*
import kotlinx.serialization.serializer
interface SetGameScore : SimpleRequest<Boolean> { interface SetGameScore : SimpleRequest<Boolean> {
val userId: UserId val userId: UserId
@@ -12,5 +11,6 @@ interface SetGameScore : SimpleRequest<Boolean> {
val disableEditMessage: Boolean val disableEditMessage: Boolean
override fun method(): String = "setGameScore" override fun method(): String = "setGameScore"
override fun resultDeserializer(): KSerializer<Boolean> = Boolean.serializer() override val resultDeserializer: DeserializationStrategy<Boolean>
get() = Boolean.serializer()
} }

View File

@@ -12,5 +12,8 @@ data class GetFile(
val fileId: FileId val fileId: FileId
): SimpleRequest<PathedFile> { ): SimpleRequest<PathedFile> {
override fun method(): String = "getFile" override fun method(): String = "getFile"
override fun resultDeserializer(): KSerializer<PathedFile> = PathedFile.serializer() override val resultDeserializer: DeserializationStrategy<PathedFile>
get() = PathedFile.serializer()
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

View File

@@ -11,5 +11,8 @@ data class GetStickerSet(
val name: String val name: String
): SimpleRequest<StickerSet> { ): SimpleRequest<StickerSet> {
override fun method(): String = "getStickerSet" override fun method(): String = "getStickerSet"
override fun resultDeserializer(): KSerializer<StickerSet> = StickerSet.serializer() override val resultDeserializer: DeserializationStrategy<StickerSet>
get() = StickerSet.serializer()
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
} }

Some files were not shown because too many files have changed in this diff Show More