mirror of
https://github.com/InsanusMokrassar/PlaguBot.git
synced 2024-11-23 07:58:43 +00:00
remove redundant modules
This commit is contained in:
parent
08b797bbc2
commit
751e9aa66c
@ -16,6 +16,7 @@ dependencies {
|
|||||||
api libs.jb.exposed.jdbc
|
api libs.jb.exposed.jdbc
|
||||||
|
|
||||||
api libs.tgbotapi
|
api libs.tgbotapi
|
||||||
|
api libs.tgbotapi.behaviourBuilder.fsm
|
||||||
api libs.microutils.repos.exposed
|
api libs.microutils.repos.exposed
|
||||||
api libs.kslog
|
api libs.kslog
|
||||||
|
|
||||||
|
@ -3,12 +3,14 @@ package dev.inmo.plagubot
|
|||||||
import dev.inmo.kslog.common.*
|
import dev.inmo.kslog.common.*
|
||||||
import dev.inmo.micro_utils.common.Warning
|
import dev.inmo.micro_utils.common.Warning
|
||||||
import dev.inmo.micro_utils.coroutines.runCatchingSafely
|
import dev.inmo.micro_utils.coroutines.runCatchingSafely
|
||||||
import dev.inmo.plagubot.config.Config
|
import dev.inmo.micro_utils.fsm.common.State
|
||||||
import dev.inmo.plagubot.config.defaultJsonFormat
|
import dev.inmo.micro_utils.fsm.common.StatesManager
|
||||||
|
import dev.inmo.micro_utils.fsm.common.managers.DefaultStatesManager
|
||||||
|
import dev.inmo.micro_utils.fsm.common.managers.InMemoryDefaultStatesManagerRepo
|
||||||
|
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.webhook.deleteWebhook
|
import dev.inmo.tgbotapi.extensions.api.webhook.deleteWebhook
|
||||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext
|
import dev.inmo.tgbotapi.extensions.behaviour_builder.*
|
||||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.buildBehaviour
|
|
||||||
import dev.inmo.tgbotapi.extensions.utils.updates.retrieving.startGettingOfUpdatesByLongPolling
|
import dev.inmo.tgbotapi.extensions.utils.updates.retrieving.startGettingOfUpdatesByLongPolling
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
@ -94,7 +96,19 @@ data class PlaguBot(
|
|||||||
GlobalContext.startKoin(koinApp)
|
GlobalContext.startKoin(koinApp)
|
||||||
logger.i("Koin started")
|
logger.i("Koin started")
|
||||||
lateinit var behaviourContext: BehaviourContext
|
lateinit var behaviourContext: BehaviourContext
|
||||||
bot.buildBehaviour(scope = scope) {
|
bot.buildBehaviourWithFSM(
|
||||||
|
scope = scope,
|
||||||
|
defaultExceptionsHandler = {
|
||||||
|
logger.e("Something went wrong", it)
|
||||||
|
},
|
||||||
|
statesManager = koinApp.koin.getOrNull<StatesManager<State>>() ?: DefaultStatesManager(
|
||||||
|
InMemoryDefaultStatesManagerRepo<State>()
|
||||||
|
),
|
||||||
|
onStateHandlingErrorHandler = koinApp.koin.getOrNull<FallbackStateHandler<State>>() ?: { state, e ->
|
||||||
|
logger.eS(e) { "Unable to handle state $state" }
|
||||||
|
null
|
||||||
|
}
|
||||||
|
) {
|
||||||
logger.i("Start setup of bot part")
|
logger.i("Start setup of bot part")
|
||||||
behaviourContext = this
|
behaviourContext = this
|
||||||
setupBotPlugin(koinApp.koin)
|
setupBotPlugin(koinApp.koin)
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
package dev.inmo.plagubot.config
|
||||||
|
|
||||||
|
typealias FallbackStateHandler<T> = suspend (T, Throwable) -> T?
|
@ -1,38 +0,0 @@
|
|||||||
plugins {
|
|
||||||
id 'org.jetbrains.kotlin.jvm'
|
|
||||||
id "org.jetbrains.kotlin.plugin.serialization"
|
|
||||||
id 'application'
|
|
||||||
}
|
|
||||||
|
|
||||||
project.group="$group"
|
|
||||||
project.version="$version"
|
|
||||||
|
|
||||||
apply from: "publish.gradle"
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
implementation libs.kt.stdlib
|
|
||||||
api libs.kt.coroutines
|
|
||||||
api libs.kt.serialization
|
|
||||||
api libs.jb.exposed.jdbc
|
|
||||||
|
|
||||||
api libs.tgbotapi
|
|
||||||
api libs.microutils.repos.exposed
|
|
||||||
api libs.kslog
|
|
||||||
|
|
||||||
api libs.sqlite
|
|
||||||
|
|
||||||
testImplementation libs.kt.test.junit
|
|
||||||
|
|
||||||
api project(":plagubot.bot")
|
|
||||||
api project(":plagubot.fsm.plugin")
|
|
||||||
}
|
|
||||||
|
|
||||||
application {
|
|
||||||
mainClassName = 'dev.inmo.plagubot.AppKt'
|
|
||||||
}
|
|
||||||
|
|
||||||
java {
|
|
||||||
sourceCompatibility = JavaVersion.VERSION_1_8
|
|
||||||
targetCompatibility = JavaVersion.VERSION_1_8
|
|
||||||
}
|
|
||||||
|
|
@ -1,81 +0,0 @@
|
|||||||
apply plugin: 'maven-publish'
|
|
||||||
|
|
||||||
task javadocJar(type: Jar) {
|
|
||||||
from javadoc
|
|
||||||
classifier = 'javadoc'
|
|
||||||
}
|
|
||||||
task sourcesJar(type: Jar) {
|
|
||||||
from sourceSets.main.allSource
|
|
||||||
classifier = 'sources'
|
|
||||||
}
|
|
||||||
|
|
||||||
publishing {
|
|
||||||
publications {
|
|
||||||
maven(MavenPublication) {
|
|
||||||
from components.java
|
|
||||||
|
|
||||||
artifact javadocJar
|
|
||||||
artifact sourcesJar
|
|
||||||
|
|
||||||
pom {
|
|
||||||
resolveStrategy = Closure.DELEGATE_FIRST
|
|
||||||
|
|
||||||
description = "Base PlaguBot project"
|
|
||||||
name = "PlaguBot Bot"
|
|
||||||
url = "https://github.com/InsanusMokrassar/PlaguBot"
|
|
||||||
|
|
||||||
scm {
|
|
||||||
developerConnection = "scm:git:[fetch=]ssh://git@github.com/InsanusMokrassar/PlaguBot.git[push=]ssh://git@github.com/InsanusMokrassar/PlaguBot.git"
|
|
||||||
url = "ssh://git@github.com/InsanusMokrassar/PlaguBot.git"
|
|
||||||
}
|
|
||||||
|
|
||||||
developers {
|
|
||||||
|
|
||||||
developer {
|
|
||||||
id = "InsanusMokrassar"
|
|
||||||
name = "Aleksei Ovsiannikov"
|
|
||||||
email = "ovsyannikov.alexey95@gmail.com"
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
licenses {
|
|
||||||
|
|
||||||
license {
|
|
||||||
name = "Apache Software License 2.0"
|
|
||||||
url = "https://github.com/InsanusMokrassar/PlaguBot/LICENSE"
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
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/")
|
|
||||||
credentials {
|
|
||||||
username = project.hasProperty('SONATYPE_USER') ? project.property('SONATYPE_USER') : System.getenv('SONATYPE_USER')
|
|
||||||
password = project.hasProperty('SONATYPE_PASSWORD') ? project.property('SONATYPE_PASSWORD') : System.getenv('SONATYPE_PASSWORD')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (project.hasProperty("signing.gnupg.keyName")) {
|
|
||||||
apply plugin: 'signing'
|
|
||||||
|
|
||||||
signing {
|
|
||||||
useGpgCmd()
|
|
||||||
|
|
||||||
sign publishing.publications
|
|
||||||
}
|
|
||||||
|
|
||||||
task signAll {
|
|
||||||
tasks.withType(Sign).forEach {
|
|
||||||
dependsOn(it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1 +0,0 @@
|
|||||||
{"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"}
|
|
@ -1,25 +0,0 @@
|
|||||||
package dev.inmo.plagubot
|
|
||||||
|
|
||||||
import dev.inmo.kslog.common.KSLog
|
|
||||||
import dev.inmo.kslog.common.i
|
|
||||||
import dev.inmo.plagubot.config.Config
|
|
||||||
import dev.inmo.plagubot.config.defaultJsonFormat
|
|
||||||
import kotlinx.serialization.InternalSerializationApi
|
|
||||||
import kotlinx.serialization.json.jsonObject
|
|
||||||
import java.io.File
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method by default expects one argument in [args] field: path to config
|
|
||||||
*/
|
|
||||||
@InternalSerializationApi
|
|
||||||
suspend fun main(args: Array<String>) {
|
|
||||||
KSLog.default = KSLog("PlaguBot")
|
|
||||||
val (configPath) = args
|
|
||||||
val file = File(configPath)
|
|
||||||
KSLog.i("Start read config from ${file.absolutePath}")
|
|
||||||
val json = defaultJsonFormat.parseToJsonElement(file.readText()).jsonObject
|
|
||||||
val config = defaultJsonFormat.decodeFromJsonElement(Config.serializer(), json)
|
|
||||||
KSLog.i("Config has been read")
|
|
||||||
|
|
||||||
FSMPlaguBot(json, config).start().join()
|
|
||||||
}
|
|
@ -1,112 +0,0 @@
|
|||||||
package dev.inmo.plagubot
|
|
||||||
|
|
||||||
import dev.inmo.kslog.common.*
|
|
||||||
import dev.inmo.micro_utils.common.Warning
|
|
||||||
import dev.inmo.micro_utils.coroutines.runCatchingSafely
|
|
||||||
import dev.inmo.plagubot.config.Config
|
|
||||||
import dev.inmo.plagubot.config.defaultJsonFormat
|
|
||||||
import dev.inmo.plagubot.fsm.FSMPlugin
|
|
||||||
import dev.inmo.tgbotapi.bot.ktor.telegramBot
|
|
||||||
import dev.inmo.tgbotapi.extensions.api.webhook.deleteWebhook
|
|
||||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.*
|
|
||||||
import dev.inmo.tgbotapi.extensions.utils.updates.retrieving.startGettingOfUpdatesByLongPolling
|
|
||||||
import kotlinx.coroutines.*
|
|
||||||
import kotlinx.serialization.Serializable
|
|
||||||
import kotlinx.serialization.Transient
|
|
||||||
import kotlinx.serialization.json.JsonObject
|
|
||||||
import org.jetbrains.exposed.sql.Database
|
|
||||||
import org.koin.core.Koin
|
|
||||||
import org.koin.core.KoinApplication
|
|
||||||
import org.koin.core.context.GlobalContext
|
|
||||||
import org.koin.core.module.Module
|
|
||||||
import org.koin.core.scope.Scope
|
|
||||||
import org.koin.dsl.module
|
|
||||||
|
|
||||||
val Scope.fsmPlagubot: FSMPlaguBot
|
|
||||||
get() = get()
|
|
||||||
|
|
||||||
val Koin.fsmPlagubot: FSMPlaguBot
|
|
||||||
get() = get()
|
|
||||||
|
|
||||||
@OptIn(Warning::class)
|
|
||||||
@Serializable
|
|
||||||
data class FSMPlaguBot(
|
|
||||||
private val json: JsonObject,
|
|
||||||
private val config: Config
|
|
||||||
) : FSMPlugin {
|
|
||||||
@Transient
|
|
||||||
private val bot = telegramBot(config.botToken)
|
|
||||||
|
|
||||||
override fun Module.setupDI(database: Database, params: JsonObject) {
|
|
||||||
single { config }
|
|
||||||
single { config.plugins }
|
|
||||||
single { config.databaseConfig }
|
|
||||||
single { config.databaseConfig.database }
|
|
||||||
single { defaultJsonFormat }
|
|
||||||
single { this@FSMPlaguBot }
|
|
||||||
|
|
||||||
includes(
|
|
||||||
config.plugins.mapNotNull {
|
|
||||||
runCatching {
|
|
||||||
module {
|
|
||||||
with(it) {
|
|
||||||
setupDI(database, params)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}.onFailure { e ->
|
|
||||||
logger.w("Unable to load DI part of $it", e)
|
|
||||||
}.getOrNull()
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun BehaviourContextWithFSM<*>.setupBotPlugin(koin: Koin) {
|
|
||||||
config.plugins.map { plugin ->
|
|
||||||
launch {
|
|
||||||
runCatchingSafely {
|
|
||||||
logger.i("Start loading of $plugin")
|
|
||||||
with(plugin) {
|
|
||||||
if (this is FSMPlugin) {
|
|
||||||
setupBotPlugin(koin) // use setupBotPlugin with BehaviourContextWithFSM as receiver
|
|
||||||
} else {
|
|
||||||
setupBotPlugin(koin) // use setupBotPlugin with BehaviourContext as receiver
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}.onFailure { e ->
|
|
||||||
logger.w("Unable to load bot part of $plugin", e)
|
|
||||||
}.onSuccess {
|
|
||||||
logger.i("Complete loading of $plugin")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}.joinAll()
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method will create an [Job] which will be the main [Job] of ran instance
|
|
||||||
*/
|
|
||||||
suspend fun start(
|
|
||||||
scope: CoroutineScope = CoroutineScope(Dispatchers.IO)
|
|
||||||
): Job {
|
|
||||||
logger.i("Start initialization")
|
|
||||||
val koinApp = KoinApplication.init()
|
|
||||||
koinApp.modules(
|
|
||||||
module {
|
|
||||||
setupDI(config.databaseConfig.database, json)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
logger.i("Modules loaded")
|
|
||||||
GlobalContext.startKoin(koinApp)
|
|
||||||
logger.i("Koin started")
|
|
||||||
lateinit var behaviourContext: BehaviourContext
|
|
||||||
bot.buildBehaviourWithFSM (scope = scope) {
|
|
||||||
logger.i("Start setup of bot part")
|
|
||||||
behaviourContext = this
|
|
||||||
setupBotPlugin(koinApp.koin)
|
|
||||||
deleteWebhook()
|
|
||||||
}
|
|
||||||
logger.i("Behaviour builder has been setup")
|
|
||||||
return bot.startGettingOfUpdatesByLongPolling(scope = behaviourContext, updatesFilter = behaviourContext).also {
|
|
||||||
logger.i("Long polling has been started")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
package dev.inmo.plagubot
|
|
||||||
|
|
||||||
import dev.inmo.kslog.common.*
|
|
||||||
import dev.inmo.tgbotapi.extensions.api.bot.getMe
|
|
||||||
import dev.inmo.tgbotapi.extensions.api.send.reply
|
|
||||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext
|
|
||||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onCommand
|
|
||||||
import kotlinx.serialization.SerialName
|
|
||||||
import kotlinx.serialization.Serializable
|
|
||||||
import kotlinx.serialization.json.Json
|
|
||||||
import kotlinx.serialization.json.JsonObject
|
|
||||||
import org.jetbrains.exposed.sql.Database
|
|
||||||
import org.koin.core.Koin
|
|
||||||
import org.koin.core.module.Module
|
|
||||||
|
|
||||||
@Serializable
|
|
||||||
@SerialName("Hello")
|
|
||||||
object HelloFSMPlugin : Plugin {
|
|
||||||
@Serializable
|
|
||||||
data class HelloPluginConfig(
|
|
||||||
val print: String
|
|
||||||
)
|
|
||||||
|
|
||||||
override fun Module.setupDI(database: Database, params: JsonObject) {
|
|
||||||
single {
|
|
||||||
get<Json>().decodeFromJsonElement(HelloPluginConfig.serializer(), params["helloPlugin"] ?: return@single null)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun BehaviourContext.setupBotPlugin(koin: Koin) {
|
|
||||||
logger.d { koin.get<HelloPluginConfig>().print }
|
|
||||||
logger.dS { getMe().toString() }
|
|
||||||
onCommand("hello_world") {
|
|
||||||
reply(it, "Hello :)")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,21 +0,0 @@
|
|||||||
plugins {
|
|
||||||
id 'org.jetbrains.kotlin.jvm'
|
|
||||||
id "org.jetbrains.kotlin.plugin.serialization"
|
|
||||||
}
|
|
||||||
|
|
||||||
project.group="$group"
|
|
||||||
project.version="$version"
|
|
||||||
|
|
||||||
apply from: "publish.gradle"
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
implementation libs.kt.stdlib
|
|
||||||
|
|
||||||
api libs.tgbotapi.behaviourBuilder.fsm
|
|
||||||
api project(":plagubot.plugin")
|
|
||||||
}
|
|
||||||
|
|
||||||
java {
|
|
||||||
sourceCompatibility = JavaVersion.VERSION_1_8
|
|
||||||
targetCompatibility = JavaVersion.VERSION_1_8
|
|
||||||
}
|
|
@ -1,81 +0,0 @@
|
|||||||
apply plugin: 'maven-publish'
|
|
||||||
|
|
||||||
task javadocJar(type: Jar) {
|
|
||||||
from javadoc
|
|
||||||
classifier = 'javadoc'
|
|
||||||
}
|
|
||||||
task sourcesJar(type: Jar) {
|
|
||||||
from sourceSets.main.allSource
|
|
||||||
classifier = 'sources'
|
|
||||||
}
|
|
||||||
|
|
||||||
publishing {
|
|
||||||
publications {
|
|
||||||
maven(MavenPublication) {
|
|
||||||
from components.java
|
|
||||||
|
|
||||||
artifact javadocJar
|
|
||||||
artifact sourcesJar
|
|
||||||
|
|
||||||
pom {
|
|
||||||
resolveStrategy = Closure.DELEGATE_FIRST
|
|
||||||
|
|
||||||
description = "Base dependency for whole PlaguBot project"
|
|
||||||
name = "PlaguBot Plugin"
|
|
||||||
url = "https://github.com/InsanusMokrassar/PlaguBot"
|
|
||||||
|
|
||||||
scm {
|
|
||||||
developerConnection = "scm:git:[fetch=]ssh://git@github.com/InsanusMokrassar/PlaguBot.git[push=]ssh://git@github.com/InsanusMokrassar/PlaguBot.git"
|
|
||||||
url = "ssh://git@github.com/InsanusMokrassar/PlaguBot.git"
|
|
||||||
}
|
|
||||||
|
|
||||||
developers {
|
|
||||||
|
|
||||||
developer {
|
|
||||||
id = "InsanusMokrassar"
|
|
||||||
name = "Aleksei Ovsiannikov"
|
|
||||||
email = "ovsyannikov.alexey95@gmail.com"
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
licenses {
|
|
||||||
|
|
||||||
license {
|
|
||||||
name = "Apache Software License 2.0"
|
|
||||||
url = "https://github.com/InsanusMokrassar/PlaguBot/LICENSE"
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
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/")
|
|
||||||
credentials {
|
|
||||||
username = project.hasProperty('SONATYPE_USER') ? project.property('SONATYPE_USER') : System.getenv('SONATYPE_USER')
|
|
||||||
password = project.hasProperty('SONATYPE_PASSWORD') ? project.property('SONATYPE_PASSWORD') : System.getenv('SONATYPE_PASSWORD')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (project.hasProperty("signing.gnupg.keyName")) {
|
|
||||||
apply plugin: 'signing'
|
|
||||||
|
|
||||||
signing {
|
|
||||||
useGpgCmd()
|
|
||||||
|
|
||||||
sign publishing.publications
|
|
||||||
}
|
|
||||||
|
|
||||||
task signAll {
|
|
||||||
tasks.withType(Sign).forEach {
|
|
||||||
dependsOn(it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1 +0,0 @@
|
|||||||
{"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"}
|
|
@ -1,24 +0,0 @@
|
|||||||
package dev.inmo.plagubot.fsm
|
|
||||||
|
|
||||||
import dev.inmo.plagubot.Plugin
|
|
||||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext
|
|
||||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContextWithFSM
|
|
||||||
import kotlinx.serialization.Serializable
|
|
||||||
import kotlinx.serialization.json.JsonObject
|
|
||||||
import org.jetbrains.exposed.sql.Database
|
|
||||||
import org.koin.core.Koin
|
|
||||||
import org.koin.core.module.Module
|
|
||||||
|
|
||||||
/**
|
|
||||||
* **ANY REALIZATION OF [FSMPlugin] 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.
|
|
||||||
*/
|
|
||||||
@Serializable(FSMPluginSerializer::class)
|
|
||||||
interface FSMPlugin : Plugin {
|
|
||||||
suspend fun BehaviourContextWithFSM<*>.setupBotPlugin(koin: Koin) {
|
|
||||||
(this as BehaviourContext).setupBotPlugin(koin)
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,25 +0,0 @@
|
|||||||
package dev.inmo.plagubot.fsm
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
@Serializer(FSMPlugin::class)
|
|
||||||
class FSMPluginSerializer : KSerializer<FSMPlugin> {
|
|
||||||
override val descriptor: SerialDescriptor
|
|
||||||
get() = String.serializer().descriptor
|
|
||||||
|
|
||||||
override fun deserialize(decoder: Decoder): FSMPlugin {
|
|
||||||
val kclass = Class.forName(decoder.decodeString()).kotlin
|
|
||||||
return (kclass.objectInstance ?: kclass.constructors.first { it.parameters.isEmpty() }.call()) as FSMPlugin
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun serialize(encoder: Encoder, value: FSMPlugin) {
|
|
||||||
encoder.encodeString(
|
|
||||||
value::class.java.canonicalName
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,6 +1,8 @@
|
|||||||
package dev.inmo.plagubot
|
package dev.inmo.plagubot
|
||||||
|
|
||||||
|
import dev.inmo.micro_utils.fsm.common.State
|
||||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext
|
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext
|
||||||
|
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContextWithFSM
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import kotlinx.serialization.json.JsonObject
|
import kotlinx.serialization.json.JsonObject
|
||||||
import org.jetbrains.exposed.sql.Database
|
import org.jetbrains.exposed.sql.Database
|
||||||
@ -26,4 +28,7 @@ interface Plugin {
|
|||||||
suspend fun BehaviourContext.setupBotPlugin(
|
suspend fun BehaviourContext.setupBotPlugin(
|
||||||
koin: Koin
|
koin: Koin
|
||||||
) {}
|
) {}
|
||||||
|
suspend fun BehaviourContextWithFSM<State>.setupBotPlugin(koin: Koin) {
|
||||||
|
(this as BehaviourContext).setupBotPlugin(koin)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
String[] toInclude = [":bot", ":plugin", ":fsm:bot", ":fsm:plugin"]
|
String[] toInclude = [":bot", ":plugin"]
|
||||||
|
|
||||||
rootProject.name = 'plagubot'
|
rootProject.name = 'plagubot'
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user