feat: prompt users to start Telegram bot for notifications
This commit is contained in:
@@ -408,6 +408,27 @@ async def merge_users(
|
||||
target.channel_subscription_checked_at = source.channel_subscription_checked_at
|
||||
if not target.channel_subscription_verified_for and source.channel_subscription_verified_for:
|
||||
target.channel_subscription_verified_for = source.channel_subscription_verified_for
|
||||
source_tg_status = str(getattr(source, "telegram_notifications_status", None) or "unknown")
|
||||
target_tg_status = str(getattr(target, "telegram_notifications_status", None) or "unknown")
|
||||
if source_tg_status == "enabled" and target_tg_status != "enabled":
|
||||
target.telegram_notifications_status = source_tg_status
|
||||
elif target_tg_status == "unknown" and source_tg_status != "unknown":
|
||||
target.telegram_notifications_status = source_tg_status
|
||||
if getattr(source, "telegram_notifications_checked_at", None) and (
|
||||
not getattr(target, "telegram_notifications_checked_at", None)
|
||||
or source.telegram_notifications_checked_at > target.telegram_notifications_checked_at
|
||||
):
|
||||
target.telegram_notifications_checked_at = source.telegram_notifications_checked_at
|
||||
if getattr(source, "telegram_notifications_enabled_at", None) and (
|
||||
not getattr(target, "telegram_notifications_enabled_at", None)
|
||||
or source.telegram_notifications_enabled_at > target.telegram_notifications_enabled_at
|
||||
):
|
||||
target.telegram_notifications_enabled_at = source.telegram_notifications_enabled_at
|
||||
if getattr(source, "telegram_notifications_blocked_at", None) and (
|
||||
not getattr(target, "telegram_notifications_blocked_at", None)
|
||||
or source.telegram_notifications_blocked_at > target.telegram_notifications_blocked_at
|
||||
):
|
||||
target.telegram_notifications_blocked_at = source.telegram_notifications_blocked_at
|
||||
if source.lifetime_used_traffic_bytes is not None:
|
||||
target.lifetime_used_traffic_bytes = (
|
||||
target.lifetime_used_traffic_bytes or 0
|
||||
|
||||
@@ -1047,6 +1047,20 @@ def _migration_0031_add_subscription_notifications(connection: Connection) -> No
|
||||
)
|
||||
|
||||
|
||||
def _migration_0032_add_telegram_notification_status(connection: Connection) -> None:
|
||||
inspector = inspect(connection)
|
||||
columns: Set[str] = {col["name"] for col in inspector.get_columns("users")}
|
||||
additions = {
|
||||
"telegram_notifications_status": "VARCHAR(32) NOT NULL DEFAULT 'unknown'",
|
||||
"telegram_notifications_checked_at": "TIMESTAMPTZ",
|
||||
"telegram_notifications_enabled_at": "TIMESTAMPTZ",
|
||||
"telegram_notifications_blocked_at": "TIMESTAMPTZ",
|
||||
}
|
||||
for column, ddl_type in additions.items():
|
||||
if column not in columns:
|
||||
connection.execute(text(f"ALTER TABLE users ADD COLUMN {column} {ddl_type}"))
|
||||
|
||||
|
||||
MIGRATIONS: List[Migration] = [
|
||||
Migration(
|
||||
id="0001_add_channel_subscription_fields",
|
||||
@@ -1214,6 +1228,11 @@ MIGRATIONS: List[Migration] = [
|
||||
description="Track sent subscription notification stages",
|
||||
upgrade=_migration_0031_add_subscription_notifications,
|
||||
),
|
||||
Migration(
|
||||
id="0032_add_telegram_notification_status",
|
||||
description="Track whether the bot can message Telegram-linked users",
|
||||
upgrade=_migration_0032_add_telegram_notification_status,
|
||||
),
|
||||
]
|
||||
|
||||
|
||||
|
||||
@@ -33,6 +33,10 @@ class User(Base):
|
||||
password_set_at = Column(DateTime(timezone=True), nullable=True)
|
||||
telegram_id = Column(BigInteger, nullable=True, unique=True, index=True)
|
||||
telegram_photo_url = Column(Text, nullable=True)
|
||||
telegram_notifications_status = Column(String(32), nullable=False, default="unknown")
|
||||
telegram_notifications_checked_at = Column(DateTime(timezone=True), nullable=True)
|
||||
telegram_notifications_enabled_at = Column(DateTime(timezone=True), nullable=True)
|
||||
telegram_notifications_blocked_at = Column(DateTime(timezone=True), nullable=True)
|
||||
first_name = Column(String, nullable=True)
|
||||
last_name = Column(String, nullable=True)
|
||||
language_code = Column(String, default="ru")
|
||||
|
||||
Reference in New Issue
Block a user