File size: 4,285 Bytes
e581a8c
1404692
2c41c5f
 
 
 
 
 
 
 
07f63a8
2c41c5f
f3bcf70
1404692
 
e581a8c
07f63a8
1404692
 
2c41c5f
07f63a8
f3bcf70
 
da0d638
 
 
2c41c5f
da0d638
2c41c5f
 
da0d638
 
 
 
 
 
 
 
 
e581a8c
 
2c41c5f
da0d638
 
2c41c5f
 
 
 
e581a8c
da0d638
 
 
e581a8c
 
da0d638
e581a8c
 
 
2c41c5f
 
 
 
 
da0d638
 
 
 
 
 
 
 
2c41c5f
 
da0d638
 
 
2c41c5f
e581a8c
1404692
da0d638
e581a8c
 
 
 
1404692
 
 
 
 
 
2c41c5f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
from datetime import datetime

from pyrogram import Client, enums, filters
from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, Message

from Backend import db
from Backend.config import Telegram
from Backend.helper.settings_manager import SettingsManager
from Backend.logger import LOGGER


#----- /start: hand out the Stremio addon link, gated by subscription state
@Client.on_message(filters.command('start') & filters.private, group=10)
async def send_start_message(client: Client, message: Message):
    try:
        user_id = (message.from_user.id if message.from_user else None) or (message.sender_chat.id if message.sender_chat else None) or message.chat.id
        base_url = SettingsManager.current().base_url
        addon_url = f"{base_url}/stremio/manifest.json"

        #----- No subscription mode: owner-only, single personal token
        if not SettingsManager.current().subscription:
            if user_id != Telegram.OWNER_ID:
                return
            user_name = (message.from_user.first_name or message.from_user.username or f"User {user_id}") if message.from_user else f"Chat {user_id}"
            try:
                token_doc = await db.add_api_token(name=user_name, user_id=user_id)
                addon_url = f"{base_url}/stremio/{token_doc.get('token')}/manifest.json"
            except Exception as e:
                LOGGER.error(f"Error ensuring token for free user: {e}")

            await message.reply_text(
                'πŸŽ‰ <b>Welcome to the Telegram Stremio Media Server!</b>\n\n'
                'Here is your personal Stremio Addon link:\n\n'
                '🎬 <b>Stremio Addon β€” Install Link:</b>\n'
                f'<code>{addon_url}</code>\n\n'
                'Tap the link above β†’ <b>Install</b> in Stremio to start watching!',
                quote=True,
                parse_mode=enums.ParseMode.HTML
            )
            return

        #----- Subscription mode: verify active subscription, else offer plans
        user = await db.get_user(user_id)
        now = datetime.utcnow()

        is_active = db.is_subscription_active(user, now)
        if not is_active and user and user.get("subscription_status") == "active":
            await db.mark_user_expired(user_id)

        if not is_active:
            plans = await db.get_subscription_plans()
            if not plans:
                return await message.reply_text(
                    '<b>Welcome to the Telegram Stremio Private Group!</b>\n\n'
                    'Currently, no subscription plans are set up. Please contact the administrator.',
                    quote=True,
                    parse_mode=enums.ParseMode.HTML
                )

            keyboard = InlineKeyboardMarkup([
                [InlineKeyboardButton(f"{plan['days']} Days - β‚Ή{plan['price']}", callback_data=f"plan_{plan['_id']}")]
                for plan in plans
            ])
            return await message.reply_text(
                '<b>Welcome to the Telegram Stremio Private Group!</b>\n\n'
                'Access to this bot and the Stremio Addon requires an active subscription.\n'
                'Please select a subscription plan below to continue:',
                reply_markup=keyboard,
                quote=True,
                parse_mode=enums.ParseMode.HTML
            )

        #----- Active subscriber: return their existing token link
        all_tokens = await db.get_all_api_tokens()
        token_doc = next((t for t in all_tokens if t.get("user_id") == user_id), None)
        if token_doc and "token" in token_doc:
            addon_url = f"{base_url}/stremio/{token_doc['token']}/manifest.json"

        await message.reply_text(
            'πŸŽ‰ <b>Welcome back to the Telegram Stremio Subscription Manager!</b>\n\n'
            'Your subscription is active. Here is your personal addon link:\n\n'
            '🎬 <b>Stremio Addon β€” Install Link:</b>\n'
            f'<code>{addon_url}</code>\n\n'
            'Tap the link above β†’ <b>Install</b> in Stremio to start watching!',
            quote=True,
            parse_mode=enums.ParseMode.HTML
        )

    except Exception as e:
        await message.reply_text(f"⚠️ Error: {e}")
        LOGGER.error(f"Error in /start handler: {e}")