Skip to content
This repository was archived by the owner on Nov 11, 2022. It is now read-only.

Commit 4f167b2

Browse files
authored
Merge pull request #47 from /issues/39
Fix #39: Shut Up And Take My Money!
2 parents e202b81 + db96013 commit 4f167b2

File tree

13 files changed

+186
-13
lines changed

13 files changed

+186
-13
lines changed

README.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,11 @@ Here is an example of calling "@ImgMacroBot девочка, спиртику н
8080
image::./demos/vodochki phrase.jpeg[]
8181
--
8282

83+
https://knowyourmeme.com/memes/shut-up-and-take-my-money[**Shut Up And Take My Money!**]::
84+
Triggered by a pattern "shut up and take <something>" or by macro id: "take my money: <top text>, <bottom text>"
85+
+
86+
image::./demos/take my money.jpeg[]
87+
8388
== Running locally
8489

8590
. Define the required environment variables in `.env` file in the root of the project.

core/src/main/kotlin/me/madhead/imgmacrobot/core/generators/OneDoesNotSimply.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ class OneDoesNotSimply(
4242

4343
override fun drawParagraphs(template: Image, canvas: Canvas, parsedInlineQuery: OneDoesNotSimplyParsedInlineQuery) {
4444
imageMacroParagraph(text = "ONE DOES NOT SIMPLY", size = 32F) {
45-
layout(template.width.toFloat())
46-
paint(canvas, @Suppress("MagicNumber") 0F, @Suppress("MagicNumber") 10F)
45+
layout(@Suppress("MagicNumber") 0.9F * template.width.toFloat())
46+
paint(canvas, @Suppress("MagicNumber") 0.05F * template.width, @Suppress("MagicNumber") 10F)
4747
}
4848
imageMacroParagraph(text = parsedInlineQuery.doWhat.toUpperCase(), size = 32F) {
4949
layout(@Suppress("MagicNumber") 0.9F * template.width.toFloat())

core/src/main/kotlin/me/madhead/imgmacrobot/core/generators/OneDoesNotSimplyRu.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ class OneDoesNotSimplyRu(
4242

4343
override fun drawParagraphs(template: Image, canvas: Canvas, parsedInlineQuery: OneDoesNotSimplyRuParsedInlineQuery) {
4444
imageMacroParagraph(text = "НЕЛЬЗЯ ПРОСТО ТАК ВЗЯТЬ И", size = 32F) {
45-
layout(template.width.toFloat())
46-
paint(canvas, @Suppress("MagicNumber") 0F, @Suppress("MagicNumber") 10F)
45+
layout(@Suppress("MagicNumber") 0.9F * template.width.toFloat())
46+
paint(canvas, @Suppress("MagicNumber") 0.05F * template.width, @Suppress("MagicNumber") 10F)
4747
}
4848
imageMacroParagraph(text = parsedInlineQuery.doWhat.toUpperCase(), size = 32F) {
4949
layout(@Suppress("MagicNumber") 0.9F * template.width.toFloat())

core/src/main/kotlin/me/madhead/imgmacrobot/core/generators/SomethingOfAScientist.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ class SomethingOfAScientist(
4343

4444
override fun drawParagraphs(template: Image, canvas: Canvas, parsedInlineQuery: SomethingOfAScientistParsedInlineQuery) {
4545
imageMacroParagraph("YOU KNOW") {
46-
layout(template.width.toFloat())
47-
paint(canvas, @Suppress("MagicNumber") 0F, @Suppress("MagicNumber") 10F)
46+
layout(@Suppress("MagicNumber") 0.9F * template.width.toFloat())
47+
paint(canvas, @Suppress("MagicNumber") 0.05F * template.width, @Suppress("MagicNumber") 10F)
4848
}
4949
imageMacroParagraph("I'm something of a ${parsedInlineQuery.who} myself".toUpperCase()) {
5050
layout(@Suppress("MagicNumber") 0.9F * template.width.toFloat())

core/src/main/kotlin/me/madhead/imgmacrobot/core/generators/SomethingOfAScientistRu.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ class SomethingOfAScientistRu(
4242

4343
override fun drawParagraphs(template: Image, canvas: Canvas, parsedInlineQuery: SomethingOfAScientistRuParsedInlineQuery) {
4444
imageMacroParagraph("ЗНАЕТЕ") {
45-
layout(template.width.toFloat())
46-
paint(canvas, @Suppress("MagicNumber") 0F, @Suppress("MagicNumber") 10F)
45+
layout(@Suppress("MagicNumber") 0.9F * template.width.toFloat())
46+
paint(canvas, @Suppress("MagicNumber") 0.05F * template.width, @Suppress("MagicNumber") 10F)
4747
}
4848
imageMacroParagraph("Я И САМ СВОЕГО РОДА ${parsedInlineQuery.who}".toUpperCase()) {
4949
layout(@Suppress("MagicNumber") 0.9F * template.width.toFloat())
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package me.madhead.imgmacrobot.core.generators
2+
3+
import dev.inmo.tgbotapi.types.InlineQueries.abstracts.InlineQuery
4+
import io.micrometer.core.instrument.MeterRegistry
5+
import me.madhead.imgmacrobot.core.ParagraphsImageMacroGenerator
6+
import me.madhead.imgmacrobot.core.ParsedInlineQuery
7+
import me.madhead.imgmacrobot.core.dao.CachedInlineQueryResultDAO
8+
import me.madhead.imgmacrobot.imgur.Imgur
9+
import org.jetbrains.skija.Canvas
10+
import org.jetbrains.skija.Image
11+
import org.jetbrains.skija.paragraph.FontCollection
12+
import java.nio.file.Path
13+
import kotlin.io.path.ExperimentalPathApi
14+
15+
/**
16+
* Morpheus from the "The Matrix" trying to tell you something.
17+
*/
18+
@ExperimentalPathApi
19+
class TakeMyMoney(
20+
templatesDir: Path,
21+
imgur: Imgur,
22+
fontCollection: FontCollection,
23+
cachedInlineQueryResultDAO: CachedInlineQueryResultDAO,
24+
registry: MeterRegistry,
25+
) : ParagraphsImageMacroGenerator<TakeMyMoneyParsedInlineQuery>(
26+
templatesDir,
27+
"take my money.png",
28+
imgur,
29+
fontCollection,
30+
cachedInlineQueryResultDAO,
31+
registry,
32+
) {
33+
companion object {
34+
private val macroIdRegex =
35+
"take my money:(\\s*)(?<top>.+?)(\\s*),(\\s*)(?<bottom>.+?)"
36+
.toRegex(RegexOption.IGNORE_CASE)
37+
private val regex =
38+
"(?<top>shut up( and)?)(\\s*)\\p{P}?(\\s*)(?<bottom>take(\\s*)my.+)"
39+
.toRegex(RegexOption.IGNORE_CASE)
40+
}
41+
42+
@Suppress("ReturnCount")
43+
override fun parseInlineQuery(inlineQuery: InlineQuery): TakeMyMoneyParsedInlineQuery? {
44+
return macroIdRegex.matchEntire(inlineQuery.query)?.groups?.let { groups ->
45+
TakeMyMoneyParsedInlineQuery(
46+
groups["top"]?.value ?: return null,
47+
groups["bottom"]?.value ?: return null,
48+
)
49+
}
50+
?: regex.matchEntire(inlineQuery.query)?.groups?.let { groups ->
51+
TakeMyMoneyParsedInlineQuery(
52+
groups["top"]?.value ?: return null,
53+
groups["bottom"]?.value ?: return null,
54+
)
55+
}
56+
}
57+
58+
override fun drawParagraphs(template: Image, canvas: Canvas, parsedInlineQuery: TakeMyMoneyParsedInlineQuery) {
59+
imageMacroParagraph(parsedInlineQuery.top.toUpperCase()) {
60+
layout(@Suppress("MagicNumber") 0.9F * template.width.toFloat())
61+
paint(canvas, @Suppress("MagicNumber") 0.05F * template.width, @Suppress("MagicNumber") 10F)
62+
}
63+
imageMacroParagraph(parsedInlineQuery.bottom.toUpperCase()) {
64+
layout(@Suppress("MagicNumber") 0.9F * template.width.toFloat())
65+
paint(canvas, @Suppress("MagicNumber") 0.05F * template.width, template.height - @Suppress("MagicNumber") 10 - height)
66+
}
67+
}
68+
}
69+
70+
/**
71+
* [ParsedInlineQuery] implementation for [TakeMyMoney].
72+
*
73+
* @property top top text.
74+
* @property bottom bottom text.
75+
*/
76+
data class TakeMyMoneyParsedInlineQuery(
77+
val top: String,
78+
val bottom: String,
79+
) : ParsedInlineQuery {
80+
override val discriminator: String
81+
get() = "$top/$bottom"
82+
}

core/src/main/kotlin/me/madhead/imgmacrobot/core/generators/VodochkiNam.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class VodochkiNam(
5858
override fun drawParagraphs(template: Image, canvas: Canvas, parsedInlineQuery: VodochkiNamParsedInlineQuery) {
5959
imageMacroParagraph(parsedInlineQuery.top.toUpperCase()) {
6060
layout(@Suppress("MagicNumber") 0.9F * template.width.toFloat())
61-
paint(canvas, @Suppress("MagicNumber") 0F, @Suppress("MagicNumber") 10F)
61+
paint(canvas, @Suppress("MagicNumber") 0.05F * template.width, @Suppress("MagicNumber") 10F)
6262
}
6363
imageMacroParagraph(parsedInlineQuery.bottom.toUpperCase()) {
6464
layout(@Suppress("MagicNumber") 0.9F * template.width.toFloat())

core/src/main/kotlin/me/madhead/imgmacrobot/core/generators/WhatIfIToldYou.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ class WhatIfIToldYou(
4242

4343
override fun drawParagraphs(template: Image, canvas: Canvas, parsedInlineQuery: WhatIfIToldYouParsedInlineQuery) {
4444
imageMacroParagraph("WHAT IF I TOLD YOU") {
45-
layout(template.width.toFloat())
46-
paint(canvas, @Suppress("MagicNumber") 0F, @Suppress("MagicNumber") 10F)
45+
layout(@Suppress("MagicNumber") 0.9F * template.width.toFloat())
46+
paint(canvas, @Suppress("MagicNumber") 0.05F * template.width, @Suppress("MagicNumber") 10F)
4747
}
4848
imageMacroParagraph(parsedInlineQuery.whatIfYouToldMeWhat.toUpperCase()) {
4949
layout(@Suppress("MagicNumber") 0.9F * template.width.toFloat())

core/src/main/kotlin/me/madhead/imgmacrobot/core/generators/WhatIfIToldYouRu.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ class WhatIfIToldYouRu(
4242

4343
override fun drawParagraphs(template: Image, canvas: Canvas, parsedInlineQuery: WhatIfIToldYouRuParsedInlineQuery) {
4444
imageMacroParagraph("ЧТО ЕСЛИ Я СКАЖУ ТЕБЕ") {
45-
layout(template.width.toFloat())
46-
paint(canvas, @Suppress("MagicNumber") 0F, @Suppress("MagicNumber") 10F)
45+
layout(@Suppress("MagicNumber") 0.9F * template.width.toFloat())
46+
paint(canvas, @Suppress("MagicNumber") 0.05F * template.width, @Suppress("MagicNumber") 10F)
4747
}
4848
imageMacroParagraph(parsedInlineQuery.whatIfYouToldMeWhat.toUpperCase()) {
4949
layout(@Suppress("MagicNumber") 0.9F * template.width.toFloat())
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package me.madhead.imgmacrobot.core.generators
2+
3+
import dev.inmo.tgbotapi.types.ChatId
4+
import dev.inmo.tgbotapi.types.CommonUser
5+
import dev.inmo.tgbotapi.types.InlineQueries.abstracts.InlineQuery
6+
import dev.inmo.tgbotapi.types.InlineQueries.query.BaseInlineQuery
7+
import io.micrometer.core.instrument.simple.SimpleMeterRegistry
8+
import io.mockk.mockk
9+
import me.madhead.imgmacrobot.core.dao.CachedInlineQueryResultDAO
10+
import me.madhead.imgmacrobot.imgur.Imgur
11+
import org.jetbrains.skija.paragraph.FontCollection
12+
import org.junit.jupiter.api.Assertions
13+
import org.junit.jupiter.api.TestInstance
14+
import org.junit.jupiter.params.ParameterizedTest
15+
import org.junit.jupiter.params.provider.Arguments
16+
import org.junit.jupiter.params.provider.MethodSource
17+
import java.nio.file.Path
18+
import kotlin.io.path.ExperimentalPathApi
19+
20+
@ExperimentalPathApi
21+
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
22+
internal class TakeMyMoneyTest {
23+
private val templatesDir = mockk<Path>()
24+
private val imgur = mockk<Imgur>()
25+
private val fontCollection = mockk<FontCollection>()
26+
private val cachedInlineQueryResultDAO = mockk<CachedInlineQueryResultDAO>()
27+
private val registry = SimpleMeterRegistry()
28+
private val sut = TakeMyMoney(templatesDir, imgur, fontCollection, cachedInlineQueryResultDAO, registry)
29+
30+
@ParameterizedTest
31+
@MethodSource("parseInlineQueryParams")
32+
fun parseInlineQuery(inlineQuery: InlineQuery, parsedInlineQuery: TakeMyMoneyParsedInlineQuery?) {
33+
val actual = sut.parseInlineQuery(inlineQuery)
34+
35+
Assertions.assertEquals(parsedInlineQuery, actual)
36+
}
37+
38+
@Suppress("unused")
39+
private fun parseInlineQueryParams(): List<Arguments> {
40+
val user = CommonUser(
41+
id = ChatId(0),
42+
firstName = "user"
43+
)
44+
45+
return listOf(
46+
Arguments.of(
47+
BaseInlineQuery(id = "", from = user, query = "take my money: shut up and, take my money", offset = ""),
48+
TakeMyMoneyParsedInlineQuery("shut up and", "take my money")
49+
),
50+
Arguments.of(
51+
BaseInlineQuery(id = "", from = user, query = "take my money: I'm paying, double price", offset = ""),
52+
TakeMyMoneyParsedInlineQuery("I'm paying", "double price")
53+
),
54+
Arguments.of(
55+
BaseInlineQuery(id = "", from = user, query = "shut up and take my money", offset = ""),
56+
TakeMyMoneyParsedInlineQuery("shut up and", "take my money")
57+
),
58+
Arguments.of(
59+
BaseInlineQuery(id = "", from = user, query = "shut up take my money", offset = ""),
60+
TakeMyMoneyParsedInlineQuery("shut up", "take my money")
61+
),
62+
Arguments.of(
63+
BaseInlineQuery(id = "", from = user, query = "shut up and , \t take my papers", offset = ""),
64+
TakeMyMoneyParsedInlineQuery("shut up and", "take my papers")
65+
),
66+
Arguments.of(
67+
BaseInlineQuery(id = "", from = user, query = "Молодой человек, мы, русские, не обманываем друг друга!", offset = ""),
68+
null
69+
),
70+
)
71+
}
72+
}

0 commit comments

Comments
 (0)