diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c5bfc92..b365ec4 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,6 +9,7 @@ microutils = "0.12.16" kslog = "0.5.2" krontab = "0.8.1" tgbotapi-libraries = "0.5.5" +plagubot-plugins = "0.4.1" psql = "42.5.0" @@ -36,6 +37,7 @@ android-test-espresso-core = { module = "androidx.test.espresso:espresso-core", tgbotapi = { module = "dev.inmo:tgbotapi", version.ref = "tgbotapi" } plagubot-plugin = { module = "dev.inmo:plagubot.plugin", version.ref = "plagubot" } plagubot-bot = { module = "dev.inmo:plagubot.bot", version.ref = "plagubot" } +plagubot-plugins-inline-queries = { module = "dev.inmo:plagubot.plugins.inline.queries", version.ref = "plagubot-plugins" } microutils-repos-common = { module = "dev.inmo:micro_utils.repos.common", version.ref = "microutils" } microutils-repos-exposed = { module = "dev.inmo:micro_utils.repos.exposed", version.ref = "microutils" } microutils-repos-cache = { module = "dev.inmo:micro_utils.repos.cache", version.ref = "microutils" } diff --git a/inlines/build.gradle b/inlines/build.gradle index c3a8634..e7f55c0 100644 --- a/inlines/build.gradle +++ b/inlines/build.gradle @@ -15,6 +15,7 @@ kotlin { } jvmMain { dependencies { + api libs.plagubot.plugins.inline.queries } } } diff --git a/inlines/src/commonMain/kotlin/PackageInfo.kt b/inlines/src/commonMain/kotlin/PackageInfo.kt index 848be3b..434bc2c 100644 --- a/inlines/src/commonMain/kotlin/PackageInfo.kt +++ b/inlines/src/commonMain/kotlin/PackageInfo.kt @@ -1 +1 @@ -package dev.inmo.plaguposter.inlines +package dev.inmo.plagubot.plugins.inline.queries diff --git a/inlines/src/jvmMain/kotlin/Plugin.kt b/inlines/src/jvmMain/kotlin/Plugin.kt index 98550a5..0b94aa7 100644 --- a/inlines/src/jvmMain/kotlin/Plugin.kt +++ b/inlines/src/jvmMain/kotlin/Plugin.kt @@ -1,81 +1,21 @@ package dev.inmo.plaguposter.inlines -import dev.inmo.micro_utils.pagination.Pagination -import dev.inmo.micro_utils.pagination.utils.paginate +import dev.inmo.kslog.common.TagLogger +import dev.inmo.kslog.common.w import dev.inmo.plagubot.Plugin -import dev.inmo.plaguposter.common.ChatConfig -import dev.inmo.plaguposter.inlines.models.Format -import dev.inmo.plaguposter.inlines.models.OfferTemplate -import dev.inmo.plaguposter.inlines.repos.InlineTemplatesRepo -import dev.inmo.tgbotapi.bot.exceptions.RequestException -import dev.inmo.tgbotapi.extensions.api.answers.answerInlineQuery -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.onBaseInlineQuery -import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onCommand -import dev.inmo.tgbotapi.extensions.utils.types.buttons.* -import dev.inmo.tgbotapi.types.inlineQueryAnswerResultsLimit -import kotlinx.serialization.Serializable -import kotlinx.serialization.json.* -import org.jetbrains.exposed.sql.Database import org.koin.core.Koin -import org.koin.core.module.Module -object Plugin : Plugin { - @Serializable - internal data class Config( - val preset: List - ) - override fun Module.setupDI(database: Database, params: JsonObject) { - single { get().decodeFromJsonElement(Config.serializer(), params["inlines"] ?: return@single Config(emptyList())) } - single { InlineTemplatesRepo(getOrNull() ?.preset ?.toMutableSet() ?: mutableSetOf()) } - } +private val actualPlugin = dev.inmo.plagubot.plugins.inline.queries.Plugin +object Plugin : Plugin by actualPlugin { + private val log = TagLogger("InlinePlugin") override suspend fun BehaviourContext.setupBotPlugin(koin: Koin) { - val templatesRepo = koin.get() - onBaseInlineQuery { query -> - val page = query.offset.toIntOrNull() ?: 0 - val queryString = query.query.trim() - try { - answerInlineQuery( - query, - templatesRepo.templates.paginate( - Pagination( - page, - inlineQueryAnswerResultsLimit.last + 1 - ) - ).results.mapIndexedNotNull { index, offerTemplate -> - offerTemplate.createArticleResult( - index.toString(), - queryString - ) - }, - nextOffset = (page + 1).toString(), - cachedTime = 0 - ) - } catch (e: RequestException) { - bot.answerInlineQuery( - query, - cachedTime = 0 - ) - } + log.w { + "Built-in inline plugin has been deprecated. Use \"${actualPlugin::class.qualifiedName}\" instead" } - onCommand("help", requireOnlyCommandInMessage = true) { - reply( - it, - "Push the button above to see available commands", - replyMarkup = flatInlineKeyboard { - inlineQueryInCurrentChatButton("Toggle commands", "") - } - ) - } - koin.getOrNull() ?.apply { - addTemplate( - OfferTemplate( - "Trigger help button", - listOf(Format("/help")) - ) - ) + with(actualPlugin) { + setupBotPlugin(koin) } } } diff --git a/inlines/src/jvmMain/kotlin/models/Format.kt b/inlines/src/jvmMain/kotlin/models/Format.kt deleted file mode 100644 index 9b88dbf..0000000 --- a/inlines/src/jvmMain/kotlin/models/Format.kt +++ /dev/null @@ -1,40 +0,0 @@ -package dev.inmo.plaguposter.inlines.models - -import dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputTextMessageContent -import dev.inmo.tgbotapi.types.message.MarkdownV2 -import kotlinx.serialization.Serializable -import kotlinx.serialization.Transient - -@Serializable -data class Format( - val template: String, - val regexTemplate: String = "^$", - val splitBy: String? = null, - val enableMarkdownSupport: Boolean = false -) { - @Transient - val queryRegex = Regex(regexTemplate, RegexOption.DOT_MATCHES_ALL) - - init { - println(queryRegex) - } - - fun formatByRegex(with: String): String? { - return if (queryRegex.matches(with)) { - template.format(*(splitBy ?.let { with.split(it).toTypedArray() } ?: arrayOf(with))) - } else { - null - } - } - - fun createContent(with: String): InputTextMessageContent? { - return if (queryRegex.matches(with)) { - InputTextMessageContent( - template.format(*(splitBy ?.let { with.split(it).toTypedArray() } ?: arrayOf(with))), - if (enableMarkdownSupport) MarkdownV2 else null - ) - } else { - null - } - } -} diff --git a/inlines/src/jvmMain/kotlin/models/OfferTemplate.kt b/inlines/src/jvmMain/kotlin/models/OfferTemplate.kt deleted file mode 100644 index 55466d1..0000000 --- a/inlines/src/jvmMain/kotlin/models/OfferTemplate.kt +++ /dev/null @@ -1,22 +0,0 @@ -package dev.inmo.plaguposter.inlines.models - -import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultArticle -import kotlinx.serialization.Serializable - -@Serializable -data class OfferTemplate( - val title: String, - val formats: List = emptyList(), - val description: String? = null -) { - fun createArticleResult(id: String, query: String): InlineQueryResultArticle? = formats.firstOrNull { - it.queryRegex.matches(query) - } ?.createContent(query) ?.let { content -> - InlineQueryResultArticle( - id, - title, - content, - description = description - ) - } -} diff --git a/inlines/src/jvmMain/kotlin/repos/InlineTemplatesRepo.kt b/inlines/src/jvmMain/kotlin/repos/InlineTemplatesRepo.kt deleted file mode 100644 index 57b34d5..0000000 --- a/inlines/src/jvmMain/kotlin/repos/InlineTemplatesRepo.kt +++ /dev/null @@ -1,16 +0,0 @@ -package dev.inmo.plaguposter.inlines.repos - -import dev.inmo.plaguposter.inlines.models.OfferTemplate - -class InlineTemplatesRepo( - private val _templates: MutableSet -) { - internal val templates - get() = _templates.toList() - suspend fun addTemplate(offerTemplate: OfferTemplate): Boolean { - return _templates.add(offerTemplate) - } - suspend fun dropTemplate(offerTemplate: OfferTemplate): Boolean { - return _templates.remove(offerTemplate) - } -} diff --git a/inlines/src/main/AndroidManifest.xml b/inlines/src/main/AndroidManifest.xml index 41df2ea..4dbbf06 100644 --- a/inlines/src/main/AndroidManifest.xml +++ b/inlines/src/main/AndroidManifest.xml @@ -1 +1 @@ - + diff --git a/posts/src/jvmMain/kotlin/Plugin.kt b/posts/src/jvmMain/kotlin/Plugin.kt index 7b53695..c56f832 100644 --- a/posts/src/jvmMain/kotlin/Plugin.kt +++ b/posts/src/jvmMain/kotlin/Plugin.kt @@ -10,9 +10,9 @@ import dev.inmo.plaguposter.common.SuccessfulSymbol import dev.inmo.plaguposter.common.UnsuccessfulSymbol import dev.inmo.plaguposter.posts.exposed.ExposedPostsRepo import dev.inmo.plaguposter.common.ChatConfig -import dev.inmo.plaguposter.inlines.models.Format -import dev.inmo.plaguposter.inlines.models.OfferTemplate -import dev.inmo.plaguposter.inlines.repos.InlineTemplatesRepo +import dev.inmo.plagubot.plugins.inline.queries.models.Format +import dev.inmo.plagubot.plugins.inline.queries.models.OfferTemplate +import dev.inmo.plagubot.plugins.inline.queries.repos.InlineTemplatesRepo import dev.inmo.plaguposter.posts.repo.* import dev.inmo.plaguposter.posts.sending.PostPublisher import dev.inmo.tgbotapi.extensions.api.delete diff --git a/posts_registrar/src/jvmMain/kotlin/Plugin.kt b/posts_registrar/src/jvmMain/kotlin/Plugin.kt index 8840e6a..3eef447 100644 --- a/posts_registrar/src/jvmMain/kotlin/Plugin.kt +++ b/posts_registrar/src/jvmMain/kotlin/Plugin.kt @@ -5,9 +5,9 @@ import dev.inmo.micro_utils.fsm.common.State import dev.inmo.micro_utils.repos.create import dev.inmo.plagubot.Plugin import dev.inmo.plaguposter.common.* -import dev.inmo.plaguposter.inlines.models.Format -import dev.inmo.plaguposter.inlines.models.OfferTemplate -import dev.inmo.plaguposter.inlines.repos.InlineTemplatesRepo +import dev.inmo.plagubot.plugins.inline.queries.models.Format +import dev.inmo.plagubot.plugins.inline.queries.models.OfferTemplate +import dev.inmo.plagubot.plugins.inline.queries.repos.InlineTemplatesRepo import dev.inmo.plaguposter.posts.models.* import dev.inmo.plaguposter.posts.registrar.state.RegistrationState import dev.inmo.plaguposter.posts.repo.PostsRepo diff --git a/ratings/source/src/jvmMain/kotlin/Plugin.kt b/ratings/source/src/jvmMain/kotlin/Plugin.kt index 9cb3228..6c58f56 100644 --- a/ratings/source/src/jvmMain/kotlin/Plugin.kt +++ b/ratings/source/src/jvmMain/kotlin/Plugin.kt @@ -11,9 +11,9 @@ import dev.inmo.micro_utils.repos.pagination.getAll import dev.inmo.micro_utils.repos.set import dev.inmo.plagubot.Plugin import dev.inmo.plaguposter.common.* -import dev.inmo.plaguposter.inlines.models.Format -import dev.inmo.plaguposter.inlines.models.OfferTemplate -import dev.inmo.plaguposter.inlines.repos.InlineTemplatesRepo +import dev.inmo.plagubot.plugins.inline.queries.models.Format +import dev.inmo.plagubot.plugins.inline.queries.models.OfferTemplate +import dev.inmo.plagubot.plugins.inline.queries.repos.InlineTemplatesRepo import dev.inmo.plaguposter.posts.models.PostId import dev.inmo.plaguposter.posts.panel.PanelButtonBuilder import dev.inmo.plaguposter.posts.panel.PanelButtonsAPI diff --git a/runner/config.json b/runner/config.json index 93e4b88..4ba4f3a 100644 --- a/runner/config.json +++ b/runner/config.json @@ -7,13 +7,13 @@ }, "botToken": "1234567890:ABCDEFGHIJKLMNOP_qrstuvwxyz12345678", "plugins": [ + "dev.inmo.plagubot.plugins.inline.queries.Plugin", "dev.inmo.plaguposter.posts.Plugin", "dev.inmo.plaguposter.posts.registrar.Plugin", "dev.inmo.plaguposter.ratings.Plugin", "dev.inmo.plaguposter.ratings.source.Plugin", "dev.inmo.plaguposter.ratings.selector.Plugin", "dev.inmo.plaguposter.triggers.selector_with_timer.Plugin", - "dev.inmo.plaguposter.inlines.Plugin", "dev.inmo.plaguposter.triggers.command.Plugin", "dev.inmo.plaguposter.posts.panel.Plugin" ], diff --git a/sample/config.json b/sample/config.json index 91f1d29..a8fd9be 100644 --- a/sample/config.json +++ b/sample/config.json @@ -14,7 +14,7 @@ "dev.inmo.plaguposter.ratings.selector.Plugin", "dev.inmo.plaguposter.triggers.selector_with_timer.Plugin", "dev.inmo.plaguposter.ratings.gc.Plugin", - "dev.inmo.plaguposter.inlines.Plugin", + "dev.inmo.plagubot.plugins.inline.queries.Plugin", "dev.inmo.plaguposter.triggers.command.Plugin" ], "posts": { diff --git a/triggers/command/src/jvmMain/kotlin/Plugin.kt b/triggers/command/src/jvmMain/kotlin/Plugin.kt index 5423728..23e86e1 100644 --- a/triggers/command/src/jvmMain/kotlin/Plugin.kt +++ b/triggers/command/src/jvmMain/kotlin/Plugin.kt @@ -7,9 +7,9 @@ import dev.inmo.micro_utils.pagination.firstPageWithOneElementPagination import dev.inmo.plagubot.Plugin import dev.inmo.plaguposter.common.SuccessfulSymbol import dev.inmo.plaguposter.common.UnsuccessfulSymbol -import dev.inmo.plaguposter.inlines.models.Format -import dev.inmo.plaguposter.inlines.models.OfferTemplate -import dev.inmo.plaguposter.inlines.repos.InlineTemplatesRepo +import dev.inmo.plagubot.plugins.inline.queries.models.Format +import dev.inmo.plagubot.plugins.inline.queries.models.OfferTemplate +import dev.inmo.plagubot.plugins.inline.queries.repos.InlineTemplatesRepo import dev.inmo.plaguposter.posts.models.PostId import dev.inmo.plaguposter.posts.panel.PanelButtonBuilder import dev.inmo.plaguposter.posts.panel.PanelButtonsAPI