diff --git a/handlers/admin/bans/bans_handler.py b/handlers/admin/bans/bans_handler.py
index a4c4d7c7..055a0601 100644
--- a/handlers/admin/bans/bans_handler.py
+++ b/handlers/admin/bans/bans_handler.py
@@ -147,9 +147,11 @@ async def handle_delete_manual_banned(callback_query: CallbackQuery, session: As
@router.callback_query(AdminPanelCallback.filter(F.action == "bans_preemptive"), IsAdminFilter())
async def handle_preemptive_ban_start(callback: CallbackQuery, state: FSMContext):
await state.set_state(PreemptiveBanStates.waiting_for_preemptive_ids)
+
await callback.message.edit_text(
"📥 Отправьте список Telegram ID (один на строке), которых нужно заранее забанить (теневой бан).\n\n"
- "Пример:\n123456789\n987654321"
+ "Пример:\n123456789\n987654321",
+ reply_markup=build_admin_back_kb("bans")
)
diff --git a/handlers/payments/gift.cpython-312-x86_64-linux-gnu.so b/handlers/payments/gift.cpython-312-x86_64-linux-gnu.so
index 2e87eaaa..63fa01a0 100644
Binary files a/handlers/payments/gift.cpython-312-x86_64-linux-gnu.so and b/handlers/payments/gift.cpython-312-x86_64-linux-gnu.so differ
diff --git a/handlers/payments/robokassa_pay.py b/handlers/payments/robokassa_pay.py
index d337a3e2..7d90f284 100644
--- a/handlers/payments/robokassa_pay.py
+++ b/handlers/payments/robokassa_pay.py
@@ -11,6 +11,7 @@ from robokassa import HashAlgorithm, Robokassa
from sqlalchemy.ext.asyncio import AsyncSession
from datetime import datetime, timedelta
from sqlalchemy import select, and_
+from pytz import timezone
from config import (
ROBOKASSA_ENABLE,
@@ -38,6 +39,8 @@ from logger import logger
router = Router()
+MOSCOW_TZ = timezone("Europe/Moscow")
+
class ReplenishBalanceState(StatesGroup):
choosing_amount_robokassa = State()
waiting_for_payment_confirmation_robokassa = State()
@@ -213,7 +216,7 @@ async def robokassa_webhook(request: web.Request):
logger.info(f"Processing payment for user {tg_id} with amount {amount}.")
async with async_session_maker() as session:
- recent_time = datetime.utcnow() - timedelta(minutes=1)
+ recent_time = datetime.now(MOSCOW_TZ).replace(tzinfo=None) - timedelta(minutes=1)
result = await session.execute(
select(Payment).where(
diff --git a/handlers/payments/yookassa_pay.cpython-312-x86_64-linux-gnu.so b/handlers/payments/yookassa_pay.cpython-312-x86_64-linux-gnu.so
index c26b61fc..2d39744b 100644
Binary files a/handlers/payments/yookassa_pay.cpython-312-x86_64-linux-gnu.so and b/handlers/payments/yookassa_pay.cpython-312-x86_64-linux-gnu.so differ
diff --git a/handlers/start.py b/handlers/start.py
index e509accb..3166d77b 100644
--- a/handlers/start.py
+++ b/handlers/start.py
@@ -209,13 +209,12 @@ async def process_start_logic(
if "gift" in part:
gift_raw = part.split("gift")[1].strip("_")
- parts = gift_raw.split("_")
- if len(parts) < 2:
+
+ if not gift_raw:
await message.answer("❌ Неверный формат ссылки на подарок.")
return await process_callback_view_profile(message, state, admin, session)
- gift_id = parts[0]
- sender_id = parts[1]
+ gift_id = gift_raw
if gift_id in processing_gifts:
await message.answer("⏳ Подарок уже обрабатывается, подождите...")
@@ -224,7 +223,7 @@ async def process_start_logic(
processing_gifts.add(gift_id)
try:
- logger.info(f"[GIFT] Обнаружен подарок {gift_id} от {sender_id}")
+ logger.info(f"[GIFT] Обнаружен подарок {gift_id}")
await handle_gift_link(gift_id, message, state, session, user_data=user_data)
gift_detected = True
finally: