From 42c087b90657b590359631d671dc2d5fd5f79029 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Thu, 11 Jun 2026 00:51:54 +0600 Subject: [PATCH] checks of live photos --- .../src/main/kotlin/LivePhotosBot.kt | 26 +++++++++++++++++++ PollsBot/src/main/kotlin/PollsBot.kt | 20 +++++++++++--- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/LivePhotosBot/src/main/kotlin/LivePhotosBot.kt b/LivePhotosBot/src/main/kotlin/LivePhotosBot.kt index 3210250..a6eeaa6 100644 --- a/LivePhotosBot/src/main/kotlin/LivePhotosBot.kt +++ b/LivePhotosBot/src/main/kotlin/LivePhotosBot.kt @@ -9,17 +9,29 @@ import dev.inmo.tgbotapi.extensions.api.send.media.sendLivePhoto import dev.inmo.tgbotapi.extensions.api.send.media.sendMediaGroup import dev.inmo.tgbotapi.extensions.api.send.media.sendPaidMedia import dev.inmo.tgbotapi.extensions.api.send.reply +import dev.inmo.tgbotapi.extensions.api.send.replyWithLivePhoto import dev.inmo.tgbotapi.extensions.behaviour_builder.telegramBotWithBehaviourAndLongPolling +import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onCommand import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onEditedLivePhoto import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onLivePhoto import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onLivePhotoGallery +import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onMediaGroupMessages import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onPaidMediaInfoContent +import dev.inmo.tgbotapi.extensions.utils.contentMessageOrNull +import dev.inmo.tgbotapi.extensions.utils.photoContentOrNull +import dev.inmo.tgbotapi.extensions.utils.photoFileOrNull +import dev.inmo.tgbotapi.extensions.utils.videoContentOrNull +import dev.inmo.tgbotapi.extensions.utils.videoFileOrNull import dev.inmo.tgbotapi.extensions.utils.withContentOrNull import dev.inmo.tgbotapi.types.message.content.LivePhotoContent import dev.inmo.tgbotapi.types.message.payments.PaidMedia import dev.inmo.tgbotapi.types.media.TelegramMediaLivePhoto import dev.inmo.tgbotapi.types.media.TelegramPaidMediaLivePhoto import dev.inmo.tgbotapi.types.media.toTelegramPaidMediaLivePhoto +import dev.inmo.tgbotapi.types.message.content.MediaContent +import dev.inmo.tgbotapi.types.message.content.MediaGroupContent +import dev.inmo.tgbotapi.types.message.content.MediaGroupPartContent +import dev.inmo.tgbotapi.types.message.content.VideoContent import dev.inmo.tgbotapi.utils.RiskFeature import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -159,6 +171,20 @@ suspend fun main(vararg args: String) { println(" caption: ${message.content.text}") } + onMediaGroupMessages { + val photo = it.content.group.firstNotNullOfOrNull { + it.content.photoContentOrNull() + } ?: return@onMediaGroupMessages + val video = it.content.group.firstNotNullOfOrNull { + it.content.videoContentOrNull() + } ?: return@onMediaGroupMessages + replyWithLivePhoto( + it, + video.media.fileId, + photo.media.fileId + ) + } + allUpdatesFlow.subscribeLoggingDropExceptions(scope = this) { println(it) } diff --git a/PollsBot/src/main/kotlin/PollsBot.kt b/PollsBot/src/main/kotlin/PollsBot.kt index 7a4cf66..c1fa8f9 100644 --- a/PollsBot/src/main/kotlin/PollsBot.kt +++ b/PollsBot/src/main/kotlin/PollsBot.kt @@ -17,14 +17,18 @@ import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onPollOp import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onPollUpdates import dev.inmo.tgbotapi.extensions.utils.accessibleMessageOrNull import dev.inmo.tgbotapi.extensions.utils.chatContentMessageOrNull +import dev.inmo.tgbotapi.extensions.utils.contentMessageOrNull import dev.inmo.tgbotapi.extensions.utils.customEmojiTextSourceOrNull import dev.inmo.tgbotapi.extensions.utils.extensions.parseCommandsWithArgsSources +import dev.inmo.tgbotapi.extensions.utils.withContentOrNull import dev.inmo.tgbotapi.types.BotCommand import dev.inmo.tgbotapi.types.IdChatIdentifier import dev.inmo.tgbotapi.types.PollId import dev.inmo.tgbotapi.types.ReplyParameters import dev.inmo.tgbotapi.types.media.TelegramMediaLocation +import dev.inmo.tgbotapi.types.media.TelegramMediaSticker import dev.inmo.tgbotapi.types.media.TelegramMediaVenue +import dev.inmo.tgbotapi.types.message.content.StickerContent import dev.inmo.tgbotapi.types.polls.InputPollOption import dev.inmo.tgbotapi.types.polls.PollAnswer import dev.inmo.tgbotapi.types.polls.QuizPoll @@ -192,10 +196,11 @@ suspend fun main(vararg args: String) { // TelegramMediaVenue implements InputPollMedia and InputPollOptionMedia (InputMediaVenue) // Both can be used as poll question media or as option media onCommand("media_poll") { + val replySticker = it.replyTo ?.contentMessageOrNull() ?.withContentOrNull() ?.content ?.media val sentPoll = sendRegularPoll( it.chat.id, buildEntities { regular("Which venue would you visit?") }, - listOf( + listOfNotNull( // InputPollOptionMedia via TelegramMediaVenue (InputMediaVenue) InputPollOption( media = TelegramMediaVenue( @@ -210,6 +215,11 @@ suspend fun main(vararg args: String) { media = TelegramMediaLocation(latitude = 51.5007, longitude = -0.1246) ) { regular("Big Ben") }, InputPollOption { regular("Neither") }, + replySticker ?.let { + InputPollOption(media = TelegramMediaSticker(replySticker.fileId)) { + regular("Your sticker") + } + } ), isAnonymous = false, // InputMediaLocation as InputPollMedia — poll question media @@ -259,7 +269,7 @@ suspend fun main(vararg args: String) { InputPollOption { regular("Yes") }, InputPollOption { regular("No") }, ), - isAnonymous = false, + isAnonymous = true, membersOnly = true, replyParameters = ReplyParameters(it) ) @@ -277,7 +287,7 @@ suspend fun main(vararg args: String) { InputPollOption { regular("Option A") }, InputPollOption { regular("Option B") }, ), - isAnonymous = false, + isAnonymous = true, countryCodes = listOf("US", "DE", "JP"), replyParameters = ReplyParameters(it) ) @@ -372,6 +382,8 @@ suspend fun main(vararg args: String) { BotCommand("single_option", "Poll with 1 option (minimum is now 1, not 2)"), ) - allUpdatesFlow.subscribeLoggingDropExceptions(scope = this) { println(it) } + allUpdatesFlow.subscribeLoggingDropExceptions(scope = this) { + println(it) + } }.second.join() }