mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI-examples.git
synced 2025-12-05 13:55:38 +00:00
Compare commits
42 Commits
0.28.5
...
tgbotapi/0
| Author | SHA1 | Date | |
|---|---|---|---|
| 22c0fcb439 | |||
| c90952d3ca | |||
| b9e9f981c4 | |||
| 11836b1e17 | |||
| d30e673539 | |||
|
|
5337f1e4f8 | ||
| 26fc3c5924 | |||
| 9e0f43dcc0 | |||
| aa89a289ce | |||
| aeb75d48b9 | |||
| a67db1c214 | |||
| 3c06da09c2 | |||
| c15c6d2cf1 | |||
| febfacc3d5 | |||
| 3c71bf287f | |||
| 6f265640a7 | |||
|
|
b9e8705b2e | ||
| 746f3e8a14 | |||
| bd621047ee | |||
|
|
98f14faeb2 | ||
| ccb29d6977 | |||
| f5b526e0c5 | |||
| c1cfd05446 | |||
| fb7795414b | |||
|
|
5cb998b390 | ||
| 6f182c774c | |||
| 79cc1a7c9a | |||
| 4ce79657ac | |||
| 9a86360682 | |||
| 50f8e0df61 | |||
| bb846406da | |||
| 6766dc4a8f | |||
| b440757331 | |||
|
|
94bfa67eb3 | ||
| 6d066532fb | |||
| d49ce88a0b | |||
| 3820e29bf2 | |||
| 7b66c89632 | |||
| 8f79b9e380 | |||
| 358bfdaa05 | |||
| dfae8b7f29 | |||
| 1eb9676c19 |
16
.github/workflows/build.yml
vendored
Normal file
16
.github/workflows/build.yml
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
name: Build
|
||||
|
||||
on: [push]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up JDK 1.8
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: 1.8
|
||||
- name: Build with Gradle
|
||||
run: ./gradlew build
|
||||
@@ -13,12 +13,8 @@ apply plugin: 'application'
|
||||
|
||||
mainClassName="FilesLoaderBotKt"
|
||||
|
||||
repositories {
|
||||
jcenter()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
|
||||
|
||||
implementation "com.github.insanusmokrassar:TelegramBotAPI:$telegram_bot_api_version"
|
||||
implementation "dev.inmo:tgbotapi:$telegram_bot_api_version"
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.api.downloadFile
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.api.get.getFileAdditionalInfo
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.api.telegramBot
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.flatMap
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.safely
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.shortcuts.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.updates.retrieving.startGettingFlowsUpdatesByLongPolling
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.message.content.abstracts.MediaContent
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.utils.filenameFromUrl
|
||||
import dev.inmo.micro_utils.coroutines.safely
|
||||
import dev.inmo.tgbotapi.bot.Ktor.telegramBot
|
||||
import dev.inmo.tgbotapi.extensions.api.downloadFile
|
||||
import dev.inmo.tgbotapi.extensions.api.get.getFileAdditionalInfo
|
||||
import dev.inmo.tgbotapi.extensions.utils.flatMap
|
||||
import dev.inmo.tgbotapi.extensions.utils.shortcuts.*
|
||||
import dev.inmo.tgbotapi.extensions.utils.updates.retrieving.longPolling
|
||||
import dev.inmo.tgbotapi.types.message.content.abstracts.MediaContent
|
||||
import dev.inmo.tgbotapi.utils.filenameFromUrl
|
||||
import kotlinx.coroutines.*
|
||||
import kotlinx.coroutines.flow.*
|
||||
import java.io.File
|
||||
@@ -22,7 +22,7 @@ suspend fun main(args: Array<String>) {
|
||||
val bot = telegramBot(botToken)
|
||||
val scope = CoroutineScope(Dispatchers.Default)
|
||||
|
||||
bot.startGettingFlowsUpdatesByLongPolling(scope = scope) {
|
||||
bot.longPolling(scope = scope) {
|
||||
val flow = merge (
|
||||
filterContentMessages<MediaContent>(),
|
||||
mediaGroupMessages().flatMap()
|
||||
|
||||
@@ -11,14 +11,11 @@ buildscript {
|
||||
apply plugin: 'kotlin'
|
||||
apply plugin: 'application'
|
||||
|
||||
mainClassName="ForwarderBotKt"
|
||||
mainClassName="ForwardInfoSenderBotKt"
|
||||
|
||||
repositories {
|
||||
jcenter()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
|
||||
|
||||
implementation "com.github.insanusmokrassar:TelegramBotAPI:$telegram_bot_api_version"
|
||||
implementation "dev.inmo:tgbotapi:$telegram_bot_api_version"
|
||||
}
|
||||
@@ -1,13 +1,15 @@
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.api.send.sendTextMessage
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.api.telegramBot
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.formatting.codeMarkdownV2
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.formatting.regularMarkdownV2
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.safely
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.updates.asContentMessagesFlow
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.updates.retrieving.startGettingFlowsUpdatesByLongPolling
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.MarkdownV2
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.message.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.message.abstracts.PossiblyForwardedMessage
|
||||
import dev.inmo.micro_utils.coroutines.safely
|
||||
import dev.inmo.tgbotapi.bot.Ktor.telegramBot
|
||||
import dev.inmo.tgbotapi.extensions.api.send.sendTextMessage
|
||||
import dev.inmo.tgbotapi.extensions.api.telegramBot
|
||||
import dev.inmo.tgbotapi.extensions.utils.*
|
||||
import dev.inmo.tgbotapi.extensions.utils.formatting.codeMarkdownV2
|
||||
import dev.inmo.tgbotapi.extensions.utils.formatting.regularMarkdownV2
|
||||
import dev.inmo.tgbotapi.extensions.utils.shortcuts.mediaGroupMessages
|
||||
import dev.inmo.tgbotapi.extensions.utils.updates.asContentMessagesFlow
|
||||
import dev.inmo.tgbotapi.extensions.utils.updates.retrieving.longPolling
|
||||
import dev.inmo.tgbotapi.types.ParseMode.MarkdownV2
|
||||
import dev.inmo.tgbotapi.types.message.*
|
||||
import kotlinx.coroutines.*
|
||||
import kotlinx.coroutines.flow.*
|
||||
|
||||
@@ -22,8 +24,8 @@ suspend fun main(vararg args: String) {
|
||||
|
||||
val scope = CoroutineScope(Dispatchers.Default)
|
||||
|
||||
bot.startGettingFlowsUpdatesByLongPolling(scope = scope) {
|
||||
messageFlow.asContentMessagesFlow().mapNotNull { it as? PossiblyForwardedMessage }.onEach { message ->
|
||||
bot.longPolling(scope = scope) {
|
||||
(merge(messageFlow.asContentMessagesFlow(), mediaGroupMessages(scope).flatMap())).mapNotNull { it.asPossiblyForwardedMessage() }.onEach { message ->
|
||||
safely({ it.printStackTrace() }) {
|
||||
val toAnswer = when (val forwardInfo = message.forwardInfo) {
|
||||
null -> "There is no forward info"
|
||||
@@ -13,12 +13,9 @@ apply plugin: 'application'
|
||||
|
||||
mainClassName="HelloBotKt"
|
||||
|
||||
repositories {
|
||||
jcenter()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
|
||||
|
||||
implementation "com.github.insanusmokrassar:TelegramBotAPI:$telegram_bot_api_version"
|
||||
implementation "dev.inmo:tgbotapi:$telegram_bot_api_version"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.api.bot.getMe
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.api.telegramBot
|
||||
import dev.inmo.tgbotapi.bot.Ktor.telegramBot
|
||||
import dev.inmo.tgbotapi.extensions.api.bot.getMe
|
||||
|
||||
/**
|
||||
* This is one of the most easiest bot - it will just print information about itself
|
||||
|
||||
@@ -13,12 +13,9 @@ apply plugin: 'application'
|
||||
|
||||
mainClassName="HelloBotKt"
|
||||
|
||||
repositories {
|
||||
jcenter()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
|
||||
|
||||
implementation "com.github.insanusmokrassar:TelegramBotAPI:$telegram_bot_api_version"
|
||||
implementation "dev.inmo:tgbotapi:$telegram_bot_api_version"
|
||||
}
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.api.chat.get.getChat
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.api.send.sendTextMessage
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.api.telegramBot
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.formatting.linkMarkdownV2
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.formatting.textMentionMarkdownV2
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.safely
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.updates.retrieving.startGettingFlowsUpdatesByLongPolling
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.MarkdownV2
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.User
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.chat.abstracts.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.utils.extensions.escapeMarkdownV2Common
|
||||
import dev.inmo.micro_utils.coroutines.safely
|
||||
import dev.inmo.tgbotapi.extensions.api.chat.get.getChat
|
||||
import dev.inmo.tgbotapi.extensions.api.send.reply
|
||||
import dev.inmo.tgbotapi.extensions.api.send.sendTextMessage
|
||||
import dev.inmo.tgbotapi.bot.Ktor.telegramBot
|
||||
import dev.inmo.tgbotapi.extensions.utils.asChannelChat
|
||||
import dev.inmo.tgbotapi.extensions.utils.formatting.linkMarkdownV2
|
||||
import dev.inmo.tgbotapi.extensions.utils.formatting.textMentionMarkdownV2
|
||||
import dev.inmo.tgbotapi.extensions.utils.updates.retrieving.longPolling
|
||||
import dev.inmo.tgbotapi.types.ParseMode.MarkdownV2
|
||||
import dev.inmo.tgbotapi.types.User
|
||||
import dev.inmo.tgbotapi.types.chat.abstracts.*
|
||||
import dev.inmo.tgbotapi.utils.extensions.escapeMarkdownV2Common
|
||||
import kotlinx.coroutines.*
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
@@ -23,11 +25,12 @@ suspend fun main(vararg args: String) {
|
||||
|
||||
val scope = CoroutineScope(Dispatchers.Default)
|
||||
|
||||
bot.startGettingFlowsUpdatesByLongPolling(scope = scope) {
|
||||
bot.longPolling(scope = scope) {
|
||||
messageFlow.onEach {
|
||||
safely {
|
||||
val chat = it.data.chat
|
||||
val message = "Oh, hi, " + when (chat) {
|
||||
val message = it.data
|
||||
val chat = message.chat
|
||||
val answerText = "Oh, hi, " + when (chat) {
|
||||
is PrivateChat -> "${chat.firstName} ${chat.lastName}".textMentionMarkdownV2(chat.id)
|
||||
is User -> "${chat.firstName} ${chat.lastName}".textMentionMarkdownV2(chat.id)
|
||||
is SupergroupChat -> (chat.username ?.username ?: bot.getChat(chat).inviteLink) ?.let {
|
||||
@@ -38,13 +41,17 @@ suspend fun main(vararg args: String) {
|
||||
} ?: chat.title
|
||||
else -> "Unknown :(".escapeMarkdownV2Common()
|
||||
}
|
||||
bot.sendTextMessage(chat, message, MarkdownV2)
|
||||
bot.reply(
|
||||
message,
|
||||
answerText,
|
||||
MarkdownV2
|
||||
)
|
||||
}
|
||||
}.launchIn(scope)
|
||||
channelPostFlow.onEach {
|
||||
safely {
|
||||
val chat = it.data.chat
|
||||
val message = "Hi everybody in this channel \"${(chat as ChannelChat).title}\""
|
||||
val message = "Hi everybody in this channel \"${(chat.asChannelChat()) ?.title}\""
|
||||
bot.sendTextMessage(chat, message, MarkdownV2)
|
||||
}
|
||||
}.launchIn(scope)
|
||||
|
||||
30
README.md
30
README.md
@@ -1,2 +1,32 @@
|
||||
# TelegramBotAPI-examples
|
||||
|
||||
This repository contains several examples of simple bots which are using TelegramBotAPI
|
||||
|
||||
## How to use this repository
|
||||
|
||||
This repository contains several important things:
|
||||
|
||||
* Example subprojects
|
||||
* Commits
|
||||
* Structure
|
||||
|
||||
### Example subproject
|
||||
|
||||
Each example subproject contains information about how to run this example and what is it
|
||||
doing. Usually, it is some simple thing like sending "hello" message to the user which
|
||||
wrote to the bot.
|
||||
|
||||
### Commits
|
||||
|
||||
Commits can contains some things like migration onto new version (especially it is actual
|
||||
for major version changes), updates according to the new features in versions and
|
||||
different other things which usually more important in context of history or changes
|
||||
between library version
|
||||
|
||||
### Structure
|
||||
|
||||
Structure of this repository fully representative (it is the reason why this repo
|
||||
contains multiplatform subprojects) and you can use it as some template (but I am strongly
|
||||
recommend you to use my
|
||||
[TelegramBot template](https://github.com/InsanusMokrassar/TelegramBotAPI-bot_template) or
|
||||
[Multiplatform Project template](https://github.com/InsanusMokrassar/KotlinMultiplatformProjectTemplate))
|
||||
|
||||
@@ -13,12 +13,9 @@ apply plugin: 'application'
|
||||
|
||||
mainClassName="RandomFileSenderBotKt"
|
||||
|
||||
repositories {
|
||||
jcenter()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
|
||||
|
||||
implementation "com.github.insanusmokrassar:TelegramBotAPI:$telegram_bot_api_version"
|
||||
implementation "dev.inmo:tgbotapi:$telegram_bot_api_version"
|
||||
}
|
||||
|
||||
@@ -1,16 +1,13 @@
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.api.bot.getMe
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.api.bot.setMyCommands
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.api.send.media.sendDocument
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.api.send.sendTextMessage
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.api.telegramBot
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.safely
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.updates.filterExactCommands
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.updates.retrieving.startGettingFlowsUpdatesByLongPolling
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.toInputFile
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.BotCommand
|
||||
import dev.inmo.tgbotapi.bot.Ktor.telegramBot
|
||||
import dev.inmo.tgbotapi.extensions.api.bot.getMe
|
||||
import dev.inmo.tgbotapi.extensions.api.bot.setMyCommands
|
||||
import dev.inmo.tgbotapi.extensions.api.send.media.sendDocument
|
||||
import dev.inmo.tgbotapi.extensions.api.send.reply
|
||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.buildBehaviour
|
||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onCommand
|
||||
import dev.inmo.tgbotapi.requests.abstracts.toInputFile
|
||||
import dev.inmo.tgbotapi.types.BotCommand
|
||||
import kotlinx.coroutines.*
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
import java.io.File
|
||||
|
||||
private const val command = "send_file"
|
||||
@@ -33,25 +30,18 @@ suspend fun main(args: Array<String>) {
|
||||
val bot = telegramBot(botToken)
|
||||
val scope = CoroutineScope(Dispatchers.Default)
|
||||
|
||||
bot.startGettingFlowsUpdatesByLongPolling(scope = scope) {
|
||||
messageFlow.filterExactCommands(Regex(command)).onEach { message ->
|
||||
safely {
|
||||
pickFile() ?.let {
|
||||
bot.sendDocument(
|
||||
message.chat.id,
|
||||
it.toInputFile()
|
||||
)
|
||||
} ?: bot.sendTextMessage(message.chat.id, "Nothing selected :(")
|
||||
}
|
||||
}.launchIn(scope)
|
||||
}
|
||||
|
||||
safely {
|
||||
bot.setMyCommands(
|
||||
bot.buildBehaviour(scope) {
|
||||
onCommand(command.toRegex()) { message ->
|
||||
pickFile() ?.let {
|
||||
bot.sendDocument(
|
||||
message.chat.id,
|
||||
it.toInputFile()
|
||||
)
|
||||
} ?: bot.reply(message, "Nothing selected :(")
|
||||
}
|
||||
setMyCommands(
|
||||
BotCommand(command, "Send some random file in picker directory")
|
||||
)
|
||||
println(bot.getMe())
|
||||
}
|
||||
|
||||
scope.coroutineContext[Job]!!.join()
|
||||
println(getMe())
|
||||
}.join()
|
||||
}
|
||||
|
||||
@@ -12,12 +12,10 @@ plugins {
|
||||
id "org.jetbrains.kotlin.multiplatform" version "$kotlin_version"
|
||||
}
|
||||
|
||||
repositories {
|
||||
jcenter()
|
||||
}
|
||||
|
||||
kotlin {
|
||||
jvm()
|
||||
// js(LEGACY) {
|
||||
js(IR) {
|
||||
browser()
|
||||
binaries.executable()
|
||||
@@ -28,7 +26,7 @@ kotlin {
|
||||
dependencies {
|
||||
implementation kotlin('stdlib')
|
||||
|
||||
api "com.github.insanusmokrassar:TelegramBotAPI:$telegram_bot_api_version"
|
||||
api "dev.inmo:tgbotapi:$telegram_bot_api_version"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,12 @@
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.api.bot.getMe
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.api.send.media.sendMediaGroup
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.api.telegramBot
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.safely
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.shortcuts.*
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.updates.retrieving.startGettingFlowsUpdatesByLongPolling
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.message.content.abstracts.MediaGroupContent
|
||||
import com.github.insanusmokrassar.TelegramBotAPI.types.message.content.abstracts.MessageContent
|
||||
import dev.inmo.tgbotapi.extensions.api.bot.getMe
|
||||
import dev.inmo.tgbotapi.bot.Ktor.telegramBot
|
||||
import dev.inmo.tgbotapi.extensions.api.send.media.*
|
||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.*
|
||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.*
|
||||
import dev.inmo.tgbotapi.extensions.utils.shortcuts.*
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.MediaGroupMessage
|
||||
import kotlinx.coroutines.*
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
import kotlin.coroutines.coroutineContext
|
||||
|
||||
suspend fun activateResenderBot(
|
||||
token: String,
|
||||
@@ -18,26 +16,20 @@ suspend fun activateResenderBot(
|
||||
|
||||
print(bot.getMe())
|
||||
|
||||
supervisorScope {
|
||||
val scope = this
|
||||
bot.startGettingFlowsUpdatesByLongPolling {
|
||||
filterContentMessages<MessageContent>(scope).onEach {
|
||||
it.content.createResends(it.chat.id, replyToMessageId = it.messageId).forEach {
|
||||
bot.executeUnsafe(it) {
|
||||
it.forEach(print)
|
||||
} ?.also {
|
||||
print(it)
|
||||
}
|
||||
}
|
||||
}.launchIn(scope)
|
||||
mediaGroupMessages(scope).onEach {
|
||||
safely({ print(it.stackTraceToString()) }) {
|
||||
println(it.chat)
|
||||
bot.execute(it.createResend(it.chat ?: return@safely, replyTo = it.first().messageId)).also {
|
||||
print(it)
|
||||
}
|
||||
}
|
||||
}.launchIn(scope)
|
||||
bot.buildBehaviour(CoroutineScope(coroutineContext + SupervisorJob())) {
|
||||
onContentMessage(
|
||||
additionalFilter = { it !is MediaGroupMessage<*> }
|
||||
) {
|
||||
executeUnsafe(it.content.createResend(it.chat.id, replyToMessageId = it.messageId))
|
||||
}
|
||||
}
|
||||
onVisualGallery {
|
||||
sendVisualMediaGroup(it.chat!!, it.map { it.content.toMediaGroupMemberInputMedia() })
|
||||
}
|
||||
onPlaylist {
|
||||
sendPlaylist(it.chat!!, it.map { it.content.toMediaGroupMemberInputMedia() })
|
||||
}
|
||||
onDocumentsGroup {
|
||||
sendDocumentsGroup(it.chat!!, it.map { it.content.toMediaGroupMemberInputMedia() })
|
||||
}
|
||||
}.join()
|
||||
}
|
||||
|
||||
@@ -13,9 +13,6 @@ apply plugin: 'application'
|
||||
|
||||
mainClassName="ResenderBotJvmKt"
|
||||
|
||||
repositories {
|
||||
jcenter()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
|
||||
|
||||
9
SlotMachineDetectorBot/README.md
Normal file
9
SlotMachineDetectorBot/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
# SlotMachineDetectorBot
|
||||
|
||||
This bot must reply with information about slot machine answer
|
||||
|
||||
## Launch
|
||||
|
||||
```bash
|
||||
../gradlew run --args="BOT_TOKEN"
|
||||
```
|
||||
21
SlotMachineDetectorBot/build.gradle
Normal file
21
SlotMachineDetectorBot/build.gradle
Normal file
@@ -0,0 +1,21 @@
|
||||
buildscript {
|
||||
repositories {
|
||||
jcenter()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
}
|
||||
}
|
||||
|
||||
apply plugin: 'kotlin'
|
||||
apply plugin: 'application'
|
||||
|
||||
mainClassName="SlotMachineDetectorBotKt"
|
||||
|
||||
|
||||
dependencies {
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
|
||||
|
||||
implementation "dev.inmo:tgbotapi:$telegram_bot_api_version"
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
import dev.inmo.micro_utils.coroutines.safely
|
||||
import dev.inmo.tgbotapi.bot.Ktor.telegramBot
|
||||
import dev.inmo.tgbotapi.extensions.api.send.reply
|
||||
import dev.inmo.tgbotapi.extensions.utils.*
|
||||
import dev.inmo.tgbotapi.extensions.utils.shortcuts.filterContentMessages
|
||||
import dev.inmo.tgbotapi.extensions.utils.updates.retrieving.longPolling
|
||||
import dev.inmo.tgbotapi.types.dice.SlotMachineDiceAnimationType
|
||||
import dev.inmo.tgbotapi.types.message.content.DiceContent
|
||||
import kotlinx.coroutines.*
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
|
||||
suspend fun main(args: Array<String>) {
|
||||
val bot = telegramBot(args.first())
|
||||
|
||||
val scope = CoroutineScope(Dispatchers.Default)
|
||||
bot.longPolling(scope = scope) {
|
||||
filterContentMessages<DiceContent>(scope).onEach {
|
||||
val content = it.content
|
||||
val dice = content.dice
|
||||
val diceType = dice.animationType
|
||||
|
||||
safely ({ it.printStackTrace() }) {
|
||||
if (diceType == SlotMachineDiceAnimationType) {
|
||||
val result = dice.calculateSlotMachineResult() ?: return@safely
|
||||
bot.reply(it, "${result.leftReel}|${result.centerReel}|${result.rightReel}")
|
||||
} else {
|
||||
bot.reply(it, "There is no slot machine dice in message")
|
||||
}
|
||||
}
|
||||
}.launchIn(scope)
|
||||
}
|
||||
|
||||
scope.coroutineContext[Job]!!.join()
|
||||
}
|
||||
10
build.gradle
10
build.gradle
@@ -1,5 +1,15 @@
|
||||
allprojects {
|
||||
repositories {
|
||||
mavenLocal()
|
||||
jcenter()
|
||||
if (project.hasProperty("GITHUB_USER") && project.hasProperty("GITHUB_TOKEN")) {
|
||||
maven {
|
||||
url "https://maven.pkg.github.com/InsanusMokrassar/TelegramBotAPI"
|
||||
credentials {
|
||||
username = project.getProperty("GITHUB_USER")
|
||||
password = project.getProperty("GITHUB_TOKEN")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
kotlin.code.style=official
|
||||
org.gradle.parallel=true
|
||||
|
||||
kotlin_version=1.4.10
|
||||
telegram_bot_api_version=0.28.5
|
||||
kotlin_version=1.5.10
|
||||
telegram_bot_api_version=0.35.0
|
||||
|
||||
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-6.6-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-bin.zip
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
include ":ForwarderBot"
|
||||
include ":ForwardInfoSenderBot"
|
||||
include ":RandomFileSenderBot"
|
||||
include ":HelloBot"
|
||||
include ":GetMeBot"
|
||||
include ":FilesLoaderBot"
|
||||
include ":ResenderBot:ResenderBotLib"
|
||||
include ":ResenderBot:jvm_launcher"
|
||||
include ":SlotMachineDetectorBot"
|
||||
|
||||
Reference in New Issue
Block a user