mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI-examples.git
synced 2024-11-17 13:53:53 +00:00
update polls sample
This commit is contained in:
parent
6f2a8bb0be
commit
238533a350
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user