mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI-examples.git
synced 2025-12-05 13:55:38 +00:00
Compare commits
19 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e2d56a4d80 | |||
| 70aca52960 | |||
| 6c0d961339 | |||
|
|
a3cdf693f2 | ||
|
|
e378c6630c | ||
| 707ad9a160 | |||
| 68e9830a8f | |||
| 55ebdeadbc | |||
|
|
d4f3d4bc68 | ||
| b3d06c9773 | |||
| e6e3eabf97 | |||
| 47efedf311 | |||
| 8423b1377b | |||
| d0029603ce | |||
| 8d8fa74779 | |||
| 459a70c47b | |||
| 88102f3afa | |||
| a621058fdd | |||
| 56e072aabe |
@@ -34,6 +34,7 @@ import dev.inmo.tgbotapi.extensions.utils.ifBusinessContentMessage
|
||||
import dev.inmo.tgbotapi.extensions.utils.textContentOrNull
|
||||
import dev.inmo.tgbotapi.extensions.utils.types.buttons.dataButton
|
||||
import dev.inmo.tgbotapi.extensions.utils.types.buttons.inlineKeyboard
|
||||
import dev.inmo.tgbotapi.extensions.utils.updates.retrieving.flushAccumulatedUpdates
|
||||
import dev.inmo.tgbotapi.extensions.utils.withContentOrNull
|
||||
import dev.inmo.tgbotapi.requests.abstracts.multipartFile
|
||||
import dev.inmo.tgbotapi.requests.business_connection.InputProfilePhoto
|
||||
@@ -84,6 +85,7 @@ suspend fun main(args: Array<String>) {
|
||||
telegramBotWithBehaviourAndLongPolling(botToken, CoroutineScope(Dispatchers.IO)) {
|
||||
val me = getMe()
|
||||
println(me)
|
||||
flushAccumulatedUpdates()
|
||||
|
||||
onBusinessConnectionEnabled {
|
||||
businessConnectionsChatsMutex.withLock {
|
||||
@@ -471,5 +473,15 @@ suspend fun main(args: Array<String>) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Will work when some premium user sending to some other user checklist
|
||||
onChecklistContent {
|
||||
execute(
|
||||
it.content.createResend(
|
||||
it.chat.id,
|
||||
businessConnectionId = it.chat.id.businessConnectionId ?: chatsBusinessConnections[it.chat.id] ?: return@onChecklistContent
|
||||
)
|
||||
)
|
||||
}
|
||||
}.second.join()
|
||||
}
|
||||
@@ -4,10 +4,13 @@ import dev.inmo.kslog.common.defaultMessageFormatter
|
||||
import dev.inmo.kslog.common.setDefaultKSLog
|
||||
import dev.inmo.micro_utils.coroutines.subscribeSafelyWithoutExceptions
|
||||
import dev.inmo.tgbotapi.extensions.api.bot.getMe
|
||||
import dev.inmo.tgbotapi.extensions.api.bot.getMyStarBalance
|
||||
import dev.inmo.tgbotapi.extensions.api.chat.get.getChat
|
||||
import dev.inmo.tgbotapi.extensions.api.send.reply
|
||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContextData
|
||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.buildSubcontextInitialAction
|
||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.telegramBotWithBehaviourAndLongPolling
|
||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onChannelDirectMessagesConfigurationChanged
|
||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onCommand
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.CommonMessage
|
||||
import dev.inmo.tgbotapi.types.update.abstracts.Update
|
||||
@@ -79,6 +82,17 @@ suspend fun main(vararg args: String) {
|
||||
println(data.commonMessage)
|
||||
}
|
||||
|
||||
onCommand("getMyStarBalance") {
|
||||
reply(
|
||||
to = it,
|
||||
text = getMyStarBalance().toString()
|
||||
)
|
||||
}
|
||||
|
||||
onChannelDirectMessagesConfigurationChanged {
|
||||
println(it.chatEvent)
|
||||
}
|
||||
|
||||
allUpdatesFlow.subscribeSafelyWithoutExceptions(this) {
|
||||
println(it)
|
||||
}
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
import dev.inmo.micro_utils.coroutines.awaitFirst
|
||||
import dev.inmo.micro_utils.coroutines.subscribeSafelyWithoutExceptions
|
||||
import dev.inmo.micro_utils.fsm.common.State
|
||||
import dev.inmo.tgbotapi.extensions.api.send.send
|
||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.expectations.waitAnyContentMessage
|
||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.expectations.waitCommandMessage
|
||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.telegramBotWithBehaviourAndFSMAndStartLongPolling
|
||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.command
|
||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onContentMessage
|
||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.containsCommand
|
||||
import dev.inmo.tgbotapi.extensions.utils.extensions.parseCommandsWithArgs
|
||||
import dev.inmo.tgbotapi.extensions.utils.extensions.sameThread
|
||||
import dev.inmo.tgbotapi.extensions.utils.textContentOrNull
|
||||
@@ -13,10 +16,12 @@ import dev.inmo.tgbotapi.types.IdChatIdentifier
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.CommonMessage
|
||||
import dev.inmo.tgbotapi.types.message.content.TextContent
|
||||
import dev.inmo.tgbotapi.utils.botCommand
|
||||
import dev.inmo.tgbotapi.utils.firstOf
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.filter
|
||||
import kotlinx.coroutines.flow.first
|
||||
import kotlinx.coroutines.flow.map
|
||||
|
||||
sealed interface BotState : State
|
||||
data class ExpectContentOrStopState(override val context: IdChatIdentifier, val sourceMessage: CommonMessage<TextContent>) : BotState
|
||||
@@ -48,19 +53,29 @@ suspend fun main(args: Array<String>) {
|
||||
+"Send me some content or " + botCommand("stop") + " if you want to stop sending"
|
||||
}
|
||||
|
||||
val contentMessage = waitAnyContentMessage().filter { message ->
|
||||
message.sameThread(it.sourceMessage)
|
||||
}.first()
|
||||
val contentMessage = firstOf(
|
||||
{
|
||||
waitCommandMessage("stop").filter { message ->
|
||||
message.sameThread(it.sourceMessage)
|
||||
}.first()
|
||||
null
|
||||
},
|
||||
{
|
||||
waitAnyContentMessage().filter { message ->
|
||||
message.sameThread(it.sourceMessage)
|
||||
}.filter {
|
||||
containsCommand(
|
||||
"stop",
|
||||
it.withContentOrNull<TextContent>() ?.content ?.textSources ?: return@filter false
|
||||
) == false
|
||||
}.first()
|
||||
}
|
||||
) ?: return@strictlyOn StopState(it.context)
|
||||
|
||||
val content = contentMessage.content
|
||||
|
||||
when {
|
||||
content is TextContent && content.text == "/stop"
|
||||
|| content is TextContent && content.parseCommandsWithArgs().keys.contains("stop") -> StopState(it.context)
|
||||
else -> {
|
||||
execute(content.createResend(it.context))
|
||||
it
|
||||
}
|
||||
}
|
||||
execute(content.createResend(it.context))
|
||||
it
|
||||
}
|
||||
strictlyOn<StopState> {
|
||||
send(it.context) { +"You have stopped sending of content" }
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
import dev.inmo.kslog.common.KSLog
|
||||
import dev.inmo.kslog.common.defaultMessageFormatter
|
||||
import dev.inmo.kslog.common.filter.filtered
|
||||
import dev.inmo.micro_utils.coroutines.subscribeLoggingDropExceptions
|
||||
import dev.inmo.tgbotapi.extensions.api.bot.getMe
|
||||
import dev.inmo.tgbotapi.extensions.api.send.withTypingAction
|
||||
@@ -10,7 +13,9 @@ import dev.inmo.tgbotapi.extensions.utils.withContentOrNull
|
||||
import dev.inmo.tgbotapi.types.ReplyParameters
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.BusinessContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.content.TextContent
|
||||
import dev.inmo.tgbotapi.utils.DefaultKTgBotAPIKSLog
|
||||
import dev.inmo.tgbotapi.utils.extensions.threadIdOrNull
|
||||
import kotlinx.coroutines.CancellationException
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.SupervisorJob
|
||||
import kotlinx.coroutines.currentCoroutineContext
|
||||
@@ -19,7 +24,10 @@ suspend fun activateResenderBot(
|
||||
token: String,
|
||||
print: (Any) -> Unit
|
||||
) {
|
||||
telegramBotWithBehaviourAndLongPolling(token, scope = CoroutineScope(currentCoroutineContext() + SupervisorJob())) {
|
||||
telegramBotWithBehaviourAndLongPolling(
|
||||
token,
|
||||
scope = CoroutineScope(currentCoroutineContext() + SupervisorJob()),
|
||||
) {
|
||||
onContentMessage(
|
||||
subcontextUpdatesFilter = MessageFilterByChat,
|
||||
initialFilter = { it !is BusinessContentMessage<*> || !it.sentByBusinessConnectionOwner }
|
||||
|
||||
@@ -18,5 +18,5 @@ dependencies {
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
||||
|
||||
implementation "dev.inmo:tgbotapi:$telegram_bot_api_version"
|
||||
implementation 'io.ktor:ktor-client-logging-jvm:3.1.0'
|
||||
implementation 'io.ktor:ktor-client-logging-jvm:3.2.3'
|
||||
}
|
||||
|
||||
@@ -163,6 +163,34 @@ fun main() {
|
||||
Text("Answer in chat button")
|
||||
}
|
||||
|
||||
H3 { Text("Hide keyboard") }
|
||||
val hideCountdown = remember { mutableStateOf<Int?>(null) }
|
||||
Button({
|
||||
onClick {
|
||||
hideCountdown.value = 5
|
||||
}
|
||||
}) {
|
||||
if (hideCountdown.value == null) {
|
||||
Text("Hide")
|
||||
} else {
|
||||
Text("Hide in ${hideCountdown.value} seconds")
|
||||
}
|
||||
}
|
||||
LaunchedEffect(hideCountdown.value) {
|
||||
val value = hideCountdown.value
|
||||
when {
|
||||
value == null -> return@LaunchedEffect
|
||||
value > 0 -> {
|
||||
delay(1000)
|
||||
hideCountdown.value = hideCountdown.value ?.minus(1)
|
||||
}
|
||||
else -> {
|
||||
webApp.hideKeyboard()
|
||||
hideCountdown.value = null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
P()
|
||||
H3 { Text("User info") }
|
||||
Text("Allow to write in private messages: ${webApp.initDataUnsafe.user ?.allowsWriteToPM ?: "User unavailable"}")
|
||||
|
||||
@@ -5,9 +5,9 @@ org.gradle.jvmargs=-Xmx3148m
|
||||
kotlin.daemon.jvmargs=-Xmx3g -Xms500m
|
||||
|
||||
|
||||
kotlin_version=2.1.20
|
||||
telegram_bot_api_version=25.0.0
|
||||
micro_utils_version=0.25.3
|
||||
serialization_version=1.8.0
|
||||
ktor_version=3.1.1
|
||||
compose_version=1.7.3
|
||||
kotlin_version=2.2.0
|
||||
telegram_bot_api_version=28.0.0
|
||||
micro_utils_version=0.26.2
|
||||
serialization_version=1.9.0
|
||||
ktor_version=3.2.3
|
||||
compose_version=1.8.2
|
||||
|
||||
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
|
||||
|
||||
Reference in New Issue
Block a user