Skip to content

Commit 0e8714c

Browse files
Merge pull request #351 from InsanusMokrassar/29.0.0
29.0.0
2 parents d3e6014 + ea74f88 commit 0e8714c

9 files changed

Lines changed: 332 additions & 2 deletions

File tree

ChecklistsBot/build.gradle

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
buildscript {
2+
repositories {
3+
mavenCentral()
4+
}
5+
6+
dependencies {
7+
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
8+
}
9+
}
10+
11+
apply plugin: 'kotlin'
12+
apply plugin: 'application'
13+
14+
mainClassName="ChecklistsBotKt"
15+
16+
17+
dependencies {
18+
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
19+
20+
implementation "dev.inmo:tgbotapi:$telegram_bot_api_version"
21+
}
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
import dev.inmo.kslog.common.KSLog
2+
import dev.inmo.kslog.common.LogLevel
3+
import dev.inmo.kslog.common.defaultMessageFormatter
4+
import dev.inmo.kslog.common.setDefaultKSLog
5+
import dev.inmo.micro_utils.coroutines.runCatchingLogging
6+
import dev.inmo.micro_utils.coroutines.subscribeLoggingDropExceptions
7+
import dev.inmo.micro_utils.coroutines.subscribeSafelyWithoutExceptions
8+
import dev.inmo.tgbotapi.extensions.api.bot.getMe
9+
import dev.inmo.tgbotapi.extensions.api.bot.getMyStarBalance
10+
import dev.inmo.tgbotapi.extensions.api.chat.get.getChat
11+
import dev.inmo.tgbotapi.extensions.api.send.reply
12+
import dev.inmo.tgbotapi.extensions.api.send.resend
13+
import dev.inmo.tgbotapi.extensions.api.send.send
14+
import dev.inmo.tgbotapi.extensions.api.suggested.approveSuggestedPost
15+
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContextData
16+
import dev.inmo.tgbotapi.extensions.behaviour_builder.buildSubcontextInitialAction
17+
import dev.inmo.tgbotapi.extensions.behaviour_builder.expectations.waitSuggestedPostApproved
18+
import dev.inmo.tgbotapi.extensions.behaviour_builder.expectations.waitSuggestedPostDeclined
19+
import dev.inmo.tgbotapi.extensions.behaviour_builder.telegramBotWithBehaviourAndLongPolling
20+
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onChannelDirectMessagesConfigurationChanged
21+
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onChecklistContent
22+
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onChecklistTasksAdded
23+
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onChecklistTasksDone
24+
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onCommand
25+
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onContentMessage
26+
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onSuggestedPostApprovalFailed
27+
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onSuggestedPostApproved
28+
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onSuggestedPostDeclined
29+
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onSuggestedPostPaid
30+
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onSuggestedPostRefunded
31+
import dev.inmo.tgbotapi.extensions.utils.channelDirectMessagesContentMessageOrNull
32+
import dev.inmo.tgbotapi.extensions.utils.previewChannelDirectMessagesChatOrNull
33+
import dev.inmo.tgbotapi.extensions.utils.suggestedChannelDirectMessagesContentMessageOrNull
34+
import dev.inmo.tgbotapi.types.checklists.ChecklistTaskId
35+
import dev.inmo.tgbotapi.types.message.SuggestedPostParameters
36+
import dev.inmo.tgbotapi.types.message.abstracts.CommonMessage
37+
import dev.inmo.tgbotapi.types.message.content.ChecklistContent
38+
import dev.inmo.tgbotapi.types.message.textsources.TextSourcesList
39+
import dev.inmo.tgbotapi.types.update.abstracts.Update
40+
import dev.inmo.tgbotapi.utils.bold
41+
import dev.inmo.tgbotapi.utils.buildEntities
42+
import dev.inmo.tgbotapi.utils.code
43+
import dev.inmo.tgbotapi.utils.firstOf
44+
import kotlinx.coroutines.CoroutineScope
45+
import kotlinx.coroutines.Dispatchers
46+
import kotlinx.coroutines.delay
47+
import kotlinx.coroutines.flow.filter
48+
import kotlinx.coroutines.flow.first
49+
50+
suspend fun main(vararg args: String) {
51+
val botToken = args.first()
52+
53+
val isDebug = args.any { it == "debug" }
54+
val isTestServer = args.any { it == "testServer" }
55+
56+
if (isDebug) {
57+
setDefaultKSLog(
58+
KSLog { level: LogLevel, tag: String?, message: Any, throwable: Throwable? ->
59+
println(defaultMessageFormatter(level, tag, message, throwable))
60+
}
61+
)
62+
}
63+
64+
telegramBotWithBehaviourAndLongPolling(
65+
botToken,
66+
CoroutineScope(Dispatchers.Default),
67+
testServer = isTestServer,
68+
) {
69+
// start here!!
70+
val me = getMe()
71+
println(me)
72+
73+
fun ChecklistContent.textBuilderTextSources(): TextSourcesList {
74+
return buildEntities {
75+
+checklist.textSources + "\n\n"
76+
checklist.tasks.forEach { task ->
77+
+""
78+
code(
79+
if (task.completionDate != null) {
80+
"[x] "
81+
} else {
82+
"[ ] "
83+
}
84+
)
85+
86+
bold(task.textSources) + "\n"
87+
}
88+
}
89+
}
90+
91+
onChecklistContent { messageWithContent ->
92+
reply(messageWithContent) {
93+
+messageWithContent.content.textBuilderTextSources()
94+
}
95+
}
96+
97+
onChecklistTasksDone { eventMessage ->
98+
reply(
99+
eventMessage,
100+
checklistTaskId = eventMessage.chatEvent.markedAsDone ?.firstOrNull()
101+
) {
102+
eventMessage.chatEvent.checklistMessage.content.checklist
103+
+eventMessage.chatEvent.checklistMessage.content.textBuilderTextSources()
104+
}
105+
}
106+
107+
onChecklistTasksAdded { messageWithContent ->
108+
reply(
109+
messageWithContent.chatEvent.checklistMessage,
110+
checklistTaskId = messageWithContent.chatEvent.tasks.firstOrNull() ?.id
111+
) {
112+
+messageWithContent.chatEvent.checklistMessage.content.textBuilderTextSources()
113+
}
114+
}
115+
116+
allUpdatesFlow.subscribeLoggingDropExceptions(this) {
117+
println(it)
118+
}
119+
}.second.join()
120+
}

