From 1446caaade093744c19c997e5314313f9fe64f7a Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 9 Sep 2022 22:59:49 +0600 Subject: [PATCH] almost fill readme and add samples --- README.md | 231 +++----------------------------------- runner/deploy.sh | 3 +- sample/.env | 5 + sample/config.json | 138 +++++++++++++++++++++++ sample/docker-compose.yml | 23 ++++ 5 files changed, 184 insertions(+), 216 deletions(-) create mode 100644 sample/.env create mode 100644 sample/config.json create mode 100644 sample/docker-compose.yml diff --git a/README.md b/README.md index f3bb736..929f2e6 100644 --- a/README.md +++ b/README.md @@ -1,224 +1,27 @@ -# How to use +# PlaguPoster -That is a template for Kotlin Multiplatform Projects. How to use it: +This is a posting system for the Telegram based on usage of three chats: -* Create your repository from this template -* Add `local.properties` file in case you plan to use `Android` target (you must set up location of SDK, it will not be tracked by `git` and it is correct behaviour). In the snippet below you may see approximate content of `local.properties` file: -```properties -## This file must *NOT* be checked into Version Control Systems, -# as it contains information specific to your local configuration. -# -# Location of the SDK. This is only used by Gradle. -# For customization when using a Version Control System, please read the -# header note. -sdk.dir=/your/path/to/android/sdk -``` -* Replace in a whole project `project_group` by your group -* Replace in a whole project `project_name` by your **ROOT** project name -* Update your subproject packages. It is not critical, but recommended especially in case you plan to publish your - library +* Target chat where the posts will be published to +* Source chat where the posts will be stored, available for management and ratings +* Cache chat where sometimes will appear your posts to be cached in memory of bot -## Subprojects +And different plugins. Sample config is presented in the root of this repository. +Each plugin describes its own format of subconfig. Anyway, most of config parts will be stored in one +file `config.json` (you may name it anyhow). -In this template there is only one subproject with name `lib`. You are always able to rename it, but remember that in -this case you must rename it in `settings.gradle` file. +## How does it work -## JVM sources in Android target +1. You are sending post to __source__ chat +2. Bot register it +3. (Optionally) bot attaching ratings poll -By default JVM code is not included in Android target. In case you wish to include JVM sources in Android build, use -next method in the end of your `build.gradle`: +## How to launch the bot -```groovy -enableIncludingJvmCodeInAndroidPart() -``` +There are several ways to launch the bot: -In case when you need to be sure that JVM sources are not included in Android part, use this snippet: +* With Docker (and `docker-compose`) +* With using of `gradle` and `run` command +* Using `zip`/`tar` after project building -```groovy -disableIncludingJvmCodeInAndroidPart() -``` -## Types of projects - -### `mppProjectWithSerialization` - -This type of preset have `JVM`, `JS` and `Android` targets and available using -`apply from: "$mppProjectWithSerializationPresetPath"`. Template for project with this preset looks like next snippet: - -```groovy -plugins { - id "org.jetbrains.kotlin.multiplatform" - id "org.jetbrains.kotlin.plugin.serialization" - id "com.android.library" -} - -apply from: "$mppProjectWithSerializationPresetPath" - -// The code below is optional - -kotlin { - sourceSets { - commonMain { - dependencies { - // common dependencies - } - } - commonTest { - dependencies { - // common test dependencies - } - } - jvmMain { - dependencies { - // jvm dependencies - } - } - jvmTest { - dependencies { - // jvm test dependencies - } - } - jsMain { - dependencies { - // js dependencies - } - } - jsTest { - dependencies { - // js test dependencies - } - } - androidMain { - dependencies { - // android dependencies - } - } - androidTest { - dependencies { - // android test dependencies - } - } - } -} -``` - -### `mppJavaProject` - -This type of preset have only `JVM` target and available using `apply from: "$mppJavaProjectPresetPath"`. Template for -project with this preset looks like next snippet: - -```groovy -plugins { - id "org.jetbrains.kotlin.multiplatform" -} - -apply from: "$mppJavaProjectPresetPath" - -// The code below is optional - -kotlin { - sourceSets { - commonMain { - dependencies { - // common dependencies - } - } - commonTest { - dependencies { - // common test dependencies - } - } - jvmMain { - dependencies { - // jvm dependencies - } - } - jvmTest { - dependencies { - // jvm test dependencies - } - } - } -} -``` - -### `mppJsProject` - -This type of preset have only `JS` target and available using `apply from: "mppJsProjectPresetPath"`. Template for -project with this preset looks like next snippet: - -```groovy -plugins { - id "org.jetbrains.kotlin.multiplatform" -} - -apply from: "$mppJsProjectPresetPath" - -// The code below is optional - -kotlin { - sourceSets { - commonMain { - dependencies { - // common dependencies - } - } - commonTest { - dependencies { - // common test dependencies - } - } - jsMain { - dependencies { - // jvm dependencies - } - } - jsTest { - dependencies { - // jvm test dependencies - } - } - } -} -``` - -### `mppAndroidProject` - -This type of preset have only `Android` target and available using `apply from: "$mppAndroidProjectPresetPath"`. Template for -project with this preset looks like next snippet: - -```groovy -plugins { - id "org.jetbrains.kotlin.multiplatform" - id "com.android.library" -} - -apply from: "$mppAndroidProjectPresetPath" - -// The code below is optional - -kotlin { - sourceSets { - commonMain { - dependencies { - // common dependencies - } - } - commonTest { - dependencies { - // common test dependencies - } - } - androidMain { - dependencies { - // android dependencies - } - } - androidTest { - dependencies { - // android test dependencies - } - } - } -} -``` diff --git a/runner/deploy.sh b/runner/deploy.sh index 75e7e41..d5ed348 100755 --- a/runner/deploy.sh +++ b/runner/deploy.sh @@ -15,10 +15,9 @@ function assert_success() { app=plaguposter version=0.0.1 -server=docker.inmo.dev +server=docker.io/insanusmokrassar assert_success ../gradlew build -# scp ./build/distributions/AutoPostTestTelegramBot-1.0.0.zip ./config.json developer@insanusmokrassar.dev:/tmp/ assert_success sudo docker build -t $app:"$version" . assert_success sudo docker tag $app:"$version" $server/$app:$version assert_success sudo docker tag $app:"$version" $server/$app:latest diff --git a/sample/.env b/sample/.env new file mode 100644 index 0000000..717caa3 --- /dev/null +++ b/sample/.env @@ -0,0 +1,5 @@ +DATA_PATH=. + +PG_USER=test_user +PG_PASSWORD=test_password +PG_DB=test_db diff --git a/sample/config.json b/sample/config.json new file mode 100644 index 0000000..91f1d29 --- /dev/null +++ b/sample/config.json @@ -0,0 +1,138 @@ +{ + "database": { + "url": "jdbc:postgresql://postgres/test_db", + "username": "test_user", + "password": "test_password", + "driver": "org.postgresql.Driver" + }, + "botToken": "1234567890:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi", + "plugins": [ + "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.ratings.gc.Plugin", + "dev.inmo.plaguposter.inlines.Plugin", + "dev.inmo.plaguposter.triggers.command.Plugin" + ], + "posts": { + "chats": { + "targetChat": -1001234567890, + "cacheChat": -1001234567890, + "sourceChat": -1001234567890 + }, + "autoRemoveMessages": true + }, + "ratingsPolls": { + "variants": { + "Круть": 2, + "Ок": 1, + "Не ок": -1, + "Совсем не ок": -2, + "Посмотреть результаты": 0 + }, + "autoAttach": true, + "ratingOfferText": "How do you like it?" + }, + "selector": { + "items": [ + { + "time": { + "from": "23:00", + "to": "23:59" + }, + "rating": { + "min": -1.0, + "max": 2.0, + "prefer": "max", + "otherwise": { + "rating": { + "min": 2.0, + "prefer": "min", + "postAge": 86400 + } + }, + "postAge": 86400 + } + }, + { + "time": { + "from": "00:00", + "to": "06:59" + }, + "rating": { + "min": -1.0, + "max": 2.0, + "prefer": "max", + "otherwise": { + "rating": { + "min": 2.0, + "prefer": "min", + "postAge": 86400 + } + }, + "postAge": 86400 + } + }, + { + "time": { + "from": "07:00", + "to": "12:00" + }, + "rating": { + "min": 1.0, + "prefer": "min", + "otherwise": { + "rating": { + "max": 1.0, + "prefer": "max", + "postAge": 86400 + } + }, + "postAge": 86400 + } + }, + { + "time": { + "from": "12:00", + "to": "16:00" + }, + "rating": { + "min": 2.0, + "prefer": "min", + "otherwise": { + "rating": { + "max": 2.0, + "prefer": "max", + "postAge": 86400 + } + }, + "postAge": 86400 + } + }, + { + "time": { + "from": "16:00", + "to": "23:00" + }, + "rating": { + "prefer": "max", + "postAge": 86400 + } + } + ] + }, + "timer_trigger": { + "krontab": "0 30 */5 * *" + }, + "gc": { + "autoclear": { + "rating": -1, + "autoClearKrontab": "0 0 0 * *", + "skipPostAge": 86400 + }, + "immediateDrop": -2 + } +} diff --git a/sample/docker-compose.yml b/sample/docker-compose.yml new file mode 100644 index 0000000..dbdf181 --- /dev/null +++ b/sample/docker-compose.yml @@ -0,0 +1,23 @@ +version: "3.4" + +services: + plaguposter_postgres: + image: postgres + container_name: "plaguposter_postgres" + restart: "unless-stopped" + environment: + POSTGRES_USER: "${PG_USER}" + POSTGRES_PASSWORD: "${PG_PASSWORD}" + POSTGRES_DB: "${PG_DB}" + volumes: + - "${DATA_PATH}/db/:/var/lib/postgresql/" + plaguposter: + image: insanusmokrassar/plaguposter + container_name: "plaguposter" + restart: "unless-stopped" + volumes: + - "${DATA_PATH}/config.json:/config.json" + links: + - "plaguposter_postgres:postgres" + depends_on: + - "plaguposter_postgres"