Skip to content

Commit 9352bb0

Browse files
add tests for reading and removing business messages
1 parent b1bb11d commit 9352bb0

1 file changed

Lines changed: 54 additions & 1 deletion

File tree

BusinessConnectionsBot/src/main/kotlin/BusinessConnectionsBot.kt

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ import dev.inmo.kslog.common.KSLog
22
import dev.inmo.kslog.common.LogLevel
33
import dev.inmo.kslog.common.defaultMessageFormatter
44
import dev.inmo.kslog.common.setDefaultKSLog
5+
import dev.inmo.tgbotapi.extensions.api.answers.answer
56
import dev.inmo.tgbotapi.extensions.api.bot.getMe
7+
import dev.inmo.tgbotapi.extensions.api.business.deleteBusinessMessages
8+
import dev.inmo.tgbotapi.extensions.api.business.readBusinessMessage
69
import dev.inmo.tgbotapi.extensions.api.chat.modify.pinChatMessage
710
import dev.inmo.tgbotapi.extensions.api.chat.modify.unpinChatMessage
811
import dev.inmo.tgbotapi.extensions.api.get.getBusinessConnection
@@ -14,10 +17,15 @@ import dev.inmo.tgbotapi.extensions.utils.accessibleMessageOrNull
1417
import dev.inmo.tgbotapi.extensions.utils.ifAccessibleMessage
1518
import dev.inmo.tgbotapi.extensions.utils.ifBusinessContentMessage
1619
import dev.inmo.tgbotapi.extensions.utils.textContentOrNull
20+
import dev.inmo.tgbotapi.extensions.utils.types.buttons.dataButton
21+
import dev.inmo.tgbotapi.extensions.utils.types.buttons.inlineKeyboard
1722
import dev.inmo.tgbotapi.types.ChatId
23+
import dev.inmo.tgbotapi.types.MessageId
24+
import dev.inmo.tgbotapi.types.RawChatId
1825
import dev.inmo.tgbotapi.types.business_connection.BusinessConnection
1926
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
2027
import dev.inmo.tgbotapi.types.chat.PrivateChat
28+
import dev.inmo.tgbotapi.utils.row
2129
import dev.inmo.tgbotapi.utils.toJson
2230
import kotlinx.coroutines.CoroutineScope
2331
import kotlinx.coroutines.Dispatchers
@@ -78,7 +86,20 @@ suspend fun main(args: Array<String>) {
7886
if (businessContentMessage.sentByBusinessConnectionOwner) {
7987
reply(sent, "You have sent this message to the ${businessContentMessage.businessConnectionId.string} related chat")
8088
} else {
81-
reply(sent, "User have sent this message to you in the ${businessContentMessage.businessConnectionId.string} related chat")
89+
reply(
90+
to = sent,
91+
text = "User have sent this message to you in the ${businessContentMessage.businessConnectionId.string} related chat",
92+
)
93+
send(
94+
chatId = businessConnectionsChats[it.businessConnectionId] ?: return@ifBusinessContentMessage,
95+
text = "User have sent this message to you in the ${businessContentMessage.businessConnectionId.string} related chat",
96+
replyMarkup = inlineKeyboard {
97+
row {
98+
dataButton("Read message", "read ${it.chat.id.chatId.long} ${it.messageId.long}")
99+
dataButton("Delete message", "delete ${it.chat.id.chatId.long} ${it.messageId.long}")
100+
}
101+
}
102+
)
82103
}
83104
}
84105
}
@@ -116,5 +137,37 @@ suspend fun main(args: Array<String>) {
116137
}
117138
}
118139
}
140+
onMessageDataCallbackQuery(Regex("read \\d+ \\d+")) {
141+
val (_, chatIdString, messageIdString) = it.data.split(" ")
142+
val chatId = chatIdString.toLongOrNull() ?.let(::RawChatId) ?.let(::ChatId) ?: return@onMessageDataCallbackQuery
143+
val messageId = messageIdString.toLongOrNull() ?.let(::MessageId) ?: return@onMessageDataCallbackQuery
144+
val businessConnectionId = chatsBusinessConnections[it.message.chat.id]
145+
146+
val readResponse = businessConnectionId ?.let { readBusinessMessage(it, chatId, messageId) }
147+
answer(
148+
it,
149+
if (readResponse == null) {
150+
"There is no business connection for current chat"
151+
} else {
152+
"Message has been read"
153+
}
154+
)
155+
}
156+
onMessageDataCallbackQuery(Regex("delete \\d+ \\d+")) {
157+
val (_, chatIdString, messageIdString) = it.data.split(" ")
158+
val chatId = chatIdString.toLongOrNull() ?.let(::RawChatId) ?.let(::ChatId) ?: return@onMessageDataCallbackQuery
159+
val messageId = messageIdString.toLongOrNull() ?.let(::MessageId) ?: return@onMessageDataCallbackQuery
160+
val businessConnectionId = chatsBusinessConnections[it.message.chat.id]
161+
162+
val readResponse = businessConnectionId ?.let { deleteBusinessMessages(it, listOf(messageId)) }
163+
answer(
164+
it,
165+
if (readResponse == null) {
166+
"There is no business connection for current chat"
167+
} else {
168+
"Message has been deleted"
169+
}
170+
)
171+
}
119172
}.second.join()
120173
}

0 commit comments

Comments
 (0)