Compare commits

..

18 Commits
0.1.4 ... 0.1.9

Author SHA1 Message Date
3a718f8652 Update gradle.properties 2021-04-25 09:45:47 +06:00
6f70c9eab3 Update CHANGELOG.md 2021-04-25 09:41:36 +06:00
ca98c74952 start 0.1.9 2021-04-25 09:35:35 +06:00
4fd6922864 Merge pull request #14 from InsanusMokrassar/0.1.8
0.1.8
2021-04-05 21:27:52 +06:00
1b700857fa update dependencies 2021-04-05 21:27:16 +06:00
64f35ab233 start 0.1.8 2021-04-05 21:26:46 +06:00
f7207688e4 Merge pull request #13 from InsanusMokrassar/0.1.7
0.1.7
2021-04-03 23:02:17 +06:00
d94df49795 optimize imports 2021-04-03 22:07:43 +06:00
1ffb7a1999 update of versions 2021-04-03 22:05:18 +06:00
8444172e44 PlaguBot class 2021-04-03 22:04:18 +06:00
15109391b1 start 0.1.7 2021-04-03 16:04:18 +06:00
175715d769 Merge pull request #12 from InsanusMokrassar/0.1.6
0.1.6
2021-03-30 15:26:06 +06:00
6fa5ccdbe2 update dependencies 2021-03-30 15:24:31 +06:00
f5b562ac01 start 0.1.6 2021-03-30 15:23:47 +06:00
362f5acccf Merge pull request #11 from InsanusMokrassar/0.1.5
0.1.5
2021-03-12 21:51:25 +06:00
c2208b1efb fix build 2021-03-12 21:49:21 +06:00
1a957f808c 0.1.5 2021-03-12 21:45:23 +06:00
152b6e7660 Merge pull request #10 from InsanusMokrassar/0.1.4
0.1.4
2021-02-22 19:10:50 +06:00
6 changed files with 114 additions and 36 deletions

View File

@@ -1,5 +1,46 @@
# Changelog
## 0.1.9
* `Versions`
* `tgbotapi`: `0.33.3` -> `0.33.4`
* `microutils`: `0.4.33` -> `0.4.36`
* `exposed`: `0.30.1` -> `0.30.2`
## 0.1.8
* `Versions`
* `tgbotapi`: `0.33.2` -> `0.33.3`
* `microutils`: `0.4.32` -> `0.4.33`
## 0.1.7
* `Versions`
* `exposed`: `0.29.1` -> `0.30.1`
* `tgbotapi`: `0.33.1` -> `0.33.2`
* `microutils`: `0.4.31` -> `0.4.32`
* `PlaguBot`
* New class `PlaguBot` (😊)
* `initPlaguBot` is deprecated
* New shortcut for params - `plagubot`. `PlaguBot` class can be put inside other plagubot
for additional opportunities
## 0.1.6
* `Versions`
* `kotlin`: `1.4.31` -> `1.4.32`
* `tgbotapi`: `0.33.0` -> `0.33.1`
* `microutils`: `0.4.29` -> `0.4.31`
## 0.1.5
* `Versions`
* `kotlin`: `1.4.30` -> `1.4.31`
* `serialization`: `1.1.0-RC` -> `1.1.0`
* `coroutines`: `1.4.2` -> `1.4.3`
* `tgbotapi`: `0.32.8` -> `0.33.0`
* `microutils`: `0.4.26` -> `0.4.29`
## 0.1.4
* `Versions`

View File

@@ -26,7 +26,6 @@ dependencies {
api "org.xerial:sqlite-jdbc:$sqlite_version"
testImplementation "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"
testImplementation "org.jetbrains.kotlin:kotlin-test-annotations-jvm:$kotlin_version"
api project(":plagubot.plugin")
}

View File

