diff --git a/FilesLoaderBot/build.gradle b/FilesLoaderBot/build.gradle index cfae1ab..c270e9d 100644 --- a/FilesLoaderBot/build.gradle +++ b/FilesLoaderBot/build.gradle @@ -1,6 +1,6 @@ buildscript { repositories { - jcenter() + mavenCentral() } dependencies { diff --git a/ForwardInfoSenderBot/build.gradle b/ForwardInfoSenderBot/build.gradle index a0266c8..fd5b770 100644 --- a/ForwardInfoSenderBot/build.gradle +++ b/ForwardInfoSenderBot/build.gradle @@ -1,6 +1,6 @@ buildscript { repositories { - jcenter() + mavenCentral() } dependencies { diff --git a/GetMeBot/build.gradle b/GetMeBot/build.gradle index d987241..0188724 100644 --- a/GetMeBot/build.gradle +++ b/GetMeBot/build.gradle @@ -1,6 +1,6 @@ buildscript { repositories { - jcenter() + mavenCentral() } dependencies { diff --git a/HelloBot/build.gradle b/HelloBot/build.gradle index d987241..0188724 100644 --- a/HelloBot/build.gradle +++ b/HelloBot/build.gradle @@ -1,6 +1,6 @@ buildscript { repositories { - jcenter() + mavenCentral() } dependencies { diff --git a/KeyboardsBot/KeyboardsBotLib/build.gradle b/KeyboardsBot/KeyboardsBotLib/build.gradle index 50db973..bda3692 100644 --- a/KeyboardsBot/KeyboardsBotLib/build.gradle +++ b/KeyboardsBot/KeyboardsBotLib/build.gradle @@ -1,6 +1,6 @@ buildscript { repositories { - jcenter() + mavenCentral() } dependencies { diff --git a/KeyboardsBot/jvm_launcher/build.gradle b/KeyboardsBot/jvm_launcher/build.gradle index 47b4729..7b26cf6 100644 --- a/KeyboardsBot/jvm_launcher/build.gradle +++ b/KeyboardsBot/jvm_launcher/build.gradle @@ -1,6 +1,6 @@ buildscript { repositories { - jcenter() + mavenCentral() } dependencies { diff --git a/RandomFileSenderBot/build.gradle b/RandomFileSenderBot/build.gradle index 204c510..946ccfc 100644 --- a/RandomFileSenderBot/build.gradle +++ b/RandomFileSenderBot/build.gradle @@ -1,6 +1,6 @@ buildscript { repositories { - jcenter() + mavenCentral() } dependencies { diff --git a/ResenderBot/ResenderBotLib/build.gradle b/ResenderBot/ResenderBotLib/build.gradle index c7c78d0..21b03ee 100644 --- a/ResenderBot/ResenderBotLib/build.gradle +++ b/ResenderBot/ResenderBotLib/build.gradle @@ -1,6 +1,6 @@ buildscript { repositories { - jcenter() + mavenCentral() } dependencies { diff --git a/ResenderBot/jvm_launcher/build.gradle b/ResenderBot/jvm_launcher/build.gradle index 07b3351..5fe7ee3 100644 --- a/ResenderBot/jvm_launcher/build.gradle +++ b/ResenderBot/jvm_launcher/build.gradle @@ -1,6 +1,6 @@ buildscript { repositories { - jcenter() + mavenCentral() } dependencies { diff --git a/SlotMachineDetectorBot/build.gradle b/SlotMachineDetectorBot/build.gradle index 9bb1ca1..312e485 100644 --- a/SlotMachineDetectorBot/build.gradle +++ b/SlotMachineDetectorBot/build.gradle @@ -1,6 +1,6 @@ buildscript { repositories { - jcenter() + mavenCentral() } dependencies { diff --git a/WebApp/build.gradle b/WebApp/build.gradle new file mode 100644 index 0000000..7f73e5f --- /dev/null +++ b/WebApp/build.gradle @@ -0,0 +1,55 @@ +buildscript { + repositories { + mavenCentral() + } + + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +plugins { + id "org.jetbrains.kotlin.multiplatform" version "$kotlin_version" +} + +apply plugin: 'application' + +kotlin { + jvm() + js(IR) { + browser() + binaries.executable() + } + + sourceSets { + commonMain { + dependencies { + implementation kotlin('stdlib') + } + } + + jsMain { + dependencies { + implementation "dev.inmo:tgbotapi.webapps:$telegram_bot_api_version" + } + } + + jvmMain { + dependencies { + implementation "dev.inmo:tgbotapi:$telegram_bot_api_version" + implementation "dev.inmo:micro_utils.ktor.server:$micro_utils_version" + implementation "io.ktor:ktor-server-tomcat:$ktor_version" + } + } + } +} + +application { + mainClassName = "WebAppServerKt" +} + +tasks.getByName("compileKotlinJvm") + .dependsOn(jsBrowserDistribution) +tasks.getByName("compileKotlinJvm").configure { + mustRunAfter jsBrowserDistribution +} diff --git a/WebApp/src/jsMain/kotlin/main.kt b/WebApp/src/jsMain/kotlin/main.kt new file mode 100644 index 0000000..cb4c5bc --- /dev/null +++ b/WebApp/src/jsMain/kotlin/main.kt @@ -0,0 +1,42 @@ +import dev.inmo.tgbotapi.webapps.* +import io.ktor.client.HttpClient +import io.ktor.client.request.get +import io.ktor.client.statement.HttpResponse +import io.ktor.client.statement.readText +import io.ktor.http.encodeURLPath +import kotlinx.browser.document +import kotlinx.browser.window +import kotlinx.coroutines.* +import kotlinx.dom.appendElement +import kotlinx.dom.appendText + +fun main() { + console.log("Web app started") + window.onload = { + val scope = CoroutineScope(Dispatchers.Default) + runCatching { + document.body ?.appendElement("button") { + addEventListener( + "click", + { + webApp.sendData("Clicked") + } + ) + appendText("Example button") + } ?: window.alert("Unable to load body") + webApp.apply { + onThemeChanged { + document.body ?.appendText("Theme changed: ${webApp.themeParams}") + document.body ?.appendElement("p", {}) + } + onViewportChanged { + document.body ?.appendText("Viewport changed: ${it.isStateStable}") + document.body ?.appendElement("p", {}) + } + } + webApp.ready() + }.onFailure { + window.alert(it.stackTraceToString()) + } + } +} diff --git a/WebApp/src/jsMain/resources/index.html b/WebApp/src/jsMain/resources/index.html new file mode 100644 index 0000000..b00362c --- /dev/null +++ b/WebApp/src/jsMain/resources/index.html @@ -0,0 +1,11 @@ + + + + + Web App Example + + + + + + diff --git a/WebApp/src/jvmMain/kotlin/WebAppServer.kt b/WebApp/src/jvmMain/kotlin/WebAppServer.kt new file mode 100644 index 0000000..bbb75a7 --- /dev/null +++ b/WebApp/src/jvmMain/kotlin/WebAppServer.kt @@ -0,0 +1,61 @@ +import dev.inmo.micro_utils.coroutines.subscribeSafelyWithoutExceptions +import dev.inmo.micro_utils.ktor.server.createKtorServer +import dev.inmo.tgbotapi.extensions.api.bot.getMe +import dev.inmo.tgbotapi.extensions.api.send.* +import dev.inmo.tgbotapi.extensions.behaviour_builder.* +import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.* +import dev.inmo.tgbotapi.extensions.utils.types.buttons.* +import io.ktor.application.call +import io.ktor.http.content.files +import io.ktor.http.content.static +import io.ktor.routing.get +import io.ktor.routing.routing +import io.ktor.server.tomcat.Tomcat +import kotlinx.coroutines.Dispatchers +import java.io.File + +/** + * Accepts two parameters: + * + * * Telegram Token + * * URL where will be placed + * + * Will start the server to share the static (index.html and WebApp.js) on 0.0.0.0:8080 + */ +suspend fun main(vararg args: String) { + createKtorServer( + Tomcat, + "0.0.0.0", + 8080, + additionalEngineEnvironmentConfigurator = { + parentCoroutineContext += Dispatchers.IO + } + ) { + routing { + static { + files(File("WebApp/build/distributions")) + } + } + }.start(false) + + telegramBotWithBehaviourAndLongPolling( + args.first(), + defaultExceptionsHandler = { it.printStackTrace() } + ) { + onCommand("start") { + reply( + it, + "Button:", + replyMarkup = inlineKeyboard { + row { + webAppButton("Open", args[1]) + } + } + ) + } + allUpdatesFlow.subscribeSafelyWithoutExceptions(this) { + println(it) + } + println(getMe()) + }.second.join() +} diff --git a/build.gradle b/build.gradle index a909fa1..56c12ba 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ allprojects { repositories { mavenLocal() - jcenter() + mavenCentral() if (project.hasProperty("GITHUB_USER") && project.hasProperty("GITHUB_TOKEN")) { maven { url "https://maven.pkg.github.com/InsanusMokrassar/TelegramBotAPI" @@ -12,4 +12,4 @@ allprojects { } } } -} \ No newline at end of file +} diff --git a/gradle.properties b/gradle.properties index a6963de..bac037a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,5 +3,6 @@ org.gradle.parallel=true kotlin_version=1.6.10 -telegram_bot_api_version=0.38.13 -micro_utils_version=0.9.20 +telegram_bot_api_version=0.38.16 +micro_utils_version=0.9.24 +ktor_version=1.6.8 diff --git a/settings.gradle b/settings.gradle index e66b75d..d6102d8 100644 --- a/settings.gradle +++ b/settings.gradle @@ -16,4 +16,6 @@ include ":KeyboardsBot:jvm_launcher" include ":SlotMachineDetectorBot" +include ":WebApp" + include ":FSMBot"