@@ -8,6 +8,7 @@ import by.jprof.telegram.bot.pins.dao.PinDAO
88import by.jprof.telegram.bot.pins.dto.Unpin
99import by.jprof.telegram.bot.pins.model.Pin
1010import by.jprof.telegram.bot.pins.model.PinDuration
11+ import by.jprof.telegram.bot.pins.model.PinRequest
1112import by.jprof.telegram.bot.pins.scheduler.UnpinScheduler
1213import by.jprof.telegram.bot.pins.utils.PinRequestFinder
1314import by.jprof.telegram.bot.pins.utils.beggar
@@ -16,13 +17,24 @@ import by.jprof.telegram.bot.pins.utils.negativeDuration
1617import by.jprof.telegram.bot.pins.utils.tooManyPinnedMessages
1718import by.jprof.telegram.bot.pins.utils.tooPositiveDuration
1819import by.jprof.telegram.bot.pins.utils.unrecognizedDuration
20+ import by.jprof.telegram.bot.shop.payload.PinsPayload
21+ import by.jprof.telegram.bot.shop.provider.ChatProviderTokens
1922import dev.inmo.tgbotapi.bot.RequestsExecutor
2023import dev.inmo.tgbotapi.extensions.api.chat.modify.pinChatMessage
24+ import dev.inmo.tgbotapi.extensions.api.send.payments.sendInvoice
2125import dev.inmo.tgbotapi.extensions.api.send.reply
2226import dev.inmo.tgbotapi.types.message.MarkdownV2
2327import dev.inmo.tgbotapi.types.update.abstracts.Update
2428import dev.inmo.tgbotapi.utils.PreviewFeature
2529import java.time.Duration
30+ import dev.inmo.tgbotapi.types.ParseMode.MarkdownV2
31+ import dev.inmo.tgbotapi.types.payments.LabeledPrice
32+ import dev.inmo.tgbotapi.types.update.abstracts.Update
33+ import dev.inmo.tgbotapi.utils.PreviewFeature
34+ import java.time.Duration
35+ import kotlin.random.Random
36+ import kotlinx.serialization.encodeToString
37+ import kotlinx.serialization.json.Json
2638import org.apache.logging.log4j.LogManager
2739
2840@PreviewFeature
@@ -31,6 +43,8 @@ class PinCommandUpdateProcessor(
3143 private val pinDAO : PinDAO ,
3244 private val unpinScheduler : UnpinScheduler ,
3345 private val bot : RequestsExecutor ,
46+ private val providerTokens : ChatProviderTokens ,
47+ private val json : Json ,
3448 private val pinRequestFinder : PinRequestFinder = PinRequestFinder .DEFAULT
3549) : UpdateProcessor {
3650 companion object {
@@ -47,6 +61,7 @@ class PinCommandUpdateProcessor(
4761
4862 if (pin.message == null ) {
4963 bot.reply(to = pin.request, text = help(pins), parseMode = MarkdownV2 )
64+ pinsShop(pin)
5065
5166 return
5267 }
@@ -71,6 +86,7 @@ class PinCommandUpdateProcessor(
7186
7287 if (pins < pin.price) {
7388 bot.reply(to = pin.request, text = beggar(pins, pin.price), parseMode = MarkdownV2 )
89+ pinsShop(pin)
7490
7591 return
7692 }
@@ -91,9 +107,36 @@ class PinCommandUpdateProcessor(
91107 userId = pin.user.id.chatId
92108 ttl = duration.duration.seconds
93109 })
110+ if (Random .nextInt(4 ) == 0 ) {
111+ pinsShop(pin)
112+ }
94113 } catch (e: Exception ) {
95114 logger.error(" Failed to pin a message" , e)
96115 }
97116 }
98117 }
118+
119+ private suspend fun pinsShop (pin : PinRequest ) {
120+ val chatProviderToken = providerTokens[pin.request.chat.id.chatId]
121+
122+ if (chatProviderToken != null ) {
123+ bot.sendInvoice(
124+ chatId = pin.request.chat.id,
125+ title = " 168 пинов" ,
126+ description = " Неделя закрепа" ,
127+ payload = json.encodeToString(PinsPayload (
128+ pins = 168 ,
129+ chat = pin.request.chat.id.chatId,
130+ )),
131+ providerToken = chatProviderToken,
132+ currency = " USD" ,
133+ prices = listOf (
134+ LabeledPrice (" Пины × 168" , 200 )
135+ ),
136+ startParameter = " forwarded_payment" ,
137+ replyToMessageId = pin.request.messageId,
138+ allowSendingWithoutReply = true ,
139+ )
140+ }
141+ }
99142}
0 commit comments