@@ -1,38 +1,21 @@
package dev.inmo.plagubot
import dev.inmo.micro_utils.coroutines.safelyWithoutExceptions
import dev.inmo.plagubot.config.*
import dev.inmo.plagubot.config.configJsonFormat
import dev.inmo.tgbotapi.bot.Ktor.telegramBot
import dev.inmo.tgbotapi.extensions.api.bot.setMyCommands
import dev.inmo.tgbotapi.extensions.behaviour_builder.buildBehaviour
import dev.inmo.tgbotapi.types.botCommandsLimit
import kotlinx.coroutines.*
import kotlinx.serialization.InternalSerializationApi
import java.io.File
@Deprecated(
"This method is redundant due to new class PlaguBot",
ReplaceWith(
"PlaguBot(config).start(scope)",
"dev.inmo.plagubot.PlaguBot"
)
)
suspend inline fun initPlaguBot(
config: Config,
scope: CoroutineScope = CoroutineScope(Dispatchers.Default)
): Job {
val bot = telegramBot(config.botToken)
val paramsMap = config.params ?.toMap() ?: emptyMap()
val database = config.params ?.database ?: config.database.database
return bot.buildBehaviour(scope) {
val commands = config.plugins.flatMap {
it.apply { invoke(database, paramsMap) }
it.getCommands()
}.let {
val futureUnavailable = it.drop(botCommandsLimit.last)
if (futureUnavailable.isNotEmpty()) {
println("Next commands are out of range in setting command request and will be unavailable from autocompleting: ${futureUnavailable}")
}
it.take(botCommandsLimit.last)
}
safelyWithoutExceptions { setMyCommands(commands) }
}
}
): Job = PlaguBot(config).start(scope)
/**
* This method by default expects one argument in [args] field: path to config
@@ -43,6 +26,5 @@ suspend fun main(args: Array<String>) {
val file = File(configPath)
val config = configJsonFormat.decodeFromString(ConfigSerializer, file.readText())
val scope = CoroutineScope(Dispatchers.Default)
initPlaguBot(config, scope).join()
PlaguBot(config).start().join()
}

View File

@@ -0,0 +1,56 @@
package dev.inmo.plagubot
import dev.inmo.micro_utils.coroutines.safelyWithoutExceptions
import dev.inmo.plagubot.config.Config
import dev.inmo.plagubot.config.database
import dev.inmo.tgbotapi.bot.Ktor.telegramBot
import dev.inmo.tgbotapi.extensions.api.bot.setMyCommands
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext
import dev.inmo.tgbotapi.extensions.behaviour_builder.buildBehaviour
import dev.inmo.tgbotapi.types.BotCommand
import dev.inmo.tgbotapi.types.botCommandsLimit
import kotlinx.coroutines.*
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import org.jetbrains.exposed.sql.Database
const val DefaultPlaguBotParamsKey = "plagubot"
val Map<String, Any>.plagubot
get() = get(DefaultPlaguBotParamsKey) as? PlaguBot
@Serializable
data class PlaguBot(
private val config: Config
) : Plugin {
@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 {
it.getCommands()
}
override suspend fun BehaviourContext.invoke(database: Database, params: Map<String, Any>) {
config.plugins.forEach {
it.apply { invoke(database, params) }
}
val commands = getCommands()
val futureUnavailable = commands.drop(botCommandsLimit.last)
if (futureUnavailable.isNotEmpty()) {
println("Next commands are out of range in setting command request and will be unavailable from autocompleting: $futureUnavailable")
}
safelyWithoutExceptions { setMyCommands(commands.take(botCommandsLimit.last)) }
}
/**
* This method will create an [Job] which will be the main [Job] of ran instance
*/
suspend fun start(
scope: CoroutineScope = CoroutineScope(Dispatchers.Default)
): Job = bot.buildBehaviour(scope) {
invoke(database, paramsMap)
}
}

View File

@@ -4,14 +4,14 @@ org.gradle.parallel=true
kotlin.js.generate.externals=true
kotlin.incremental=true
kotlin_version=1.4.30
kotlin_coroutines_version=1.4.2
kotlin_serialisation_runtime_version=1.1.0-RC
kotlin_exposed_version=0.29.1
kotlin_version=1.4.32
kotlin_coroutines_version=1.4.3
kotlin_serialisation_runtime_version=1.1.0
kotlin_exposed_version=0.30.2
sdi_version=0.4.1
tgbotapi_version=0.32.8
microutils_version=0.4.26
tgbotapi_version=0.33.4
microutils_version=0.4.36
klassindex_version=4.1.0-rc.1
sqlite_version=3.30.1
@@ -19,4 +19,4 @@ sqlite_version=3.30.1
github_release_plugin_version=2.2.12
group=dev.inmo
version=0.1.4
version=0.1.9

View File

@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.2-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists