mirror of
				https://github.com/InsanusMokrassar/TelegramBotAPI-examples.git
				synced 2025-10-31 20:20:09 +00:00 
			
		
		
		
	update polls sample
This commit is contained in:
		| @@ -1,11 +1,19 @@ | |||||||
| import com.benasher44.uuid.uuid4 | import com.benasher44.uuid.uuid4 | ||||||
|  | import dev.inmo.kslog.common.KSLog | ||||||
|  | import dev.inmo.kslog.common.LogLevel | ||||||
|  | import dev.inmo.kslog.common.defaultMessageFormatter | ||||||
|  | import dev.inmo.kslog.common.setDefaultKSLog | ||||||
| import dev.inmo.micro_utils.coroutines.subscribeSafelyWithoutExceptions | import dev.inmo.micro_utils.coroutines.subscribeSafelyWithoutExceptions | ||||||
| import dev.inmo.tgbotapi.extensions.api.bot.getMe | import dev.inmo.tgbotapi.extensions.api.bot.getMe | ||||||
|  | import dev.inmo.tgbotapi.extensions.api.bot.setMyCommands | ||||||
| import dev.inmo.tgbotapi.extensions.api.chat.get.getChat | import dev.inmo.tgbotapi.extensions.api.chat.get.getChat | ||||||
| import dev.inmo.tgbotapi.extensions.api.send.* | import dev.inmo.tgbotapi.extensions.api.send.* | ||||||
|  | import dev.inmo.tgbotapi.extensions.api.send.polls.sendQuizPoll | ||||||
| import dev.inmo.tgbotapi.extensions.api.send.polls.sendRegularPoll | import dev.inmo.tgbotapi.extensions.api.send.polls.sendRegularPoll | ||||||
| import dev.inmo.tgbotapi.extensions.behaviour_builder.telegramBotWithBehaviourAndLongPolling | import dev.inmo.tgbotapi.extensions.behaviour_builder.telegramBotWithBehaviourAndLongPolling | ||||||
| import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.* | import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.* | ||||||
|  | import dev.inmo.tgbotapi.extensions.utils.customEmojiTextSourceOrNull | ||||||
|  | import dev.inmo.tgbotapi.extensions.utils.extensions.parseCommandsWithArgsSources | ||||||
| import dev.inmo.tgbotapi.extensions.utils.extensions.raw.sender_chat | import dev.inmo.tgbotapi.extensions.utils.extensions.raw.sender_chat | ||||||
| import dev.inmo.tgbotapi.extensions.utils.formatting.linkMarkdownV2 | import dev.inmo.tgbotapi.extensions.utils.formatting.linkMarkdownV2 | ||||||
| import dev.inmo.tgbotapi.extensions.utils.formatting.textMentionMarkdownV2 | import dev.inmo.tgbotapi.extensions.utils.formatting.textMentionMarkdownV2 | ||||||
| @@ -17,15 +25,13 @@ import dev.inmo.tgbotapi.types.chat.GroupChat | |||||||
| import dev.inmo.tgbotapi.types.chat.PrivateChat | import dev.inmo.tgbotapi.types.chat.PrivateChat | ||||||
| import dev.inmo.tgbotapi.types.chat.SupergroupChat | import dev.inmo.tgbotapi.types.chat.SupergroupChat | ||||||
| import dev.inmo.tgbotapi.types.message.MarkdownV2 | import dev.inmo.tgbotapi.types.message.MarkdownV2 | ||||||
| import dev.inmo.tgbotapi.types.polls.Poll | import dev.inmo.tgbotapi.types.polls.* | ||||||
| import dev.inmo.tgbotapi.types.polls.PollAnswer | import dev.inmo.tgbotapi.utils.* | ||||||
| import dev.inmo.tgbotapi.types.polls.PollOption |  | ||||||
| import dev.inmo.tgbotapi.types.polls.RegularPoll |  | ||||||
| import dev.inmo.tgbotapi.utils.PreviewFeature |  | ||||||
| import dev.inmo.tgbotapi.utils.extensions.escapeMarkdownV2Common | import dev.inmo.tgbotapi.utils.extensions.escapeMarkdownV2Common | ||||||
| import kotlinx.coroutines.* | import kotlinx.coroutines.* | ||||||
| import kotlinx.coroutines.sync.Mutex | import kotlinx.coroutines.sync.Mutex | ||||||
| import kotlinx.coroutines.sync.withLock | import kotlinx.coroutines.sync.withLock | ||||||
|  | import kotlin.random.Random | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * This bot will answer with anonymous or public poll and send message on |  * This bot will answer with anonymous or public poll and send message on | ||||||
| @@ -37,6 +43,15 @@ import kotlinx.coroutines.sync.withLock | |||||||
| @OptIn(PreviewFeature::class) | @OptIn(PreviewFeature::class) | ||||||
| suspend fun main(vararg args: String) { | suspend fun main(vararg args: String) { | ||||||
|     val botToken = args.first() |     val botToken = args.first() | ||||||
|  |     val isDebug = args.any { it == "debug" } | ||||||
|  |  | ||||||
|  |     if (isDebug) { | ||||||
|  |         setDefaultKSLog( | ||||||
|  |             KSLog { level: LogLevel, tag: String?, message: Any, throwable: Throwable? -> | ||||||
|  |                 println(defaultMessageFormatter(level, tag, message, throwable)) | ||||||
|  |             } | ||||||
|  |         ) | ||||||
|  |     } | ||||||
|  |  | ||||||
|     telegramBotWithBehaviourAndLongPolling(botToken, CoroutineScope(Dispatchers.IO)) { |     telegramBotWithBehaviourAndLongPolling(botToken, CoroutineScope(Dispatchers.IO)) { | ||||||
|         val me = getMe() |         val me = getMe() | ||||||
| @@ -44,12 +59,22 @@ suspend fun main(vararg args: String) { | |||||||
|         val pollToChat = mutableMapOf<PollId, IdChatIdentifier>() |         val pollToChat = mutableMapOf<PollId, IdChatIdentifier>() | ||||||
|         val pollToChatMutex = Mutex() |         val pollToChatMutex = Mutex() | ||||||
|  |  | ||||||
|         onCommand("anonymous") { |         onCommand("anonymous", requireOnlyCommandInMessage = false) { | ||||||
|  |             val customEmoji = it.content.parseCommandsWithArgsSources() | ||||||
|  |                 .toList() | ||||||
|  |                 .firstOrNull { it.first.command == "anonymous" } | ||||||
|  |                 ?.second | ||||||
|  |                 ?.firstNotNullOfOrNull { it.customEmojiTextSourceOrNull() } | ||||||
|             val sentPoll = sendRegularPoll( |             val sentPoll = sendRegularPoll( | ||||||
|                 it.chat, |                 it.chat.id, | ||||||
|                 "Test regular anonymous poll", |                 "Test regular anonymous poll", | ||||||
|                 (1 .. 10).map { |                 (1 .. 10).map { | ||||||
|                     it.toString() |                     InputPollOption { | ||||||
|  |                         regular(it.toString()) + " " | ||||||
|  |                         if (customEmoji != null) { | ||||||
|  |                             customEmoji(customEmoji.customEmojiId, customEmoji.subsources) | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|                 }, |                 }, | ||||||
|                 isAnonymous = true, |                 isAnonymous = true, | ||||||
|                 replyParameters = ReplyParameters(it) |                 replyParameters = ReplyParameters(it) | ||||||
| @@ -59,12 +84,22 @@ suspend fun main(vararg args: String) { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         onCommand("public") { |         onCommand("public", requireOnlyCommandInMessage = false) { | ||||||
|  |             val customEmoji = it.content.parseCommandsWithArgsSources() | ||||||
|  |                 .toList() | ||||||
|  |                 .firstOrNull { it.first.command == "public" } | ||||||
|  |                 ?.second | ||||||
|  |                 ?.firstNotNullOfOrNull { it.customEmojiTextSourceOrNull() } | ||||||
|             val sentPoll = sendRegularPoll( |             val sentPoll = sendRegularPoll( | ||||||
|                 it.chat, |                 it.chat.id, | ||||||
|                 "Test regular anonymous poll", |                 "Test regular non anonymous poll", | ||||||
|                 (1 .. 10).map { |                 (1 .. 10).map { | ||||||
|                     it.toString() |                     InputPollOption { | ||||||
|  |                         regular(it.toString()) + " " | ||||||
|  |                         if (customEmoji != null) { | ||||||
|  |                             customEmoji(customEmoji.customEmojiId, customEmoji.subsources) | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|                 }, |                 }, | ||||||
|                 isAnonymous = false, |                 isAnonymous = false, | ||||||
|                 replyParameters = ReplyParameters(it) |                 replyParameters = ReplyParameters(it) | ||||||
| @@ -74,6 +109,36 @@ suspend fun main(vararg args: String) { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         onCommand("quiz", requireOnlyCommandInMessage = false) { | ||||||
|  |             val customEmoji = it.content.parseCommandsWithArgsSources() | ||||||
|  |                 .toList() | ||||||
|  |                 .firstOrNull { it.first.command == "quiz" } | ||||||
|  |                 ?.second | ||||||
|  |                 ?.firstNotNullOfOrNull { it.customEmojiTextSourceOrNull() } | ||||||
|  |             val correctAnswer = Random.nextInt(10) | ||||||
|  |             val sentPoll = sendQuizPoll( | ||||||
|  |                 it.chat.id, | ||||||
|  |                 "Test quiz poll", | ||||||
|  |                 (1 .. 10).map { | ||||||
|  |                     InputPollOption { | ||||||
|  |                         regular(it.toString()) + " " | ||||||
|  |                         if (customEmoji != null) { | ||||||
|  |                             customEmoji(customEmoji.customEmojiId, customEmoji.subsources) | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                 }, | ||||||
|  |                 isAnonymous = false, | ||||||
|  |                 replyParameters = ReplyParameters(it), | ||||||
|  |                 correctOptionId = correctAnswer, | ||||||
|  |                 explanationTextSources = buildEntities { | ||||||
|  |                     regular("Random solved it to be ") + underline((correctAnswer + 1).toString()) | ||||||
|  |                 } | ||||||
|  |             ) | ||||||
|  |             pollToChatMutex.withLock { | ||||||
|  |                 pollToChat[sentPoll.content.poll.id] = sentPoll.chat.id | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|         onPollAnswer { |         onPollAnswer { | ||||||
|             val chatId = pollToChat[it.pollId] ?: return@onPollAnswer |             val chatId = pollToChat[it.pollId] ?: return@onPollAnswer | ||||||
|  |  | ||||||
| @@ -92,6 +157,12 @@ suspend fun main(vararg args: String) { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         setMyCommands( | ||||||
|  |             BotCommand("anonymous", "Create anonymous regular poll"), | ||||||
|  |             BotCommand("public", "Create non anonymous regular poll"), | ||||||
|  |             BotCommand("quiz", "Create quiz poll with random right answer"), | ||||||
|  |         ) | ||||||
|  |  | ||||||
|         allUpdatesFlow.subscribeSafelyWithoutExceptions(this) { println(it) } |         allUpdatesFlow.subscribeSafelyWithoutExceptions(this) { println(it) } | ||||||
|     }.second.join() |     }.second.join() | ||||||
| } | } | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ org.gradle.jvmargs=-Xmx2344m | |||||||
|  |  | ||||||
|  |  | ||||||
| kotlin_version=1.9.23 | kotlin_version=1.9.23 | ||||||
| telegram_bot_api_version=12.0.1 | telegram_bot_api_version=13.0.0 | ||||||
| micro_utils_version=0.20.45 | micro_utils_version=0.20.45 | ||||||
| serialization_version=1.6.3 | serialization_version=1.6.3 | ||||||
| ktor_version=2.3.10 | ktor_version=2.3.10 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user