@@ -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,20 @@ 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
27+ import dev.inmo.tgbotapi.types.payments.LabeledPrice
2328import dev.inmo.tgbotapi.types.update.abstracts.Update
2429import dev.inmo.tgbotapi.utils.PreviewFeature
2530import java.time.Duration
31+ import kotlin.random.Random
32+ import kotlinx.serialization.encodeToString
33+ import kotlinx.serialization.json.Json
2634import org.apache.logging.log4j.LogManager
2735
2836@PreviewFeature
@@ -31,6 +39,8 @@ class PinCommandUpdateProcessor(
3139 private val pinDAO : PinDAO ,
3240 private val unpinScheduler : UnpinScheduler ,
3341 private val bot : RequestsExecutor ,
42+ private val providerTokens : ChatProviderTokens ,
43+ private val json : Json ,
3444 private val pinRequestFinder : PinRequestFinder = PinRequestFinder .DEFAULT
3545) : UpdateProcessor {
3646 companion object {
@@ -47,6 +57,7 @@ class PinCommandUpdateProcessor(
4757
4858 if (pin.message == null ) {
4959 bot.reply(to = pin.request, text = help(pins), parseMode = MarkdownV2 )
60+ pinsShop(pin)
5061
5162 return
5263 }
@@ -71,6 +82,7 @@ class PinCommandUpdateProcessor(
7182
7283 if (pins < pin.price) {
7384 bot.reply(to = pin.request, text = beggar(pins, pin.price), parseMode = MarkdownV2 )
85+ pinsShop(pin)
7486
7587 return
7688 }
@@ -90,9 +102,36 @@ class PinCommandUpdateProcessor(
90102 chatId = pin.chat.id.chatId
91103 ttl = duration.duration.seconds
92104 })
105+ if (Random .nextInt(4 ) == 0 ) {
106+ pinsShop(pin)
107+ }
93108 } catch (e: Exception ) {
94109 logger.error(" Failed to pin a message" , e)
95110 }
96111 }
97112 }
113+
114+ private suspend fun pinsShop (pin : PinRequest ) {
115+ val chatProviderToken = providerTokens[pin.request.chat.id.chatId]
116+
117+ if (chatProviderToken != null ) {
118+ bot.sendInvoice(
119+ chatId = pin.request.chat.id,
120+ title = " 168 пинов" ,
121+ description = " Неделя закрепа" ,
122+ payload = json.encodeToString(PinsPayload (
123+ pins = 168 ,
124+ chat = pin.request.chat.id.chatId,
125+ )),
126+ providerToken = chatProviderToken,
127+ currency = " USD" ,
128+ prices = listOf (
129+ LabeledPrice (" Пины × 168" , 200 )
130+ ),
131+ startParameter = " forwarded_payment" ,
132+ replyToMessageId = pin.request.messageId,
133+ allowSendingWithoutReply = true ,
134+ )
135+ }
136+ }
98137}
0 commit comments