diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e6db785..6efcdab 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,17 +1,12 @@ -name: Build - +name: Publish package to GitHub Packages on: [push] - jobs: - build: + publishing: runs-on: ubuntu-latest - steps: - uses: actions/checkout@v2 - - name: Set up JDK 1.8 - uses: actions/setup-java@v1 + - uses: actions/setup-java@v1 with: - java-version: 1.8 - - name: Build with Gradle + java-version: 11 + - name: Build run: ./gradlew build - diff --git a/.github/workflows/build_and_publish.yml b/.github/workflows/build_and_publish.yml new file mode 100644 index 0000000..2943658 --- /dev/null +++ b/.github/workflows/build_and_publish.yml @@ -0,0 +1,23 @@ +#name: Publish package to GitHub Packages +#on: [push] +#jobs: +# publishing: +# runs-on: ubuntu-latest +# steps: +# - uses: actions/checkout@v2 +# - uses: actions/setup-java@v1 +# with: +# java-version: 1.8 +# - name: Rewrite version +# run: | +# branch="`echo "${{ github.ref }}" | grep -o "[^/]*$"`" +# cat gradle.properties | sed -e "s/^library_version=\([0-9\.]*\)/library_version=\1-branch_$branch-build${{ github.run_number }}/" > gradle.properties.tmp +# rm gradle.properties +# mv gradle.properties.tmp gradle.properties +# - name: Build +# run: ./gradlew build +# - name: Publish +# run: ./gradlew --no-parallel publishAllPublicationsToGithubPackagesRepository -x signJsPublication -x signJvmPublication -x signKotlinMultiplatformPublication -x signMetadataPublication -x signAndroidDebugPublication -x signAndroidReleasePublication -x signKotlinMultiplatformPublication +# env: +# GITHUBPACKAGES_USER: ${{ github.actor }} +# GITHUBPACKAGES_PASSWORD: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/build_and_publish_docker.yml b/.github/workflows/build_and_publish_docker.yml new file mode 100644 index 0000000..6674d34 --- /dev/null +++ b/.github/workflows/build_and_publish_docker.yml @@ -0,0 +1,28 @@ +#name: Publish Docker image +#on: [push] +#jobs: +# push_to_registry: +# name: Push Docker image to Docker Hub +# runs-on: ubuntu-latest +# steps: +# - name: Check out the repo +# uses: actions/checkout@v2 +# - uses: actions/setup-java@v1 +# with: +# java-version: 1.8 +# - name: Build +# run: ./gradlew build +# - name: Docker meta +# id: docker_meta +# uses: crazy-max/ghaction-docker-meta@v1 +# with: +# images: name/app +# tag-sha: true +# tag-latest: false +# - name: Push to Docker Hub +# uses: docker/build-push-action@v1 +# with: +# username: ${{ secrets.DOCKER_USERNAME }} +# password: ${{ secrets.DOCKER_PASSWORD }} +# context: . +# tags: ${{ steps.docker_meta.outputs.tags }} diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..ea5f1b4 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,7 @@ +# Changelog + +## 0.0.2 + +* `Kotlin`: `1.4.30` -> `1.6.10` +* `tgbotapi`: `0.32.5` -> `0.38.12` +* `ktor`: `1.5.2` -> `1.6.8` diff --git a/Dockerfile b/Dockerfile index 1dca5af..569ab57 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM java:8 +FROM adoptopenjdk/openjdk11 USER 1000 diff --git a/README.md b/README.md new file mode 100644 index 0000000..4738068 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# Configurable Inline Bot + +This bot was created for helping with other bot commands templating, but it also can be used in other ways. diff --git a/build.gradle b/build.gradle index 5bfbadd..cd5e12d 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,6 @@ project.group = "com.insanusmokrassar" buildscript { repositories { mavenLocal() - jcenter() mavenCentral() } @@ -28,14 +27,13 @@ project.group = "$library_group" repositories { mavenLocal() - jcenter() mavenCentral() maven { url "https://kotlin.bintray.com/kotlinx" } } dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - + implementation "dev.inmo:tgbotapi:$telegram_bot_api_version" api "io.ktor:ktor-client-core:$ktor_version" @@ -45,5 +43,5 @@ dependencies { api "io.ktor:ktor-server-tomcat:$ktor_version" // Use JUnit test framework - testImplementation 'junit:junit:4.13.1' + testImplementation 'junit:junit:4.13.2' } diff --git a/example.config.json b/example.config.json new file mode 100644 index 0000000..f83cf1c --- /dev/null +++ b/example.config.json @@ -0,0 +1,38 @@ +{ + "botConfig": { + "botToken": "bot token from @BotFather", + "apiUrl": "(optional) can be used if you are using your bot server", + "clientConfig": { + "proxy": { + "host": "localhost", + "port": 1080, + "username": "optional", + "password": "optional" + }, + "connectTimeout": "(optional) number, milliseconds", + "writeTimeout": "(optional) number, milliseconds", + "readTimeout": "(optional) number, milliseconds" + } + }, + "templates": [ + { + "title": "Some example", + "formats": [ + { + "template": "Some message which will be sent after clicking on option and opportunity to use format options from java with splitting of incoming query by splitBy option", + "regexTemplate": "Some regex, by default it is ^$ which means empty string", + "splitBy": "Optional splitter, by default is null but the most regular case is to use \" \" to split query by spaces", + "enableMarkdownSupport": false, + "enableMarkdownSupport_description": "THAT IS NOT A FIELD. enableMarkdownSupport is a flat to use markdown 2 markup with template" + } + ], + "description": "It is optional description of some example format" + } + ], + "restrictions": { + "allowedUsers": [ + + ], + "description": "THAT IS NOT A FIELD. allowedUsers is an optional field which contains list of users which may use this bot to call its inline queries" + } +} diff --git a/gradle.properties b/gradle.properties index 30f6557..6dbd64e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,8 +1,8 @@ kotlin.code.style=official kotlin_version=1.6.10 -telegram_bot_api_version=0.32.5 -ktor_version=1.5.1 +telegram_bot_api_version=0.38.12 +ktor_version=1.6.8 -library_version=0.1 +library_version=0.0.2 library_group=dev.inmo diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1eda5cf..cde8341 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip diff --git a/publish.gradle b/publish.gradle index e6d9de0..f3da06b 100644 --- a/publish.gradle +++ b/publish.gradle @@ -1,75 +1,91 @@ apply plugin: 'maven-publish' -apply plugin: 'signing' -task javadocsJar(type: Jar) { +task javadocJar(type: Jar) { + from javadoc classifier = 'javadoc' } -task sourceJar (type : Jar) { +task sourcesJar(type: Jar) { + from sourceSets.main.allSource classifier = 'sources' } -afterEvaluate { - project.publishing.publications.all { - // rename artifacts - groupId "${project.group}" - if (it.name.contains('kotlinMultiplatform')) { - artifactId = "${project.name}" - artifact sourceJar - } else { - artifactId = "${project.name}-$name" - } - } -} - publishing { - publications.all { - artifact javadocsJar + publications { + maven(MavenPublication) { + from components.java - pom { - description = "This library is fully ready to launch bot for working with presets of inline answers in Telegram via Bot API" - name = "${project.name}" - url = "https://insanusmokrassar.github.io/${project.name}" + artifact javadocJar + artifact sourcesJar - scm { - developerConnection = "scm:git:[fetch=]https://github.com/InsanusMokrassar/${project.name}[push=]https://github.com/InsanusMokrassar/${project.name}" - url = "https://github.com/InsanusMokrassar/${project.name}" + pom { + resolveStrategy = Closure.DELEGATE_FIRST + + description = "This library is fully ready to launch bot for working with presets of inline answers in Telegram via Bot API" + name = "${project.name}" + url = "https://insanusmokrassar.github.io/${project.name}" + + scm { + developerConnection = "scm:git:[fetch=]https://github.com/InsanusMokrassar/${project.name}[push=]https://github.com/InsanusMokrassar/${project.name}" + url = "https://github.com/InsanusMokrassar/${project.name}" + } + + developers { + + developer { + id = "InsanusMokrassar" + name = "Ovsiannikov Aleksei" + email = "ovsyannikov.alexey95@gmail.com" + } + + } + + licenses { + + license { + name = "Apache Software License 2.0" + url = "https://opensource.org/licenses/Apache-2.0" + } + + } } - - developers { - - developer { - id = "InsanusMokrassar" - name = "Ovsiannikov Aleksei" - email = "ovsyannikov.alexey95@gmail.com" + repositories { + if ((project.hasProperty('GITHUBPACKAGES_USER') || System.getenv('GITHUBPACKAGES_USER') != null) && (project.hasProperty('GITHUBPACKAGES_PASSWORD') || System.getenv('GITHUBPACKAGES_PASSWORD') != null)) { + maven { + name = "GithubPackages" + url = uri("https://maven.pkg.github.com/InsanusMokrassar/ConfigurableInlineTelegramBot") + credentials { + username = project.hasProperty('GITHUBPACKAGES_USER') ? project.property('GITHUBPACKAGES_USER') : System.getenv('GITHUBPACKAGES_USER') + password = project.hasProperty('GITHUBPACKAGES_PASSWORD') ? project.property('GITHUBPACKAGES_PASSWORD') : System.getenv('GITHUBPACKAGES_PASSWORD') + } } - - } - - licenses { - - license { - name = "Apache Software License 2.0" - url = "https://opensource.org/licenses/Apache-2.0" + } + 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') + } } - - } - } - - repositories { - maven { - name = "bintray" - url = uri("https://api.bintray.com/maven/${project.hasProperty('BINTRAY_USER') ? project.property('BINTRAY_USER') : System.getenv('BINTRAY_USER')}/insanusmokrassar/${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') } } } - } } -signing { - useGpgCmd() - publishing.publications.forEach { sign it } +if (project.hasProperty("signing.gnupg.keyName")) { + apply plugin: 'signing' + + signing { + useGpgCmd() + + sign publishing.publications + } + + task signAll { + tasks.withType(Sign).forEach { + dependsOn(it) + } + } } diff --git a/publish.kpsb b/publish.kpsb index 9d00fa6..c84d92c 100644 --- a/publish.kpsb +++ b/publish.kpsb @@ -1 +1 @@ -{"bintrayConfig":{"repo":"insanusmokrassar","packageName":"${project.name}","packageVcs":"https://github.com/InsanusMokrassar/${project.name}","autoPublish":true,"overridePublish":true},"licenses":[{"id":"Apache-2.0","title":"Apache Software License 2.0","url":"https://opensource.org/licenses/Apache-2.0"}],"mavenConfig":{"name":"${project.name}","description":"This library is fully ready to launch bot for working with presets of inline answers in Telegram via Bot API","url":"https://insanusmokrassar.github.io/${project.name}","vcsUrl":"https://github.com/InsanusMokrassar/${project.name}","includeGpgSigning":true,"developers":[{"id":"InsanusMokrassar","name":"Ovsiannikov Aleksei","eMail":"ovsyannikov.alexey95@gmail.com"}]}} \ No newline at end of file +{"licenses":[{"id":"Apache-2.0","title":"Apache Software License 2.0","url":"https://opensource.org/licenses/Apache-2.0"}],"mavenConfig":{"name":"${project.name}","description":"This library is fully ready to launch bot for working with presets of inline answers in Telegram via Bot API","url":"https://insanusmokrassar.github.io/${project.name}","vcsUrl":"https://github.com/InsanusMokrassar/${project.name}","developers":[{"id":"InsanusMokrassar","name":"Ovsiannikov Aleksei","eMail":"ovsyannikov.alexey95@gmail.com"}],"repositories":[{"name":"GithubPackages","url":"https://maven.pkg.github.com/InsanusMokrassar/ConfigurableInlineTelegramBot"},{"name":"sonatype","url":"https://oss.sonatype.org/service/local/staging/deploy/maven2/"}],"gpgSigning":{"type":"dev.inmo.kmppscriptbuilder.core.models.GpgSigning.Optional"}},"type":"JVM"} \ No newline at end of file diff --git a/src/main/kotlin/dev/inmo/configurable_inline_telegram_bot/FormatterBot.kt b/src/main/kotlin/dev/inmo/configurable_inline_telegram_bot/FormatterBot.kt index 4e1b7d3..b9c0f8f 100644 --- a/src/main/kotlin/dev/inmo/configurable_inline_telegram_bot/FormatterBot.kt +++ b/src/main/kotlin/dev/inmo/configurable_inline_telegram_bot/FormatterBot.kt @@ -54,8 +54,8 @@ data class FormatterBot( val bot = botConfig.createBot() val filter = FlowsUpdatesFilter() bot.buildBehaviour( + filter, scope, - filter ) { enableFormatterBot(templates, restrictions) } @@ -74,4 +74,4 @@ data class FormatterBot( } } } -} \ No newline at end of file +} diff --git a/src/main/kotlin/dev/inmo/configurable_inline_telegram_bot/config/Restrictions.kt b/src/main/kotlin/dev/inmo/configurable_inline_telegram_bot/config/Restrictions.kt index 2e25416..50bd6b2 100644 --- a/src/main/kotlin/dev/inmo/configurable_inline_telegram_bot/config/Restrictions.kt +++ b/src/main/kotlin/dev/inmo/configurable_inline_telegram_bot/config/Restrictions.kt @@ -1,7 +1,7 @@ package dev.inmo.configurable_inline_telegram_bot.config import dev.inmo.tgbotapi.types.* -import dev.inmo.tgbotapi.types.InlineQueries.abstracts.InlineQuery +import dev.inmo.tgbotapi.types.InlineQueries.query.InlineQuery import kotlinx.serialization.Serializable @Serializable @@ -11,4 +11,4 @@ data class Restrictions( fun check(query: InlineQuery): Boolean { return query.from.id in allowedUsers || query.from.username ?.let { it in allowedUsers } ?: false } -} \ No newline at end of file +}