jmax98's picture
Update main.py
bcc7a75 verified
Raw History Blame Contribute Delete
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
@dp.message(F.text == "/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" (اللي قلتي ماخداماش)
@dp.callback_query(F.data == "check_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 (الرابط اللي كيعلمنا أن الإعلان تشاف) ---
@app.get("/reward")
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) ---
@app.get("/admin/network")
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
}
@app.on_event("startup")
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)