@@ -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,21 +17,30 @@ 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.ParseMode.MarkdownV2
27+ import dev.inmo.tgbotapi.types.payments.LabeledPrice
2328import dev.inmo.tgbotapi.types.update.abstracts.Update
2429import dev.inmo.tgbotapi.utils.PreviewFeature
25- import org.apache.logging.log4j.LogManager
2630import java.time.Duration
31+ import kotlin.random.Random
32+ import kotlinx.serialization.encodeToString
33+ import kotlinx.serialization.json.Json
34+ import org.apache.logging.log4j.LogManager
2735
2836@PreviewFeature
2937class PinCommandUpdateProcessor (
3038 private val moniesDAO : MoniesDAO ,
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 }
@@ -91,9 +103,36 @@ class PinCommandUpdateProcessor(
91103 userId = pin.user.id.chatId
92104 ttl = duration.duration.seconds
93105 })
106+ if (Random .nextInt(4 ) == 0 ) {
107+ pinsShop(pin)
108+ }
94109 } catch (e: Exception ) {
95110 logger.error(" Failed to pin a message" , e)
96111 }
97112 }
98113 }
114+
115+ private suspend fun pinsShop (pin : PinRequest ) {
116+ val chatProviderToken = providerTokens[pin.request.chat.id.chatId]
117+
118+ if (chatProviderToken != null ) {
119+ bot.sendInvoice(
120+ chatId = pin.request.chat.id,
121+ title = " 168 пинов" ,
122+ description = " Неделя закрепа" ,
123+ payload = json.encodeToString(PinsPayload (
124+ pins = 168 ,
125+ chat = pin.request.chat.id.chatId,
126+ )),
127+ providerToken = chatProviderToken,
128+ currency = " USD" ,
129+ prices = listOf (
130+ LabeledPrice (" Пины × 168" , 200 )
131+ ),
132+ startParameter = " forwarded_payment" ,
133+ replyToMessageId = pin.request.messageId,
134+ allowSendingWithoutReply = true ,
135+ )
136+ }
137+ }
99138}
0 commit comments