mirror of
				https://github.com/InsanusMokrassar/TelegramBotAPI-examples.git
				synced 2025-11-04 06:00:10 +00:00 
			
		
		
		
	1.0.0 migration preview
This commit is contained in:
		@@ -1,7 +1,6 @@
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.api.files.downloadFile
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.api.get.getFileAdditionalInfo
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.api.send.reply
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.telegramBotWithBehaviour
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.telegramBotWithBehaviourAndLongPolling
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onContentMessage
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onMedia
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,9 @@ import dev.inmo.tgbotapi.extensions.api.send.reply
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.telegramBotWithBehaviourAndLongPolling
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onContentMessage
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.utils.formatting.*
 | 
			
		||||
import dev.inmo.tgbotapi.types.*
 | 
			
		||||
import dev.inmo.tgbotapi.types.chat.CommonBot
 | 
			
		||||
import dev.inmo.tgbotapi.types.chat.CommonUser
 | 
			
		||||
import dev.inmo.tgbotapi.types.chat.ExtendedBot
 | 
			
		||||
import dev.inmo.tgbotapi.types.message.*
 | 
			
		||||
import kotlinx.coroutines.*
 | 
			
		||||
 | 
			
		||||
@@ -34,8 +36,8 @@ suspend fun main(vararg args: String) {
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            reply(it, toAnswer)
 | 
			
		||||
            coroutineContext.job.invokeOnCompletion { println("completance of onContentMessage") }
 | 
			
		||||
            currentCoroutineContext().job.invokeOnCompletion { println("completance of onContentMessage") }
 | 
			
		||||
        }
 | 
			
		||||
        coroutineContext.job.invokeOnCompletion { println("Completed :)") }
 | 
			
		||||
        currentCoroutineContext().job.invokeOnCompletion { println("Completed :)") }
 | 
			
		||||
    }.second.join()
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
import dev.inmo.tgbotapi.bot.Ktor.telegramBot
 | 
			
		||||
