Skip to content

Commit 6e3a9c7

Browse files
authored
Merge pull request #47 from /issues/46
Fix #46: Support of multi-topic forums in `/pin`
2 parents 14fd618 + 7ee85ed commit 6e3a9c7

2 files changed

Lines changed: 32 additions & 2 deletions

File tree

pins/src/main/kotlin/by/jprof/telegram/bot/pins/utils/PinRequestFinder.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import dev.inmo.tgbotapi.extensions.utils.asBotCommandTextSource
77
import dev.inmo.tgbotapi.extensions.utils.asContentMessage
88
import dev.inmo.tgbotapi.extensions.utils.asFromUser
99
import dev.inmo.tgbotapi.extensions.utils.asTextContent
10+
import dev.inmo.tgbotapi.types.message.abstracts.ChatEventMessage
1011
import dev.inmo.tgbotapi.types.message.abstracts.PossiblyReplyMessage
1112
import dev.inmo.tgbotapi.types.message.textsources.TextSource
1213
import dev.inmo.tgbotapi.types.update.abstracts.Update
@@ -64,7 +65,7 @@ interface PinRequestFinder : (Update) -> PinRequest? {
6465
val commandArgument = text.textSources.getOrNull(commandIndex + 1)
6566

6667
return PinRequest(
67-
message = replyTo?.replyTo,
68+
message = replyTo?.replyTo?.takeUnless { it is ChatEventMessage<*> },
6869
user = fromUser.user,
6970
chat = content.chat,
7071
request = content,

pins/src/test/kotlin/by/jprof/telegram/bot/pins/utils/PinRequestFinderTest.kt

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,12 @@ package by.jprof.telegram.bot.pins.utils
33
import by.jprof.telegram.bot.pins.model.PinDuration
44
import by.jprof.telegram.bot.pins.model.PinRequest
55
import dev.inmo.tgbotapi.types.chat.CommonUser
6+
import dev.inmo.tgbotapi.types.chat.ForumChat
67
import dev.inmo.tgbotapi.types.chat.GroupChat
8+
import dev.inmo.tgbotapi.types.message.ChatEvents.forum.ForumTopicCreated
9+
import dev.inmo.tgbotapi.types.message.CommonForumContentMessageImpl
10+
import dev.inmo.tgbotapi.types.message.CommonSupergroupEventMessage
11+
import dev.inmo.tgbotapi.types.message.abstracts.ChatEventMessage
712
import dev.inmo.tgbotapi.types.message.abstracts.CommonGroupContentMessage
813
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
914
import dev.inmo.tgbotapi.types.message.abstracts.Message
@@ -39,7 +44,9 @@ internal class PinRequestFinderTest {
3944
Assertions.assertNull(PinRequestFinder.DEFAULT(update))
4045
} else {
4146
Assertions.assertEquals(
42-
expected.copy(request = update.data as Message, message = (update.data as PossiblyReplyMessage).replyTo),
47+
expected.copy(
48+
request = update.data as Message,
49+
message = (update.data as PossiblyReplyMessage).replyTo?.takeUnless { it is ChatEventMessage<*> }),
4350
PinRequestFinder.DEFAULT(update)
4451
)
4552
}
@@ -48,8 +55,10 @@ internal class PinRequestFinderTest {
4855
fun default(): Stream<Arguments>? {
4956
val user = mockk<CommonUser>()
5057
val chat = mockk<GroupChat>()
58+
val forum = mockk<ForumChat>()
5159
val request = mockk<Message>()
5260
val replyTo = mockk<Message>()
61+
val forumTopicCreated = mockk<CommonSupergroupEventMessage<ForumTopicCreated>>()
5362

5463
return Stream.of(
5564
Arguments.of(
@@ -283,6 +292,26 @@ internal class PinRequestFinderTest {
283292
duration = PinDuration.Unrecognized,
284293
)
285294
),
295+
Arguments.of(
296+
mockk<MessageUpdate> {
297+
every { data } returns mockk<CommonForumContentMessageImpl<TextContent>> message@{
298+
every { this@message.chat } returns forum
299+
every { this@message.replyTo } returns forumTopicCreated
300+
every { content } returns TextContent(
301+
text = "/pin",
302+
textSources = listOf(BotCommandTextSource("/pin"))
303+
)
304+
every { this@message.user } returns user
305+
}
306+
},
307+
PinRequest(
308+
message = null,
309+
user = user,
310+
chat = forum,
311+
request = request,
312+
duration = PinDuration.Recognized(Duration.ofHours(1)),
313+
)
314+
),
286315
)
287316
}
288317
}

0 commit comments

Comments
 (0)