mirror of
				https://github.com/InsanusMokrassar/PlaguBot.git
				synced 2025-11-04 06:00:08 +00:00 
			
		
		
		
	start migration
This commit is contained in:
		@@ -1,7 +1,6 @@
 | 
			
		||||
plugins {
 | 
			
		||||
    id 'org.jetbrains.kotlin.jvm'
 | 
			
		||||
    id "org.jetbrains.kotlin.plugin.serialization"
 | 
			
		||||
    id "org.jetbrains.kotlin.kapt"
 | 
			
		||||
    id 'application'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -11,21 +10,17 @@ project.version="$version"
 | 
			
		||||
apply from: "publish.gradle"
 | 
			
		||||
 | 
			
		||||
dependencies {
 | 
			
		||||
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
 | 
			
		||||
    api "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines_version"
 | 
			
		||||
    api "org.jetbrains.kotlinx:kotlinx-serialization-json:$kotlin_serialisation_runtime_version"
 | 
			
		||||
    api "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
 | 
			
		||||
    api "org.jetbrains.exposed:exposed-jdbc:$kotlin_exposed_version"
 | 
			
		||||
    implementation libs.kt.stdlib
 | 
			
		||||
    api libs.kt.coroutines
 | 
			
		||||
    api libs.kt.serialization
 | 
			
		||||
    api libs.jb.exposed.jdbc
 | 
			
		||||
 | 
			
		||||
    api "dev.inmo:tgbotapi:$tgbotapi_version"
 | 
			
		||||
    api "dev.inmo:sdi:$sdi_version"
 | 
			
		||||
    api "dev.inmo:micro_utils.repos.exposed:$microutils_version"
 | 
			
		||||
    api libs.tgbotapi
 | 
			
		||||
    api libs.microutils.repos.exposed
 | 
			
		||||
 | 
			
		||||
    api "com.github.matfax.klassindex:library:$klassindex_version"
 | 
			
		||||
    kapt "com.github.matfax.klassindex:processor:$klassindex_version"
 | 
			
		||||
    api "org.xerial:sqlite-jdbc:$sqlite_version"
 | 
			
		||||
    api libs.sqlite
 | 
			
		||||
 | 
			
		||||
    testImplementation "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"
 | 
			
		||||
    testImplementation libs.kt.test.junit
 | 
			
		||||
 | 
			
		||||
    api project(":plagubot.plugin")
 | 
			
		||||
}
 | 
			
		||||
@@ -34,13 +29,6 @@ application {
 | 
			
		||||
    mainClassName = 'dev.inmo.plagubot.AppKt'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
kapt {
 | 
			
		||||
    arguments {
 | 
			
		||||
        arg("com.github.matfax.klassindex.IndexSubclasses", "dev.inmo.plagubot.Plugin")
 | 
			
		||||
        arg("com.github.matfax.klassindex.IndexAnnotated", "dev.inmo.sdi.SDIIncluded")
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
java {
 | 
			
		||||
    sourceCompatibility = JavaVersion.VERSION_1_8
 | 
			
		||||
    targetCompatibility = JavaVersion.VERSION_1_8
 | 
			
		||||
 
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
{"bintrayConfig":{"repo":"PlaguBot","packageName":"${project.name}","packageVcs":"https://github.com/InsanusMokrassar/PlaguBot","autoPublish":true,"overridePublish":true},"licenses":[{"id":"Apache-2.0","title":"Apache Software License 2.0","url":"https://github.com/InsanusMokrassar/PlaguBot/LICENSE"}],"mavenConfig":{"name":"PlaguBot Bot","description":"Base PlaguBot project","url":"https://github.com/InsanusMokrassar/PlaguBot","vcsUrl":"ssh://git@github.com/InsanusMokrassar/PlaguBot.git","includeGpgSigning":true,"publishToMavenCentral":true,"developers":[{"id":"InsanusMokrassar","name":"Aleksei Ovsiannikov","eMail":"ovsyannikov.alexey95@gmail.com"}]},"type":"JVM"}
 | 
			
		||||
@@ -1,6 +1,4 @@
 | 
			
		||||
apply plugin: 'maven-publish'
 | 
			
		||||
apply plugin: 'signing'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
task javadocJar(type: Jar) {
 | 
			
		||||
    from javadoc
 | 
			
		||||
@@ -50,17 +48,8 @@ publishing {
 | 
			
		||||
                    
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
                repositories {
 | 
			
		||||
                    maven {
 | 
			
		||||
                        name = "bintray"
 | 
			
		||||
                        url = uri("https://api.bintray.com/maven/${project.hasProperty('BINTRAY_USER') ? project.property('BINTRAY_USER') : System.getenv('BINTRAY_USER')}/PlaguBot/${project.name}/;publish=1;override=1")
 | 
			
		||||
                        credentials {
 | 
			
		||||
                            username = project.hasProperty('BINTRAY_USER') ? project.property('BINTRAY_USER') : System.getenv('BINTRAY_USER')
 | 
			
		||||
                            password = project.hasProperty('BINTRAY_KEY') ? project.property('BINTRAY_KEY') : System.getenv('BINTRAY_KEY')
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    
 | 
			
		||||
            repositories {
 | 
			
		||||
                if ((project.hasProperty('SONATYPE_USER') || System.getenv('SONATYPE_USER') != null) && (project.hasProperty('SONATYPE_PASSWORD') || System.getenv('SONATYPE_PASSWORD') != null)) {
 | 
			
		||||
                    maven {
 | 
			
		||||
                        name = "sonatype"
 | 
			
		||||
                        url = uri("https://oss.sonatype.org/service/local/staging/deploy/maven2/")
 | 
			
		||||
@@ -69,14 +58,24 @@ publishing {
 | 
			
		||||
                            password = project.hasProperty('SONATYPE_PASSWORD') ? project.property('SONATYPE_PASSWORD') : System.getenv('SONATYPE_PASSWORD')
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    
 | 
			
		||||
                }
 | 
			
		||||
            
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
signing {
 | 
			
		||||
    useGpgCmd()
 | 
			
		||||
    sign publishing.publications
 | 
			
		||||
if (project.hasProperty("signing.gnupg.keyName")) {
 | 
			
		||||
    apply plugin: 'signing'
 | 
			
		||||
    
 | 
			
		||||
    signing {
 | 
			
		||||
        useGpgCmd()
 | 
			
		||||
    
 | 
			
		||||
        sign publishing.publications
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    task signAll {
 | 
			
		||||
        tasks.withType(Sign).forEach {
 | 
			
		||||
            dependsOn(it)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								bot/publish.kpsb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								bot/publish.kpsb
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
{"licenses":[{"id":"Apache-2.0","title":"Apache Software License 2.0","url":"https://github.com/InsanusMokrassar/PlaguBot/LICENSE"}],"mavenConfig":{"name":"PlaguBot Bot","description":"Base PlaguBot project","url":"https://github.com/InsanusMokrassar/PlaguBot","vcsUrl":"ssh://git@github.com/InsanusMokrassar/PlaguBot.git","developers":[{"id":"InsanusMokrassar","name":"Aleksei Ovsiannikov","eMail":"ovsyannikov.alexey95@gmail.com"}],"repositories":[{"name":"sonatype","url":"https://oss.sonatype.org/service/local/staging/deploy/maven2/"}],"gpgSigning":{"type":"dev.inmo.kmppscriptbuilder.core.models.GpgSigning.Optional"}},"type":"JVM"}
 | 
			
		||||
@@ -2,7 +2,7 @@ package dev.inmo.plagubot
 | 
			
		||||
 | 
			
		||||
import dev.inmo.micro_utils.coroutines.safelyWithoutExceptions
 | 
			
		||||
import dev.inmo.plagubot.config.*
 | 
			
		||||
import dev.inmo.tgbotapi.bot.Ktor.telegramBot
 | 
			
		||||
import dev.inmo.tgbotapi.bot.ktor.telegramBot
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.api.bot.setMyCommands
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.*
 | 
			
		||||
import dev.inmo.tgbotapi.types.BotCommand
 | 
			
		||||
@@ -24,8 +24,6 @@ data class PlaguBot(
 | 
			
		||||
    @Transient
 | 
			
		||||
    private val bot = telegramBot(config.botToken)
 | 
			
		||||
    @Transient
 | 
			
		||||
    private val paramsMap = config.params ?.toMap() ?: emptyMap()
 | 
			
		||||
    @Transient
 | 
			
		||||
    private val database = config.params ?.database ?: config.database.database
 | 
			
		||||
 | 
			
		||||
    override suspend fun getCommands(): List<BotCommand> = config.plugins.flatMap {
 | 
			
		||||
 
 | 
			
		||||
@@ -4,12 +4,12 @@ import dev.inmo.plagubot.Plugin
 | 
			
		||||
import dev.inmo.sdi.Module
 | 
			
		||||
import kotlinx.serialization.Contextual
 | 
			
		||||
import kotlinx.serialization.Serializable
 | 
			
		||||
import kotlinx.serialization.json.JsonObject
 | 
			
		||||
 | 
			
		||||
@Serializable
 | 
			
		||||
data class Config(
 | 
			
		||||
    override val plugins: List<@Contextual Plugin>,
 | 
			
		||||
    override val plugins: List<Plugin>,
 | 
			
		||||
    val database: DatabaseConfig = DatabaseConfig(),
 | 
			
		||||
    val botToken: String,
 | 
			
		||||
    @Contextual
 | 
			
		||||
    override val params: Module? = null
 | 
			
		||||
    val rawConfig: JsonObject
 | 
			
		||||
) : PluginsConfiguration
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,6 @@ package dev.inmo.plagubot.config
 | 
			
		||||
 | 
			
		||||
import com.github.matfax.klassindex.KlassIndex
 | 
			
		||||
import dev.inmo.plagubot.Plugin
 | 
			
		||||
import dev.inmo.plagubot.PluginSerializer
 | 
			
		||||
import dev.inmo.sdi.Module
 | 
			
		||||
import dev.inmo.sdi.ModuleSerializer
 | 
			
		||||
import kotlinx.serialization.*
 | 
			
		||||
 
 | 
			
		||||
@@ -1,20 +1,19 @@
 | 
			
		||||
buildscript {
 | 
			
		||||
    repositories {
 | 
			
		||||
        jcenter()
 | 
			
		||||
        mavenCentral()
 | 
			
		||||
        maven { url "https://plugins.gradle.org/m2/" }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    dependencies {
 | 
			
		||||
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
 | 
			
		||||
        classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
 | 
			
		||||
        classpath "com.github.breadmoirai:github-release:$github_release_plugin_version"
 | 
			
		||||
        classpath libs.buildscript.kt.gradle
 | 
			
		||||
        classpath libs.buildscript.kt.serialization
 | 
			
		||||
        classpath libs.buildscript.gh.release
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
allprojects {
 | 
			
		||||
    repositories {
 | 
			
		||||
        mavenCentral()
 | 
			
		||||
        jcenter()
 | 
			
		||||
        mavenLocal()
 | 
			
		||||
        maven { url 'https://jitpack.io' }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -4,19 +4,5 @@ org.gradle.parallel=true
 | 
			
		||||
kotlin.js.generate.externals=true
 | 
			
		||||
kotlin.incremental=true
 | 
			
		||||
 | 
			
		||||
kotlin_version=1.6.10
 | 
			
		||||
kotlin_coroutines_version=1.6.0
 | 
			
		||||
kotlin_serialisation_runtime_version=1.3.2
 | 
			
		||||
kotlin_exposed_version=0.37.2
 | 
			
		||||
 | 
			
		||||
sdi_version=0.6.0
 | 
			
		||||
tgbotapi_version=0.38.4
 | 
			
		||||
microutils_version=0.9.5
 | 
			
		||||
klassindex_version=4.1.0-rc.1
 | 
			
		||||
 | 
			
		||||
sqlite_version=3.36.0.3
 | 
			
		||||
 | 
			
		||||
github_release_plugin_version=2.2.12
 | 
			
		||||
 | 
			
		||||
group=dev.inmo
 | 
			
		||||
version=1.0.0
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										49
									
								
								gradle/libs.versions.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								gradle/libs.versions.toml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
[versions]
 | 
			
		||||
 | 
			
		||||
kt = "1.6.21"
 | 
			
		||||
kt-serialization = "1.3.3"
 | 
			
		||||
kt-coroutines = "1.6.1"
 | 
			
		||||
 | 
			
		||||
microutils = "0.10.4"
 | 
			
		||||
tgbotapi = "1.0.1"
 | 
			
		||||
 | 
			
		||||
jb-exposed = "0.38.2"
 | 
			
		||||
jb-dokka = "1.6.21"
 | 
			
		||||
 | 
			
		||||
sqlite = "3.36.0.3"
 | 
			
		||||
 | 
			
		||||
klock = "2.7.0"
 | 
			
		||||
uuid = "0.4.0"
 | 
			
		||||
 | 
			
		||||
ktor = "2.0.1"
 | 
			
		||||
 | 
			
		||||
gh-release = "2.3.7"
 | 
			
		||||
 | 
			
		||||
android-gradle = "7.0.4"
 | 
			
		||||
dexcount = "3.0.1"
 | 
			
		||||
koin = "3.2.0"
 | 
			
		||||
 | 
			
		||||
[libraries]
 | 
			
		||||
 | 
			
		||||
kt-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kt" }
 | 
			
		||||
 | 
			
		||||
kt-coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kt-coroutines" }
 | 
			
		||||
kt-serialization = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kt-serialization" }
 | 
			
		||||
 | 
			
		||||
tgbotapi = { module = "dev.inmo:tgbotapi", version.ref = "tgbotapi" }
 | 
			
		||||
microutils-repos-exposed = { module = "dev.inmo:micro_utils.repos.exposed", version.ref = "microutils" }
 | 
			
		||||
 | 
			
		||||
koin = { module = "io.insert-koin:koin-core", version.ref = "koin" }
 | 
			
		||||
 | 
			
		||||
jb-exposed-jdbc = { module = "org.jetbrains.exposed:exposed-jdbc", version.ref = "jb-exposed" }
 | 
			
		||||
 | 
			
		||||
sqlite = { module = "org.xerial:sqlite-jdbc", version.ref = "sqlite" }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
kt-test-junit = { module = "org.jetbrains.kotlin:kotlin-test-junit", version.ref = "kt" }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
buildscript-kt-gradle = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kt" }
 | 
			
		||||
buildscript-kt-serialization = { module = "org.jetbrains.kotlin:kotlin-serialization", version.ref = "kt" }
 | 
			
		||||
buildscript-jb-dokka = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version.ref = "jb-dokka" }
 | 
			
		||||
buildscript-gh-release = { module = "com.github.breadmoirai:github-release", version.ref = "gh-release" }
 | 
			
		||||
							
								
								
									
										2
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							@@ -1,5 +1,5 @@
 | 
			
		||||
distributionBase=GRADLE_USER_HOME
 | 
			
		||||
distributionPath=wrapper/dists
 | 
			
		||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip
 | 
			
		||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
 | 
			
		||||
zipStoreBase=GRADLE_USER_HOME
 | 
			
		||||
zipStorePath=wrapper/dists
 | 
			
		||||
 
 | 
			
		||||
@@ -9,11 +9,13 @@ project.version="$version"
 | 
			
		||||
apply from: "publish.gradle"
 | 
			
		||||
 | 
			
		||||
dependencies {
 | 
			
		||||
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
 | 
			
		||||
    api "org.jetbrains.kotlinx:kotlinx-serialization-json:$kotlin_serialisation_runtime_version"
 | 
			
		||||
    implementation libs.kt.stdlib
 | 
			
		||||
    api libs.kt.serialization
 | 
			
		||||
 | 
			
		||||
    api "dev.inmo:tgbotapi:$tgbotapi_version"
 | 
			
		||||
    api "dev.inmo:micro_utils.repos.exposed:$microutils_version"
 | 
			
		||||
    api libs.tgbotapi
 | 
			
		||||
    api libs.microutils.repos.exposed
 | 
			
		||||
 | 
			
		||||
    api libs.koin
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
java {
 | 
			
		||||
 
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
{"bintrayConfig":{"repo":"PlaguBot","packageName":"${project.name}","packageVcs":"https://github.com/InsanusMokrassar/PlaguBot","autoPublish":true,"overridePublish":true},"licenses":[{"id":"Apache-2.0","title":"Apache Software License 2.0","url":"https://github.com/InsanusMokrassar/PlaguBot/LICENSE"}],"mavenConfig":{"name":"PlaguBot Plugin","description":"Base dependency for whole PlaguBot project","url":"https://github.com/InsanusMokrassar/PlaguBot","vcsUrl":"ssh://git@github.com/InsanusMokrassar/PlaguBot.git","includeGpgSigning":true,"publishToMavenCentral":true,"developers":[{"id":"InsanusMokrassar","name":"Aleksei Ovsiannikov","eMail":"ovsyannikov.alexey95@gmail.com"}]},"type":"JVM"}
 | 
			
		||||
@@ -1,6 +1,4 @@
 | 
			
		||||
apply plugin: 'maven-publish'
 | 
			
		||||
apply plugin: 'signing'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
task javadocJar(type: Jar) {
 | 
			
		||||
    from javadoc
 | 
			
		||||
@@ -50,17 +48,8 @@ publishing {
 | 
			
		||||
                    
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
                repositories {
 | 
			
		||||
                    maven {
 | 
			
		||||
                        name = "bintray"
 | 
			
		||||
                        url = uri("https://api.bintray.com/maven/${project.hasProperty('BINTRAY_USER') ? project.property('BINTRAY_USER') : System.getenv('BINTRAY_USER')}/PlaguBot/${project.name}/;publish=1;override=1")
 | 
			
		||||
                        credentials {
 | 
			
		||||
                            username = project.hasProperty('BINTRAY_USER') ? project.property('BINTRAY_USER') : System.getenv('BINTRAY_USER')
 | 
			
		||||
                            password = project.hasProperty('BINTRAY_KEY') ? project.property('BINTRAY_KEY') : System.getenv('BINTRAY_KEY')
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    
 | 
			
		||||
            repositories {
 | 
			
		||||
                if ((project.hasProperty('SONATYPE_USER') || System.getenv('SONATYPE_USER') != null) && (project.hasProperty('SONATYPE_PASSWORD') || System.getenv('SONATYPE_PASSWORD') != null)) {
 | 
			
		||||
                    maven {
 | 
			
		||||
                        name = "sonatype"
 | 
			
		||||
                        url = uri("https://oss.sonatype.org/service/local/staging/deploy/maven2/")
 | 
			
		||||
@@ -69,14 +58,24 @@ publishing {
 | 
			
		||||
                            password = project.hasProperty('SONATYPE_PASSWORD') ? project.property('SONATYPE_PASSWORD') : System.getenv('SONATYPE_PASSWORD')
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    
 | 
			
		||||
                }
 | 
			
		||||
            
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
signing {
 | 
			
		||||
    useGpgCmd()
 | 
			
		||||
    sign publishing.publications
 | 
			
		||||
if (project.hasProperty("signing.gnupg.keyName")) {
 | 
			
		||||
    apply plugin: 'signing'
 | 
			
		||||
    
 | 
			
		||||
    signing {
 | 
			
		||||
        useGpgCmd()
 | 
			
		||||
    
 | 
			
		||||
        sign publishing.publications
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    task signAll {
 | 
			
		||||
        tasks.withType(Sign).forEach {
 | 
			
		||||
            dependsOn(it)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								plugin/publish.kpsb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								plugin/publish.kpsb
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
{"licenses":[{"id":"Apache-2.0","title":"Apache Software License 2.0","url":"https://github.com/InsanusMokrassar/PlaguBot/LICENSE"}],"mavenConfig":{"name":"PlaguBot Plugin","description":"Base dependency for whole PlaguBot project","url":"https://github.com/InsanusMokrassar/PlaguBot","vcsUrl":"ssh://git@github.com/InsanusMokrassar/PlaguBot.git","developers":[{"id":"InsanusMokrassar","name":"Aleksei Ovsiannikov","eMail":"ovsyannikov.alexey95@gmail.com"}],"repositories":[{"name":"sonatype","url":"https://oss.sonatype.org/service/local/staging/deploy/maven2/"}],"gpgSigning":{"type":"dev.inmo.kmppscriptbuilder.core.models.GpgSigning.Optional"}},"type":"JVM"}
 | 
			
		||||
@@ -6,9 +6,13 @@ import dev.inmo.tgbotapi.types.BotCommand
 | 
			
		||||
import dev.inmo.tgbotapi.updateshandlers.FlowsUpdatesFilter
 | 
			
		||||
import kotlinx.coroutines.CoroutineScope
 | 
			
		||||
import kotlinx.serialization.Serializable
 | 
			
		||||
import kotlinx.serialization.json.JsonObject
 | 
			
		||||
import org.jetbrains.exposed.sql.Database
 | 
			
		||||
import org.koin.core.KoinApplication
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * **ANY REALIZATION OF [Plugin] MUST HAVE CONSTRUCTOR WITH ABSENCE OF INCOMING PARAMETERS**
 | 
			
		||||
 *
 | 
			
		||||
 * Use this interface for your bot. It is possible to use [kotlinx.serialization.SerialName] annotations on your plugins
 | 
			
		||||
 * to set up short name for your plugin. Besides, simple name of your class will be used as key for deserialization
 | 
			
		||||
 * too.
 | 
			
		||||
@@ -22,26 +26,20 @@ interface Plugin {
 | 
			
		||||
     */
 | 
			
		||||
    suspend fun getCommands(): List<BotCommand> = emptyList()
 | 
			
		||||
 | 
			
		||||
    @Deprecated("Override other method with receiver BehaviourContext")
 | 
			
		||||
    suspend operator fun invoke(
 | 
			
		||||
        bot: TelegramBot,
 | 
			
		||||
    /**
 | 
			
		||||
     * This method (usually) will be invoked just one time in the whole application.
 | 
			
		||||
     */
 | 
			
		||||
    suspend operator fun BehaviourContext.invoke(
 | 
			
		||||
        database: Database,
 | 
			
		||||
        updatesFilter: FlowsUpdatesFilter,
 | 
			
		||||
        scope: CoroutineScope
 | 
			
		||||
        koinApplication: KoinApplication,
 | 
			
		||||
    ) {}
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * This method (usually) will be invoked just one time in the whole application.
 | 
			
		||||
     */
 | 
			
		||||
    suspend operator fun BehaviourContext.invoke(
 | 
			
		||||
        database: Database
 | 
			
		||||
    ) = invoke(bot, database, flowsUpdatesFilter, scope)
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * This method (usually) will be invoked just one time in the whole application.
 | 
			
		||||
     */
 | 
			
		||||
    suspend operator fun BehaviourContext.invoke(
 | 
			
		||||
        database: Database,
 | 
			
		||||
        params: Map<String, Any>
 | 
			
		||||
    ) = invoke(database)
 | 
			
		||||
        koinApplication: KoinApplication,
 | 
			
		||||
        params: JsonObject
 | 
			
		||||
    ) = invoke(database, koinApplication)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,53 +1,24 @@
 | 
			
		||||
package dev.inmo.plagubot
 | 
			
		||||
 | 
			
		||||
import kotlinx.serialization.*
 | 
			
		||||
import kotlinx.serialization.KSerializer
 | 
			
		||||
import kotlinx.serialization.Serializer
 | 
			
		||||
import kotlinx.serialization.builtins.serializer
 | 
			
		||||
import kotlinx.serialization.descriptors.SerialDescriptor
 | 
			
		||||
import kotlinx.serialization.encoding.Decoder
 | 
			
		||||
import kotlinx.serialization.encoding.Encoder
 | 
			
		||||
import kotlinx.serialization.json.*
 | 
			
		||||
 | 
			
		||||
private val defaultJson = Json {
 | 
			
		||||
    ignoreUnknownKeys = true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@Serializer(Plugin::class)
 | 
			
		||||
object PluginSerializer : KSerializer<Plugin> {
 | 
			
		||||
    private val polymorphic = PolymorphicSerializer(Plugin::class)
 | 
			
		||||
    override val descriptor: SerialDescriptor = JsonObject.serializer().descriptor
 | 
			
		||||
class PluginSerializer : KSerializer<Plugin> {
 | 
			
		||||
    override val descriptor: SerialDescriptor
 | 
			
		||||
        get() = String.serializer().descriptor
 | 
			
		||||
 | 
			
		||||
    @OptIn(InternalSerializationApi::class)
 | 
			
		||||
    override fun deserialize(decoder: Decoder): Plugin {
 | 
			
		||||
        val format = (decoder as? JsonDecoder) ?.json ?: defaultJson
 | 
			
		||||
        val asJson = JsonElement.serializer().deserialize(decoder)
 | 
			
		||||
        val jsonObject = (asJson as? JsonObject)
 | 
			
		||||
 | 
			
		||||
        val type = (jsonObject ?.get("type") as? JsonPrimitive) ?.contentOrNull
 | 
			
		||||
        val external = if (type != null) {
 | 
			
		||||
            try {
 | 
			
		||||
                Class.forName(type) ?.kotlin ?.serializerOrNull()
 | 
			
		||||
            } catch (e: Exception) {
 | 
			
		||||
                null
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            null
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return if (jsonObject != null && external != null) {
 | 
			
		||||
            format.decodeFromJsonElement(
 | 
			
		||||
                external as KSerializer<Plugin>,
 | 
			
		||||
                JsonObject(jsonObject.toMutableMap().also { it.remove("type") })
 | 
			
		||||
            )
 | 
			
		||||
        } else {
 | 
			
		||||
            format.decodeFromJsonElement(
 | 
			
		||||
                polymorphic,
 | 
			
		||||
                asJson
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
        return Class.forName(decoder.decodeString()).getDeclaredConstructor().newInstance() as Plugin
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @OptIn(InternalSerializationApi::class)
 | 
			
		||||
    override fun serialize(encoder: Encoder, value: Plugin) {
 | 
			
		||||
        val serializer = (value::class.serializerOrNull() ?: polymorphic) as KSerializer<Plugin>
 | 
			
		||||
        serializer.serialize(encoder, value)
 | 
			
		||||
        encoder.encodeString(
 | 
			
		||||
            value::class.java.canonicalName
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user