import dev.inmo.tgbotapi.bot.ktor.telegramBot
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.api.bot.getMe
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -10,4 +10,4 @@ suspend fun main(vararg args: String) {
 | 
			
		||||
    val bot = telegramBot(botToken)
 | 
			
		||||
 | 
			
		||||
    println(bot.getMe())
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,15 +6,19 @@ import dev.inmo.tgbotapi.extensions.behaviour_builder.telegramBotWithBehaviourAn
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onContentMessage
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.utils.formatting.linkMarkdownV2
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.utils.formatting.textMentionMarkdownV2
 | 
			
		||||
import dev.inmo.tgbotapi.types.ParseMode.MarkdownV2
 | 
			
		||||
import dev.inmo.tgbotapi.types.User
 | 
			
		||||
import dev.inmo.tgbotapi.types.chat.abstracts.*
 | 
			
		||||
import dev.inmo.tgbotapi.types.chat.*
 | 
			
		||||
import dev.inmo.tgbotapi.types.chat.GroupChat
 | 
			
		||||
import dev.inmo.tgbotapi.types.chat.PrivateChat
 | 
			
		||||
import dev.inmo.tgbotapi.types.chat.SupergroupChat
 | 
			
		||||
import dev.inmo.tgbotapi.types.message.MarkdownV2
 | 
			
		||||
import dev.inmo.tgbotapi.utils.PreviewFeature
 | 
			
		||||
import dev.inmo.tgbotapi.utils.extensions.escapeMarkdownV2Common
 | 
			
		||||
import kotlinx.coroutines.*
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * The main purpose of this bot is just to answer "Oh, hi, " and add user mention here
 | 
			
		||||
 */
 | 
			
		||||
@OptIn(PreviewFeature::class)
 | 
			
		||||
suspend fun main(vararg args: String) {
 | 
			
		||||
    val botToken = args.first()
 | 
			
		||||
 | 
			
		||||
@@ -27,8 +31,8 @@ suspend fun main(vararg args: String) {
 | 
			
		||||
                return@onContentMessage
 | 
			
		||||
            }
 | 
			
		||||
            val answerText = "Oh, hi, " + when (chat) {
 | 
			
		||||
                is PrivateChat -> "${chat.firstName} ${chat.lastName}".textMentionMarkdownV2(chat.id)
 | 
			
		||||
                is User -> "${chat.firstName} ${chat.lastName}".textMentionMarkdownV2(chat.id)
 | 
			
		||||
                is PrivateChat -> "${chat.firstName} ${chat.lastName}".textMentionMarkdownV2(chat.id)
 | 
			
		||||
                is SupergroupChat -> (chat.username ?.username ?: getChat(chat).inviteLink) ?.let {
 | 
			
		||||
                    chat.title.linkMarkdownV2(it)
 | 
			
		||||
                } ?: chat.title
 | 
			
		||||
 
 | 
			
		||||
@@ -1,15 +1,11 @@
 | 
			
		||||
import dev.inmo.micro_utils.coroutines.subscribeSafelyWithoutExceptions
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.api.bot.getMe
 | 
			
		||||
import dev.inmo.tgbotapi.bot.Ktor.telegramBot
 | 
			
		||||
import dev.inmo.tgbotapi.bot.ktor.telegramBot
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.api.answers.answer
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.api.edit.text.editMessageText
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.api.send.*
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.api.send.media.*
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.*
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.filters.CommonMessageFilterExcludeMediaGroups
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.filters.MessageFilterByChat
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.*
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.utils.shortcuts.*
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.utils.types.buttons.*
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.utils.withContent
 | 
			
		||||
import dev.inmo.tgbotapi.types.message.content.TextContent
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
import dev.inmo.tgbotapi.bot.Ktor.telegramBot
 | 
			
		||||
import dev.inmo.tgbotapi.bot.ktor.telegramBot
 | 
			
		||||
import dev.inmo.tgbotapi.bot.TelegramBot
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.api.bot.getMe
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.api.bot.setMyCommands
 | 
			
		||||
@@ -6,18 +6,13 @@ import dev.inmo.tgbotapi.extensions.api.send.media.sendDocument
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.api.send.media.sendDocumentsGroup
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.api.send.reply
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.api.send.withUploadDocumentAction
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.buildBehaviour
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.buildBehaviourWithLongPolling
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onCommand
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onCommandWithArgs
 | 
			
		||||
import dev.inmo.tgbotapi.requests.abstracts.asMultipartFile
 | 
			
		||||
import dev.inmo.tgbotapi.requests.abstracts.toInputFile
 | 
			
		||||
import dev.inmo.tgbotapi.types.BotCommand
 | 
			
		||||
import dev.inmo.tgbotapi.types.InputMedia.DocumentMediaGroupMemberInputMedia
 | 
			
		||||
import dev.inmo.tgbotapi.types.InputMedia.InputMediaDocument
 | 
			
		||||
import dev.inmo.tgbotapi.types.chat.abstracts.Chat
 | 
			
		||||
import dev.inmo.tgbotapi.types.chat.Chat
 | 
			
		||||
import dev.inmo.tgbotapi.types.media.TelegramMediaDocument
 | 
			
		||||
import dev.inmo.tgbotapi.types.mediaCountInMediaGroup
 | 
			
		||||
import kotlinx.coroutines.*
 | 
			
		||||
import java.io.File
 | 
			
		||||
 | 
			
		||||
private const val command = "send_file"
 | 
			
		||||
@@ -50,7 +45,7 @@ suspend fun main(args: Array<String>) {
 | 
			
		||||
            )
 | 
			
		||||
            else -> sendDocumentsGroup(
 | 
			
		||||
                chat,
 | 
			
		||||
                files.map { InputMediaDocument(it.asMultipartFile()) },
 | 
			
		||||
                files.map { TelegramMediaDocument(it.asMultipartFile()) },
 | 
			
		||||
                protectContent = true
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
import dev.inmo.micro_utils.coroutines.subscribeSafelyWithoutExceptions
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.api.bot.getMe
 | 
			
		||||
import dev.inmo.tgbotapi.bot.Ktor.telegramBot
 | 
			
		||||
import dev.inmo.tgbotapi.bot.ktor.telegramBot
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.api.send.*
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.api.send.media.*
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.*
 | 
			
		||||
@@ -8,7 +8,6 @@ import dev.inmo.tgbotapi.extensions.behaviour_builder.filters.CommonMessageFilte
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.filters.MessageFilterByChat
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.*
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.utils.shortcuts.*
 | 
			
		||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
 | 
			
		||||
import kotlinx.coroutines.*
 | 
			
		||||
 | 
			
		||||
suspend fun activateResenderBot(
 | 
			
		||||
@@ -32,19 +31,19 @@ suspend fun activateResenderBot(
 | 
			
		||||
        onVisualGallery {
 | 
			
		||||
            val chat = it.chat ?: return@onVisualGallery
 | 
			
		||||
            withUploadPhotoAction(chat) {
 | 
			
		||||
                sendVisualMediaGroup(chat, it.map { it.content.toMediaGroupMemberInputMedia() })
 | 
			
		||||
                sendVisualMediaGroup(chat, it.map { it.content.toMediaGroupMemberTelegramMedia() })
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        onPlaylist {
 | 
			
		||||
            val chat = it.chat ?: return@onPlaylist
 | 
			
		||||
            withUploadDocumentAction(chat) {
 | 
			
		||||
                sendPlaylist(chat, it.map { it.content.toMediaGroupMemberInputMedia() })
 | 
			
		||||
                sendPlaylist(chat, it.map { it.content.toMediaGroupMemberTelegramMedia() })
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        onDocumentsGroup {
 | 
			
		||||
            val chat = it.chat ?: return@onDocumentsGroup
 | 
			
		||||
            withUploadDocumentAction(chat) {
 | 
			
		||||
                sendDocumentsGroup(chat, it.map { it.content.toMediaGroupMemberInputMedia() })
 | 
			
		||||
                sendDocumentsGroup(chat, it.map { it.content.toMediaGroupMemberTelegramMedia() })
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,35 +1,26 @@
 | 
			
		||||
import dev.inmo.micro_utils.coroutines.safely
 | 
			
		||||
import dev.inmo.tgbotapi.bot.Ktor.telegramBot
 | 
			
		||||
import dev.inmo.tgbotapi.bot.ktor.telegramBot
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.api.send.reply
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.buildBehaviourWithLongPolling
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onDice
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.utils.*
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.utils.shortcuts.filterContentMessages
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.utils.updates.retrieving.longPolling
 | 
			
		||||
import dev.inmo.tgbotapi.types.dice.SlotMachineDiceAnimationType
 | 
			
		||||
import dev.inmo.tgbotapi.types.message.content.DiceContent
 | 
			
		||||
import kotlinx.coroutines.*
 | 
			
		||||
import kotlinx.coroutines.flow.launchIn
 | 
			
		||||
import kotlinx.coroutines.flow.onEach
 | 
			
		||||
 | 
			
		||||
suspend fun main(args: Array<String>) {
 | 
			
		||||
    val bot = telegramBot(args.first())
 | 
			
		||||
 | 
			
		||||
    val scope = CoroutineScope(Dispatchers.Default)
 | 
			
		||||
    bot.longPolling(scope = scope) {
 | 
			
		||||
        filterContentMessages<DiceContent>(scope).onEach {
 | 
			
		||||
    bot.buildBehaviourWithLongPolling(scope = CoroutineScope(Dispatchers.IO)) {
 | 
			
		||||
        onDice {
 | 
			
		||||
            val content = it.content
 | 
			
		||||
            val dice = content.dice
 | 
			
		||||
            val diceType = dice.animationType
 | 
			
		||||
 | 
			
		||||
            safely ({ it.printStackTrace() }) {
 | 
			
		||||
                if (diceType == SlotMachineDiceAnimationType) {
 | 
			
		||||
                    val result = dice.calculateSlotMachineResult() ?: return@safely
 | 
			
		||||
                    bot.reply(it, "${result.leftReel}|${result.centerReel}|${result.rightReel}")
 | 
			
		||||
                } else {
 | 
			
		||||
                    bot.reply(it, "There is no slot machine dice in message")
 | 
			
		||||
                }
 | 
			
		||||
            if (diceType == SlotMachineDiceAnimationType) {
 | 
			
		||||
                val result = dice.calculateSlotMachineResult() ?: return@onDice
 | 
			
		||||
                bot.reply(it, "${result.leftReel}|${result.centerReel}|${result.rightReel}")
 | 
			
		||||
            } else {
 | 
			
		||||
                bot.reply(it, "There is no slot machine dice in message")
 | 
			
		||||
            }
 | 
			
		||||
        }.launchIn(scope)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    scope.coroutineContext[Job]!!.join()
 | 
			
		||||
}
 | 
			
		||||
        }
 | 
			
		||||
    }.join()
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -29,9 +29,9 @@ fun main() {
 | 
			
		||||
                addEventListener("click", {
 | 
			
		||||
                    scope.launchSafelyWithoutExceptions {
 | 
			
		||||
                        handleResult({ "Clicked" }) {
 | 
			
		||||
                            HttpClient().post<HttpResponse>("${window.location.origin.removeSuffix("/")}/inline") {
 | 
			
		||||
                            HttpClient().post("${window.location.origin.removeSuffix("/")}/inline") {
 | 
			
		||||
                                parameter(webAppQueryIdField, it)
 | 
			
		||||
                                body = TextContent("Clicked", ContentType.Text.Plain)
 | 
			
		||||
                                setBody(TextContent("Clicked", ContentType.Text.Plain))
 | 
			
		||||
                                document.body ?.log(url.build().toString())
 | 
			
		||||
                            }.coroutineContext.job.join()
 | 
			
		||||
                        }
 | 
			
		||||
 
 | 
			
		||||
@@ -13,12 +13,14 @@ import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.InlineQueryResult
 | 
			
		||||
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 dev.inmo.tgbotapi.utils.PreviewFeature
 | 
			
		||||
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.application.call
 | 
			
		||||
import io.ktor.server.http.content.*
 | 
			
		||||
import io.ktor.server.request.receiveText
 | 
			
		||||
import io.ktor.server.response.respond
 | 
			
		||||
import io.ktor.server.routing.post
 | 
			
		||||
import io.ktor.server.routing.routing
 | 
			
		||||
import kotlinx.coroutines.Dispatchers
 | 
			
		||||
import java.io.File
 | 
			
		||||
 | 
			
		||||
@@ -30,6 +32,7 @@ import java.io.File
 | 
			
		||||
 *
 | 
			
		||||
 * Will start the server to share the static (index.html and WebApp.js) on 0.0.0.0:8080
 | 
			
		||||
 */
 | 
			
		||||
@OptIn(PreviewFeature::class)
 | 
			
		||||
suspend fun main(vararg args: String) {
 | 
			
		||||
    val bot = telegramBot(args.first(), testServer = args.any { it == "testServer" })
 | 
			
		||||
    createKtorServer(
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@ kotlin.code.style=official
 | 
			
		||||
org.gradle.parallel=true
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
kotlin_version=1.6.10
 | 
			
		||||
telegram_bot_api_version=0.38.23
 | 
			
		||||
micro_utils_version=0.9.24
 | 
			
		||||
ktor_version=1.6.8
 | 
			
		||||
kotlin_version=1.6.21
 | 
			
		||||
telegram_bot_api_version=1.0.0
 | 
			
		||||
micro_utils_version=0.10.2
 | 
			
		||||
ktor_version=2.0.1
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user