Skip to content

Commit 468e35a

Browse files
committed
Redirect users to the PM chat for quizojis
1 parent 0ea6788 commit 468e35a

File tree

6 files changed

+143
-0
lines changed

6 files changed

+143
-0
lines changed

quizoji/build.gradle.kts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
plugins {
2+
kotlin("jvm")
3+
}
4+
5+
dependencies {
6+
api(project.projects.core)
7+
api(libs.tgbotapi.core)
8+
implementation(libs.log4j.api)
9+
implementation(libs.tgbotapi.extensions.api)
10+
implementation(libs.tgbotapi.extensions.utils)
11+
12+
testImplementation(libs.junit.jupiter.api)
13+
testImplementation(libs.junit.jupiter.params)
14+
testImplementation(libs.mockk)
15+
testRuntimeOnly(libs.junit.jupiter.engine)
16+
testRuntimeOnly(libs.log4j.core)
17+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package by.jprof.telegram.bot.quizoji
2+
3+
import by.jprof.telegram.bot.core.UpdateProcessor
4+
import dev.inmo.tgbotapi.bot.RequestsExecutor
5+
import dev.inmo.tgbotapi.extensions.api.answers.answerInlineQuery
6+
import dev.inmo.tgbotapi.extensions.utils.asInlineQueryUpdate
7+
import dev.inmo.tgbotapi.types.update.abstracts.Update
8+
import org.apache.logging.log4j.LogManager
9+
10+
class QuizojiUpdateProcessor(
11+
private val bot: RequestsExecutor,
12+
) : UpdateProcessor {
13+
companion object {
14+
private val logger = LogManager.getLogger(QuizojiUpdateProcessor::class.java)!!
15+
}
16+
17+
override suspend fun process(update: Update) {
18+
val inlineQuery = update.asInlineQueryUpdate()?.data ?: return
19+
20+
if (inlineQuery.query.equals("quizoji", ignoreCase = true)) {
21+
bot.answerInlineQuery(
22+
inlineQuery = inlineQuery,
23+
switchPmText = "Create new quizoji",
24+
switchPmParameter = "quizoji",
25+
)
26+
}
27+
}
28+
}
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
package by.jprof.telegram.bot.quizoji
2+
3+
import dev.inmo.tgbotapi.bot.RequestsExecutor
4+
import dev.inmo.tgbotapi.extensions.api.answers.answerInlineQuery
5+
import dev.inmo.tgbotapi.types.InlineQueries.query.BaseInlineQuery
6+
import dev.inmo.tgbotapi.types.update.InlineQueryUpdate
7+
import dev.inmo.tgbotapi.types.update.MessageUpdate
8+
import io.mockk.*
9+
import io.mockk.impl.annotations.MockK
10+
import io.mockk.junit5.MockKExtension
11+
import kotlinx.coroutines.runBlocking
12+
import org.junit.jupiter.api.BeforeEach
13+
import org.junit.jupiter.api.Test
14+
import org.junit.jupiter.api.extension.ExtendWith
15+
16+
@ExtendWith(MockKExtension::class)
17+
internal class QuizojiUpdateProcessorTest {
18+
@MockK(relaxed = true)
19+
private lateinit var bot: RequestsExecutor
20+
21+
lateinit var sut: QuizojiUpdateProcessor
22+
23+
@BeforeEach
24+
fun setUp() {
25+
sut = QuizojiUpdateProcessor(
26+
bot = bot,
27+
)
28+
}
29+
30+
@Test
31+
fun processNonInilineQuery() = runBlocking {
32+
sut.process(
33+
MessageUpdate(
34+
updateId = 1L,
35+
data = mockk()
36+
)
37+
)
38+
39+
verify { listOf(bot) wasNot called }
40+
41+
clearAllMocks()
42+
}
43+
44+
@Test
45+
fun processAlienInilineQuery() = runBlocking {
46+
sut.process(
47+
InlineQueryUpdate(
48+
updateId = 1L,
49+
data = BaseInlineQuery(
50+
id = "1",
51+
from = mockk(),
52+
query = "alien",
53+
offset = "",
54+
)
55+
)
56+
)
57+
58+
verify { listOf(bot) wasNot called }
59+
60+
clearAllMocks()
61+
}
62+
63+
@Test
64+
fun processQuizojiInilineQuery() = runBlocking {
65+
val inlineQuery = BaseInlineQuery(
66+
id = "1",
67+
from = mockk(),
68+
query = "quizoji",
69+
offset = "",
70+
)
71+
72+
sut.process(
73+
InlineQueryUpdate(
74+
updateId = 1L,
75+
data = inlineQuery
76+
)
77+
)
78+
79+
coVerify(exactly = 1) {
80+
bot.answerInlineQuery(
81+
inlineQuery = inlineQuery,
82+
switchPmText = "Create new quizoji",
83+
switchPmParameter = "quizoji",
84+
)
85+
}
86+
87+
clearAllMocks()
88+
}
89+
}

runners/lambda/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,5 @@ dependencies {
1313
implementation(project.projects.jep)
1414
implementation(project.projects.youtube.dynamodb)
1515
implementation(project.projects.kotlin.dynamodb)
16+
implementation(project.projects.quizoji)
1617
}

runners/lambda/src/main/kotlin/by/jprof/telegram/bot/runners/lambda/config/pipeline.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import by.jprof.telegram.bot.core.UpdateProcessor
55
import by.jprof.telegram.bot.jep.JEPUpdateProcessor
66
import by.jprof.telegram.bot.jep.JsoupJEPSummary
77
import by.jprof.telegram.bot.kotlin.KotlinMentionsUpdateProcessor
8+
import by.jprof.telegram.bot.quizoji.QuizojiUpdateProcessor
89
import by.jprof.telegram.bot.youtube.YouTubeUpdateProcessor
910
import org.koin.core.qualifier.named
1011
import org.koin.dsl.module
@@ -37,4 +38,10 @@ val pipelineModule = module {
3738
bot = get(),
3839
)
3940
}
41+
42+
single<UpdateProcessor>(named("QuizojiUpdateProcessor")) {
43+
QuizojiUpdateProcessor(
44+
bot = get(),
45+
)
46+
}
4047
}

settings.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,5 @@ include(":youtube")
1515
include(":youtube:dynamodb")
1616
include(":kotlin")
1717
include(":kotlin:dynamodb")
18+
include(":quizoji")
1819
include(":runners:lambda")

0 commit comments

Comments
 (0)