mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI-examples.git
synced 2025-09-03 23:29:50 +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