import os import asyncio from flask import Flask, render_template_string, request, redirect, url_for, flash, session from functools import wraps from supabase import create_client, Client from dotenv import load_dotenv import requests from datetime import datetime, timedelta, timezone import json from apscheduler.schedulers.background import BackgroundScheduler # Load environment variables load_dotenv() # Configuration TELEGRAM_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN") SUPABASE_URL = os.getenv("SUPABASE_URL") SUPABASE_KEY = os.getenv("SUPABASE_KEY") ADMIN_PASSWORD = os.getenv("ADMIN_PASSWORD", "1sampai8") TELEGRAM_API_BASE = os.getenv("TELEGRAM_API_BASE_URL", "https://api.telegram.org").rstrip('/') if TELEGRAM_API_BASE.endswith('/bot'): TELEGRAM_API_BASE = TELEGRAM_API_BASE[:-4] # Supabase Client supabase: Client = create_client(SUPABASE_URL, SUPABASE_KEY) app = Flask(__name__) app.secret_key = os.getenv("FLASK_SECRET_KEY", "your-secret-key-change-this") # Initialize Scheduler scheduler = BackgroundScheduler(timezone='UTC') # HTML Templates LOGIN_TEMPLATE = """
{{ error }}
{% endif %}Total Users
Active Users (7d)
Premium Users
Total Generations
Generations Today
{{ msg.target_type }} {{ msg.success_count }} sent, {{ msg.fail_count }} failed {% if msg.sent_message_ids %} ✓ Editable {% endif %}
No broadcast history yet.
{% endif %}{{ sched.message_content[:50] }}...
No scheduled messages.
{% endif %}| User | Chat ID | Tier | Generated | Last Active |
|---|---|---|---|---|
|
{{ user.first_name }}
{% if user.username %} @{{ user.username }}{% endif %} |
{{ user.chat_id }} | {{ user.tier }} | {{ user.total_images_generated }} | {{ user.last_active }} |