""" اطلاعیه‌رسان — Bale Bot (نسخه رایگان) Broadcast to subscribed parents/students. Free limits: 100 subscribers, 5 broadcasts/day. بات‌بان | hi@botban.ir """ import os, sqlite3, logging, time from datetime import date import requests from dotenv import load_dotenv load_dotenv() log = logging.getLogger(__name__) TOKEN: str = os.getenv("BALE_BOT_TOKEN", "") ADMIN_ID: int = int(os.getenv("ADMIN_USER_ID", "0")) DB_PATH: str = "broadcast.db" API_BASE: str = f"https://tapi.bale.ai/bot{TOKEN}" MAX_SUBSCRIBERS: int = 100 MAX_DAILY_BROADCASTS: int = 5 KB_ADMIN = {"inline_keyboard": [ [{"text": "📊 آمار", "callback_data": "stats"}, {"text": "📜 تاریخچه", "callback_data": "history"}], [{"text": "⭐ نسخه حرفه‌ای", "callback_data": "upgrade"}], ]} def init_db() -> None: with sqlite3.connect(DB_PATH) as con: con.execute("CREATE TABLE IF NOT EXISTS subscribers (user_id INTEGER PRIMARY KEY, name TEXT, joined_at TEXT NOT NULL)") con.execute("CREATE TABLE IF NOT EXISTS broadcasts (id INTEGER PRIMARY KEY AUTOINCREMENT, message TEXT NOT NULL, sent_at TEXT NOT NULL, sent_count INTEGER NOT NULL DEFAULT 0)") con.commit() def add_subscriber(user_id: int, name: str) -> bool: with sqlite3.connect(DB_PATH) as con: if con.execute("SELECT 1 FROM subscribers WHERE user_id=?", (user_id,)).fetchone(): return False con.execute("INSERT INTO subscribers (user_id,name,joined_at) VALUES (?,?,?)", (user_id, name, str(date.today()))) con.commit() return True def handle_broadcast(chat_id: int, user_id: int, body: str) -> None: if user_id != ADMIN_ID: send(chat_id, "⛔ فقط مدیر می‌تواند اطلاعیه بفرستد.") return msg = body.strip() daily = daily_broadcast_count() if daily >= MAX_DAILY_BROADCASTS: send(chat_id, f"⛔ سقف روزانه ({MAX_DAILY_BROADCASTS}) پر شد. نسخه حرفه‌ای: hi@botban.ir") return subscribers = all_subscriber_ids() sent = 0 for uid in subscribers: if api("sendMessage", {"chat_id": uid, "text": f"📢 اطلاعیه:\n\n{msg}"}).get("ok"): sent += 1 time.sleep(0.05) # rate-limit friendly record_broadcast(msg, sent) send(chat_id, f"✅ اطلاعیه برای {sent} نفر ارسال شد.\n({MAX_DAILY_BROADCASTS - daily - 1} ارسال دیگر امروز)") # ... ادامه کد (تا ۱۳۳ خط دیگر) # نسخه کامل + مستندات + دیتابیس → hi@botban.ir