ResenderBot/jvm_launcher/src/main/kotlin/ResenderBotJvm.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,19 @@
1+
import dev.inmo.kslog.common.KSLog
2+
import dev.inmo.kslog.common.LogLevel
3+
import dev.inmo.kslog.common.defaultMessageFormatter
4+
import dev.inmo.kslog.common.setDefaultKSLog
5+
16
suspend fun main(args: Array<String>) {
7+
val isDebug = args.getOrNull(1) == "debug"
8+
9+
if (isDebug) {
10+
setDefaultKSLog(
11+
KSLog { level: LogLevel, tag: String?, message: Any, throwable: Throwable? ->
12+
println(defaultMessageFormatter(level, tag, message, throwable))
13+
}
14+
)
15+
}
16+
217
activateResenderBot(args.first()) {
318
println(it)
419
}

StarTransactionsBot/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# CustomBot
1+
# StarTransactionsBot
22

33
This bot basically have no any useful behaviour, but you may customize it as a playground
44

SuggestedPosts/README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# StickerSetHandler
2+
3+
Send sticker to this bot to form your own stickers set. Send /delete to delete this sticker set
4+
5+
## How to run
6+
7+
```bash
8+
./gradlew run --args="TOKEN"
9+
```

SuggestedPosts/build.gradle

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
buildscript {
2+
repositories {
3+
mavenCentral()
4+
}
5+
6+
dependencies {
7+
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
8+
}
9+
}
10+
11+
apply plugin: 'kotlin'
12+
apply plugin: 'application'
13+
14+
mainClassName="SuggestedPostsBotKt"
15+
16+
17+
dependencies {
18+
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
19+
20+
implementation "dev.inmo:tgbotapi:$telegram_bot_api_version"
21+
}
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
import dev.inmo.kslog.common.KSLog
2+
import dev.inmo.kslog.common.LogLevel
3+
import dev.inmo.kslog.common.defaultMessageFormatter
4+
import dev.inmo.kslog.common.setDefaultKSLog
5+
import dev.inmo.micro_utils.coroutines.runCatchingLogging
6+
import dev.inmo.micro_utils.coroutines.subscribeLoggingDropExceptions
7+
import dev.inmo.micro_utils.coroutines.subscribeSafelyWithoutExceptions
8+
import dev.inmo.tgbotapi.extensions.api.bot.getMe
9+
import dev.inmo.tgbotapi.extensions.api.bot.getMyStarBalance
10+
import dev.inmo.tgbotapi.extensions.api.chat.get.getChat
11+
import dev.inmo.tgbotapi.extensions.api.send.reply
12+
import dev.inmo.tgbotapi.extensions.api.send.resend
13+
import dev.inmo.tgbotapi.extensions.api.send.send
14+
import dev.inmo.tgbotapi.extensions.api.suggested.approveSuggestedPost
15+
import dev.inmo.tgbotapi.extensions.api.suggested.declineSuggestedPost
16+
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContextData
17+
import dev.inmo.tgbotapi.extensions.behaviour_builder.buildSubcontextInitialAction
18+
import dev.inmo.tgbotapi.extensions.behaviour_builder.expectations.waitSuggestedPostApproved
19+
import dev.inmo.tgbotapi.extensions.behaviour_builder.expectations.waitSuggestedPostDeclined
20+
import dev.inmo.tgbotapi.extensions.behaviour_builder.telegramBotWithBehaviourAndLongPolling
21+
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onChannelDirectMessagesConfigurationChanged
22+
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onCommand
23+
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onContentMessage
24+
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onSuggestedPostApprovalFailed
25+
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onSuggestedPostApproved
26+
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onSuggestedPostDeclined
27+
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onSuggestedPostPaid
28+
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onSuggestedPostRefunded
29+
import dev.inmo.tgbotapi.extensions.utils.channelDirectMessagesContentMessageOrNull
30+
import dev.inmo.tgbotapi.extensions.utils.previewChannelDirectMessagesChatOrNull
31+
import dev.inmo.tgbotapi.extensions.utils.suggestedChannelDirectMessagesContentMessageOrNull
32+
import dev.inmo.tgbotapi.types.message.SuggestedPostParameters
33+
import dev.inmo.tgbotapi.types.message.abstracts.ChannelPaidPost
34+
import dev.inmo.tgbotapi.types.message.abstracts.CommonMessage
35+
import dev.inmo.tgbotapi.types.update.abstracts.Update
36+
import dev.inmo.tgbotapi.utils.firstOf
37+
import kotlinx.coroutines.CoroutineScope
38+
import kotlinx.coroutines.Dispatchers
39+
import kotlinx.coroutines.delay
40+
import kotlinx.coroutines.flow.filter
41+
import kotlinx.coroutines.flow.first
42+
43+
/**
44+
* This place can be the playground for your code.
45+
*/
46+
suspend fun main(vararg args: String) {
47+
val botToken = args.first()
48+
49+
val isDebug = args.any { it == "debug" }
50+
val isTestServer = args.any { it == "testServer" }
51+
52+
if (isDebug) {
53+
setDefaultKSLog(
54+
KSLog { level: LogLevel, tag: String?, message: Any, throwable: Throwable? ->
55+
println(defaultMessageFormatter(level, tag, message, throwable))
56+
}
57+
)
58+
}
59+
60+
telegramBotWithBehaviourAndLongPolling(
61+
botToken,
62+
CoroutineScope(Dispatchers.Default),
63+
testServer = isTestServer,
64+
) {
65+
// start here!!
66+
val me = getMe()
67+
println(me)
68+
69+
onCommand("start") {
70+
println(getChat(it.chat))
71+
}
72+
73+
onContentMessage {
74+
val message = it.channelDirectMessagesContentMessageOrNull() ?: return@onContentMessage
75+
val chat = getChat(it.chat)
76+
println(chat)
77+
78+
resend(
79+
message.chat.id,
80+
message.content,
81+
suggestedPostParameters = SuggestedPostParameters()
82+
)
83+
}
84+
85+
onContentMessage(
86+
subcontextUpdatesFilter = { _, _ -> true } // important to not miss updates in channel for waitSuggestedPost events
87+
) { message ->
88+
val suggestedPost = message.suggestedChannelDirectMessagesContentMessageOrNull() ?: return@onContentMessage
89+
90+
firstOf(
91+
{
92+
waitSuggestedPostApproved().filter {
93+
it.suggestedPostMessage ?.chat ?.id == message.chat.id
94+
}.first()
95+
},
96+
{
97+
waitSuggestedPostDeclined().filter {
98+
it.suggestedPostMessage ?.chat ?.id == message.chat.id
99+
}.first()
100+
},
101+
{
102+
for (i in 0 until 3) {
103+
delay(1000L)
104+
send(suggestedPost.chat, "${3 - i}")
105+
}
106+
declineSuggestedPost(suggestedPost)
107+
},
108+
)
109+
}
110+
111+
onContentMessage(initialFilter = { it is ChannelPaidPost<*> }) {
112+
println(it)
113+
}
114+
115+
onSuggestedPostPaid {
116+
println(it)
117+
reply(it, "Paid")
118+
}
119+
onSuggestedPostApproved {
120+
println(it)
121+
reply(it, "Approved")
122+
}
123+
onSuggestedPostDeclined {
124+
println(it)
125+
reply(it, "Declined")
126+
}
127+
onSuggestedPostRefunded {
128+
println(it)
129+
reply(it, "Refunded")
130+
}
131+
onSuggestedPostApprovalFailed {
132+
println(it)
133+
reply(it, "Approval failed")
134+
}
135+
136+
allUpdatesFlow.subscribeLoggingDropExceptions(this) {
137+
println(it)
138+
}
139+
}.second.join()
140+
}

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ kotlin.daemon.jvmargs=-Xmx3g -Xms500m
66

77

88
kotlin_version=2.2.10
9-
telegram_bot_api_version=28.0.3
9+
telegram_bot_api_version=29.0.0
1010
micro_utils_version=0.26.3
1111
serialization_version=1.9.0
1212
ktor_version=3.2.3

settings.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,7 @@ include ":CustomBot"
5959
include ":MemberUpdatedWatcherBot"
6060

6161
include ":WebHooks"
62+
63+
include ":SuggestedPosts"
64+
65+
include ":ChecklistsBot"

0 commit comments

Comments
 (0)