mirror of
				https://github.com/InsanusMokrassar/TelegramBotAPI-examples.git
				synced 2025-11-04 06:00:10 +00:00 
			
		
		
		
	migration onto 3.1.0 and including new example
This commit is contained in:
		@@ -0,0 +1,71 @@
 | 
			
		||||
import dev.inmo.micro_utils.coroutines.defaultSafelyWithoutExceptionHandler
 | 
			
		||||
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.extensions.api.get.getCustomEmojiStickerOrNull
 | 
			
		||||
import dev.inmo.tgbotapi.extensions.api.get.getStickerSet
 | 
			
		||||
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.formatting.*
 | 
			
		||||
import dev.inmo.tgbotapi.types.StickerType
 | 
			
		||||
import dev.inmo.tgbotapi.types.message.textsources.*
 | 
			
		||||
import dev.inmo.tgbotapi.types.stickers.StickerSet
 | 
			
		||||
import kotlinx.coroutines.*
 | 
			
		||||
 | 
			
		||||
fun StickerSet.buildInfo() = buildEntities {
 | 
			
		||||
    bold("StickerSet name: ") + "${name}\n"
 | 
			
		||||
    bold("StickerSet title: ") + "${title}\n"
 | 
			
		||||
    bold(
 | 
			
		||||
        when (stickerType) {
 | 
			
		||||
            StickerType.CustomEmoji -> "Custom emoji"
 | 
			
		||||
            StickerType.Mask -> "Mask"
 | 
			
		||||
            StickerType.Regular -> "Regular"
 | 
			
		||||
            is StickerType.Unknown -> "Unknown type \"${stickerType.type}\""
 | 
			
		||||
        }
 | 
			
		||||
    ) + " sticker set with title " + bold(title) + " and name " + bold(name)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
suspend fun activateStickerInfoBot(
 | 
			
		||||
    token: String,
 | 
			
		||||
    print: (Any) -> Unit
 | 
			
		||||
) {
 | 
			
		||||
    val bot = telegramBot(token)
 | 
			
		||||
 | 
			
		||||
    print(bot.getMe())
 | 
			
		||||
 | 
			
		||||
    defaultSafelyWithoutExceptionHandler = {
 | 
			
		||||
        it.printStackTrace()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    bot.buildBehaviourWithLongPolling(CoroutineScope(currentCoroutineContext() + SupervisorJob())) {
 | 
			
		||||
        onText {
 | 
			
		||||
            withTypingAction(it.chat) {
 | 
			
		||||
                it.content.textSources.mapNotNull {
 | 
			
		||||
                    if (it is CustomEmojiTextSource) {
 | 
			
		||||
                        getCustomEmojiStickerOrNull(it.customEmojiId) ?.stickerSetName
 | 
			
		||||
                    } else {
 | 
			
		||||
                        null
 | 
			
		||||
                    }
 | 
			
		||||
                }.distinct().map {
 | 
			
		||||
                    getStickerSet(it)
 | 
			
		||||
                }.distinct().flatMap {
 | 
			
		||||
                    it.buildInfo() + regular("\n")
 | 
			
		||||
                }.separateForText().map { entities ->
 | 
			
		||||
                    reply(it, entities)
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        onSticker {
 | 
			
		||||
            val stickerSetInfo = getStickerSet(it.content.media)
 | 
			
		||||
            reply(
 | 
			
		||||
                it,
 | 
			
		||||
                stickerSetInfo.buildInfo()
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        allUpdatesFlow.subscribeSafelyWithoutExceptions(this) {
 | 
			
		||||
            println(it)
 | 
			
		||||
        }
 | 
			
		||||
    }.join()
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,32 @@
 | 
			
		||||
import kotlinx.browser.document
 | 
			
		||||
import kotlinx.coroutines.*
 | 
			
		||||
import org.w3c.dom.*
 | 
			
		||||
 | 
			
		||||
private val scope = CoroutineScope(Dispatchers.Default)
 | 
			
		||||
 | 
			
		||||
fun main() {
 | 
			
		||||
    document.addEventListener(
 | 
			
		||||
        "DOMContentLoaded",
 | 
			
		||||
        {
 | 
			
		||||
            val botsContainer = document.getElementById("bots_container") ?: return@addEventListener
 | 
			
		||||
 | 
			
		||||
            (document.getElementById("bot_token_form") as? HTMLFormElement) ?.onsubmit = {
 | 
			
		||||
                (document.getElementById("bot_token") as? HTMLInputElement) ?.value ?.let { token ->
 | 
			
		||||
                    val botContainer = document.createElement("div") as HTMLDivElement
 | 
			
		||||
                    botsContainer.append(botContainer)
 | 
			
		||||
 | 
			
		||||
                    val infoDiv = document.createElement("div") as HTMLDivElement
 | 
			
		||||
                    botContainer.append(infoDiv)
 | 
			
		||||
 | 
			
		||||
                    scope.launch {
 | 
			
		||||
                        activateStickerInfoBot(token) {
 | 
			
		||||
                            infoDiv.innerHTML = it.toString()
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                false
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,16 @@
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
    <meta charset="UTF-8">
 | 
			
		||||
    <title>Resender bot</title>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
    <form id="bot_token_form">
 | 
			
		||||
        <input type="text" id="bot_token">
 | 
			
		||||
        <input type="submit" value="Start bot">
 | 
			
		||||
    </form>
 | 
			
		||||
    <div id="start_offer">Type your bot token to the input above to start its work</div>
 | 
			
		||||
    <script type="text/javascript" src="StickerInfoBotLib.js"></script>
 | 
			
		||||
    <div id="bots_container"></div>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
		Reference in New Issue
	
	Block a user