diff --git a/database/models.py b/database/models.py index 730fe1d8..60891fa2 100644 --- a/database/models.py +++ b/database/models.py @@ -130,15 +130,19 @@ class CouponUsage(DictLikeMixin, Base): class Referral(DictLikeMixin, Base): __tablename__ = "referrals" - referred_tg_id = Column(BigInteger, ForeignKey("users.tg_id"), primary_key=True) - referrer_tg_id = Column(BigInteger, ForeignKey("users.tg_id"), primary_key=True) + referred_tg_id = Column(BigInteger, ForeignKey("users.tg_id", ondelete="CASCADE"), primary_key=True) + referrer_tg_id = Column(BigInteger, ForeignKey("users.tg_id", ondelete="CASCADE"), primary_key=True) reward_issued = Column(Boolean, default=False) class Notification(DictLikeMixin, Base): __tablename__ = "notifications" - tg_id = Column(BigInteger, ForeignKey("users.tg_id"), primary_key=True) + tg_id = Column( + BigInteger, + ForeignKey("users.tg_id", ondelete="CASCADE"), + primary_key=True + ) notification_type = Column(String, primary_key=True) last_notification_time = Column(DateTime, default=datetime.utcnow) 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 d8c02e5a..0504539f 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/middlewares/subscription.py b/middlewares/subscription.py index 25317cdb..50fbdbf5 100644 --- a/middlewares/subscription.py +++ b/middlewares/subscription.py @@ -3,6 +3,7 @@ from typing import Any, Awaitable, Callable from aiogram import BaseMiddleware from aiogram.types import InlineKeyboardButton, Message, Update from aiogram.utils.keyboard import InlineKeyboardBuilder +from aiogram.fsm.context import FSMContext from bot import bot from config import CHANNEL_EXISTS, CHANNEL_ID, CHANNEL_REQUIRED, CHANNEL_URL @@ -41,6 +42,23 @@ class SubscriptionMiddleware(BaseMiddleware): member = await bot.get_chat_member(CHANNEL_ID, tg_id) if member.status not in ("member", "administrator", "creator"): logger.info(f"[SubMiddleware] Пользователь {tg_id} не подписан") + + state: FSMContext = data.get("state") + if state: + original_text = message.text or message.caption + user_data = { + "tg_id": message.from_user.id, + "username": message.from_user.username, + "first_name": message.from_user.first_name, + "last_name": message.from_user.last_name, + "language_code": message.from_user.language_code, + "is_bot": message.from_user.is_bot, + } + await state.update_data( + original_text=original_text, + user_data=user_data, + ) + return await self._ask_to_subscribe(message) except Exception as e: logger.warning(