diff --git a/apps/bot/locales/ru.ftl b/apps/bot/locales/ru.ftl index 3196e4d..b4bd9cc 100644 --- a/apps/bot/locales/ru.ftl +++ b/apps/bot/locales/ru.ftl @@ -117,4 +117,5 @@ msg-subscribe-success = msg-subscribe-error = ❌ Произошла ошибка при обработке платежа -msg-subscribe-active-until = 📅 Ваша подписка активна до { $date } \ No newline at end of file +msg-subscription-active-until = 📅 Ваша подписка активна до { $date } +msg-subscription-active-days = 📅 Осталось еще { $days } дней вашей подписки \ No newline at end of file diff --git a/apps/bot/src/bot/conversations/subscription.ts b/apps/bot/src/bot/conversations/subscription.ts index 58fd19c..0b04d4b 100644 --- a/apps/bot/src/bot/conversations/subscription.ts +++ b/apps/bot/src/bot/conversations/subscription.ts @@ -18,7 +18,9 @@ export async function subscription(conversation: Conversation, const subscriptionsService = new SubscriptionsService({ telegramId }); - const hasUserTrial = await subscriptionsService.usedTrialSubscription(); + const { remainingDays, usedTrialSubscription } = await subscriptionsService.getSubscription({ + telegramId, + }); const { subscriptionPrices } = await subscriptionsService.getSubscriptionPrices({ filters: { @@ -26,7 +28,7 @@ export async function subscription(conversation: Conversation, eq: true, }, period: { - ne: hasUserTrial ? GQL.Enum_Subscriptionprice_Period.Trial : undefined, + ne: usedTrialSubscription ? GQL.Enum_Subscriptionprice_Period.Trial : undefined, }, }, }); @@ -40,7 +42,11 @@ export async function subscription(conversation: Conversation, const messageWithPrices = await ctx.reply( combine( await conversation.external(({ t }) => - combine(t('msg-subscribe'), fmt`${i}${t('msg-cancel-operation')}${i}`.text), + combine( + t('msg-subscribe'), + remainingDays ? t('msg-subscription-active-days', { days: remainingDays }) : '', + fmt`${i}${t('msg-cancel-operation')}${i}`.text, + ), ), ), { reply_markup: keyboard }, @@ -49,7 +55,7 @@ export async function subscription(conversation: Conversation, // ждём выбора const selectPlanWaitCtx = await conversation.wait(); - // удаляем сообщение с выбором (не обязательно, но красивее) + // удаляем сообщение с выбором try { await ctx.api.deleteMessage(telegramId, messageWithPrices.message_id); } catch { diff --git a/apps/bot/src/bot/features/subscription.ts b/apps/bot/src/bot/features/subscription.ts index 92f534a..2e5d4a1 100644 --- a/apps/bot/src/bot/features/subscription.ts +++ b/apps/bot/src/bot/features/subscription.ts @@ -32,7 +32,7 @@ feature.on(':successful_payment', logHandle('successful-payment'), async (ctx) = const { formattedDate } = await subscriptionsService.createOrUpdateSubscription(payload); await ctx.reply(ctx.t('msg-subscribe-success')); - await ctx.reply(ctx.t('msg-subscribe-active-until', { date: formattedDate })); + await ctx.reply(ctx.t('msg-subscription-active-until', { date: formattedDate })); } catch (error) { await ctx.reply(ctx.t('msg-subscribe-error')); logger.error( diff --git a/apps/bot/src/bot/index.ts b/apps/bot/src/bot/index.ts index f3448e6..087a329 100644 --- a/apps/bot/src/bot/index.ts +++ b/apps/bot/src/bot/index.ts @@ -9,7 +9,7 @@ import { setCommands } from './settings/commands'; import { setInfo } from './settings/info'; import { env } from '@/config/env'; import { getRedisInstance } from '@/utils/redis'; -import { autoChatAction } from '@grammyjs/auto-chat-action'; +import { autoChatAction, chatAction } from '@grammyjs/auto-chat-action'; import { createConversation, conversations as grammyConversations } from '@grammyjs/conversations'; import { hydrate } from '@grammyjs/hydrate'; import { limit } from '@grammyjs/ratelimiter'; @@ -38,13 +38,15 @@ export function createBot({ token }: Parameters_) { }), ); + bot.use(autoChatAction(bot.api)); + bot.use(grammyConversations()).command('cancel', async (ctx) => { await ctx.conversation.exitAll(); await ctx.reply(ctx.t('msg-cancel')); }); for (const conversation of Object.values(conversations)) { - bot.use(createConversation(conversation)); + bot.use(chatAction('typing'), createConversation(conversation)); } setInfo(bot); @@ -53,7 +55,6 @@ export function createBot({ token }: Parameters_) { const protectedBot = bot.errorBoundary(errorHandler); protectedBot.use(middlewares.updateLogger()); - protectedBot.use(autoChatAction(bot.api)); protectedBot.use(hydrate()); for (const feature of Object.values(features)) { diff --git a/apps/bot/src/utils/messages.ts b/apps/bot/src/utils/messages.ts index 35f578d..ec75f2b 100644 --- a/apps/bot/src/utils/messages.ts +++ b/apps/bot/src/utils/messages.ts @@ -1,3 +1,3 @@ -export function combine(...messages: string[]) { - return messages.join('\n\n'); +export function combine(...messages: Array) { + return messages.filter(Boolean).join('\n\n'); }