Spaces:
Sleeping
Sleeping
Download main.py from jmax98/DooVoo-Reward-API: direct link, hf CLI and curl.
- Browser
- Download file 4.61 kB
-
https://huggingface.co/spaces/jmax98/DooVoo-Reward-API/resolve/main/main.py
- Command line
-
hf download hf://spaces/jmax98/DooVoo-Reward-API/main.py
-
curl -L -o main.py https://huggingface.co/spaces/jmax98/DooVoo-Reward-API/resolve/main/main.py
4.61 kB
| import asyncio | |
| import sqlite3 | |
| import uvicorn | |
| from fastapi import FastAPI | |
| from aiogram import Bot, Dispatcher, types, F | |
| from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton, WebAppInfo | |
| from datetime import datetime | |
| app = FastAPI() | |
| # --- 1. إعدادات المربع الذهبي (The Golden Square Config) --- | |
| BOTS_CONFIG = [ | |
| {"name": "DooVoo 1", "token": "8628327909:AAETtkAFrUYUMwBhpv3BWsTWH09-fErd8WM", "block_id": "26019"}, | |
| {"name": "DooVoo 2", "token": "8560559090:AAE_3s0huP67ciyYFtZj8DZfXrrYNXpp89Q", "block_id": "26019"}, | |
| {"name": "DooVoo 3", "token": "8645395608:AAHqU7rNc4WhGDixx8ueL9bdylLw6u57vpg", "block_id": "26019"}, | |
| {"name": "DooVoo 4", "token": "8675940898:AAH_6LtNk1ZABExeV7XxXl4xM2DLFxA4Tcc", "block_id": "26019"} | |
| ] | |
| # --- 2. قاعدة البيانات المركزية (Unified Database) --- | |
| def init_db(): | |
| conn = sqlite3.connect('doovoo_network.db') | |
| c = conn.cursor() | |
| c.execute('''CREATE TABLE IF NOT EXISTS users | |
| (user_id TEXT PRIMARY KEY, username TEXT, ad_views INTEGER DEFAULT 0, joined_at TEXT)''') | |
| conn.commit() | |
| conn.close() | |
| init_db() | |
| # --- 3. وظيفة تشغيل البوتات (Bot Engine) --- | |
| async def start_single_bot(config): | |
| bot = Bot(token=config['token']) | |
| dp = Dispatcher() | |
| # أ) الأمر /start | |
| async def handle_start(message: types.Message): | |
| user_id = str(message.from_user.id) | |
| username = message.from_user.username or "User" | |
| conn = sqlite3.connect('doovoo_network.db') | |
| c = conn.cursor() | |
| c.execute("INSERT OR IGNORE INTO users (user_id, username, joined_at) VALUES (?, ?, ?)", | |
| (user_id, username, datetime.now().strftime("%Y-%m-%d %H:%M:%S"))) | |
| conn.commit() | |
| conn.close() | |
| url = f"https://render.adsgram.ai/show?blockId={config['block_id']}&userId={user_id}" | |
| kb = InlineKeyboardMarkup(inline_keyboard=[ | |
| [InlineKeyboardButton(text="💰 Watch Ad & Earn", web_app=WebAppInfo(url=url))], | |
| [InlineKeyboardButton(text="📊 My Stats", callback_data="check_stats")] | |
| ]) | |
| await message.answer( | |
| f"🚀 مرحباً بك في {config['name']}!\n\n" | |
| f"كليكي على الزر باش تتفرج وتربح. " | |
| f"نقاطك غتبان هنا بمجرد ما تبدا المشاهدة!", | |
| reply_markup=kb | |
| ) | |
| # ب) معالجة زر "My Stats" (اللي قلتي ماخداماش) | |
| async def process_stats(callback_query: types.CallbackQuery): | |
| user_id = str(callback_query.from_user.id) | |
| conn = sqlite3.connect('doovoo_network.db') | |
| c = conn.cursor() | |
| c.execute("SELECT ad_views FROM users WHERE user_id = ?", (user_id,)) | |
| result = c.fetchone() | |
| conn.close() | |
| views = result[0] if result else 0 | |
| await callback_query.answer() # تحييد حالة الانتظار في التليغرام | |
| await callback_query.message.answer( | |
| f"📊 إحصائياتك في DooVoo Network:\n\n" | |
| f"📺 عدد المشاهدات: {views}\n" | |
| f"⏳ حالة الحساب: في انتظار تفعيل الإعلانات..." | |
| ) | |
| print(f"✅ Bot {config['name']} is LIVE!") | |
| try: | |
| await dp.start_polling(bot) | |
| except Exception as e: | |
| print(f"❌ Error in {config['name']}: {e}") | |
| # --- 4. الـ Reward API (الرابط اللي كيعلمنا أن الإعلان تشاف) --- | |
| async def reward_user(userId: str): | |
| conn = sqlite3.connect('doovoo_network.db') | |
| c = conn.cursor() | |
| c.execute("UPDATE users SET ad_views = ad_views + 1 WHERE user_id = ?", (userId,)) | |
| conn.commit() | |
| conn.close() | |
| return {"status": "success", "msg": "Reward added!"} | |
| # --- 5. لوحة التحكم المركزية (Admin Dashboard) --- | |
| async def get_network_stats(): | |
| conn = sqlite3.connect('doovoo_network.db') | |
| c = conn.cursor() | |
| c.execute("SELECT COUNT(*), SUM(ad_views) FROM users") | |
| total_users, total_views = c.fetchone() | |
| conn.close() | |
| return { | |
| "active_bots": len(BOTS_CONFIG), | |
| "total_users": total_users, | |
| "total_views": total_views or 0 | |
| } | |
| async def on_startup(): | |
| for config in BOTS_CONFIG: | |
| asyncio.create_task(start_single_bot(config)) | |
| if __name__ == "__main__": | |
| uvicorn.run(app, host="0.0.0.0", port=7860) |