start migration onto 0.38.20

This commit is contained in:
InsanusMokrassar 2022-05-04 12:22:49 +06:00
parent bf0c6497fe
commit df778b4e93
3 changed files with 66 additions and 13 deletions

View File

@ -1,14 +1,18 @@
import dev.inmo.micro_utils.coroutines.launchSafelyWithoutExceptions
import dev.inmo.tgbotapi.types.webAppQueryIdField
import dev.inmo.tgbotapi.webapps.*
import io.ktor.client.HttpClient
import io.ktor.client.request.get
import io.ktor.client.request.*
import io.ktor.client.statement.HttpResponse
import io.ktor.client.statement.readText
import io.ktor.http.encodeURLPath
import io.ktor.http.*
import io.ktor.http.content.TextContent
import kotlinx.browser.document
import kotlinx.browser.window
import kotlinx.coroutines.*
import kotlinx.dom.appendElement
import kotlinx.dom.appendText
import org.w3c.dom.HTMLElement
fun main() {
console.log("Web app started")
@ -16,12 +20,25 @@ fun main() {
val scope = CoroutineScope(Dispatchers.Default)
runCatching {
document.body ?.appendElement("button") {
addEventListener(
"click",
{
webApp.sendData("Clicked")
(this as HTMLElement).onclick = {
scope.launchSafelyWithoutExceptions {
HttpClient().post<HttpResponse>("${window.location.origin.removeSuffix("/")}/inline") {
parameter(webAppQueryIdField, webApp.initDataUnsafe.queryId)
body = "Clicked"
contentType(ContentType.Text.Plain)
}
handleResult(
{ "Clicked" }
) {
HttpClient().post<HttpResponse>(
"${window.location.origin}/inline"
) {
parameter(webAppQueryIdField, it)
body = "Clicked"
}
}
}
)
}
appendText("Example button")
} ?: window.alert("Unable to load body")
webApp.apply {

View File

@ -1,14 +1,26 @@
import dev.inmo.micro_utils.coroutines.subscribeSafelyWithoutExceptions
import dev.inmo.micro_utils.ktor.server.createKtorServer
import dev.inmo.tgbotapi.extensions.api.answers.answer
import dev.inmo.tgbotapi.extensions.api.bot.getMe
import dev.inmo.tgbotapi.extensions.api.bot.setMyCommands
import dev.inmo.tgbotapi.extensions.api.send.*
import dev.inmo.tgbotapi.extensions.api.telegramBot
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 dev.inmo.tgbotapi.types.BotCommand
import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResultArticle
import dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputTextMessageContent
import dev.inmo.tgbotapi.types.webAppQueryIdField
import dev.inmo.tgbotapi.types.webapps.WebAppInfo
import io.ktor.application.call
import io.ktor.http.HttpStatusCode
import io.ktor.http.content.*
import io.ktor.request.receiveText
import io.ktor.response.respond
import io.ktor.routing.*
import io.ktor.server.tomcat.Tomcat
import io.ktor.utils.io.readRemaining
import kotlinx.coroutines.Dispatchers
import java.io.File
@ -21,6 +33,7 @@ import java.io.File
* 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) {
val bot = telegramBot(args.first(), testServer = args.any { it == "testServer" })
createKtorServer(
Tomcat,
"0.0.0.0",
@ -32,19 +45,26 @@ suspend fun main(vararg args: String) {
routing {
static {
files(File("WebApp/build/distributions"))
default("WebApp/build/distributions/index.html")
}
post("inline") {
val requestBody = call.receiveText()
val queryId = call.parameters[webAppQueryIdField] ?: error("$webAppQueryIdField should be presented")
bot.answer(queryId, InlineQueryResultArticle(queryId, "Result", InputTextMessageContent(requestBody)))
call.respond(HttpStatusCode.OK)
}
}
}.start(false)
telegramBotWithBehaviourAndLongPolling(
args.first(),
bot.buildBehaviourWithLongPolling(
defaultExceptionsHandler = { it.printStackTrace() }
) {
onCommand("start") {
onCommand("reply_markup") {
reply(
it,
"Button",
replyMarkup = replyKeyboard {
replyMarkup = replyKeyboard(resizeKeyboard = true, oneTimeKeyboard = true) {
row {
webAppButton("Open WebApp", WebAppInfo(args[1]))
}
@ -52,9 +72,25 @@ suspend fun main(vararg args: String) {
)
}
onCommand("inline") {
reply(
it,
"Button",
replyMarkup = inlineKeyboard {
row {
webAppButton("Open WebApp", WebAppInfo(args[1]))
}
}
)
}
setMyCommands(
BotCommand("reply_markup", "Use to get reply markup keyboard with web app trigger"),
BotCommand("inline", "Use to get inline keyboard with web app trigger"),
)
allUpdatesFlow.subscribeSafelyWithoutExceptions(this) {
println(it)
}
println(getMe())
}.second.join()
}.join()
}

View File

@ -3,6 +3,6 @@ org.gradle.parallel=true
kotlin_version=1.6.10
telegram_bot_api_version=0.38.19
telegram_bot_api_version=0.38.20
micro_utils_version=0.9.24
ktor_version=1.6.8