botikizavr / bot.py
Revezzo's picture
Update bot.py
5766607 verified
import asyncio
import logging
import os
from aiogram import Bot, Dispatcher, types, F
from aiogram.filters import Command
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton, CallbackQuery
from aiogram.client.session.aiohttp import AiohttpSession
from aiogram.client.telegram import TelegramAPIServer
from playwright.async_api import async_playwright
# --- КОНФИГУРАЦИЯ ---
BOT_TOKEN = "8591857705:AAFblmp75bZ7qqAwKze67sSNewt6RLXd0M0"
EMAIL = "smilerugm@gmail.com"
PASSWORD = "5dFtxSxQWvFg7_T"
PANEL_URL = "https://panel.cloudblaze.org/server/b06be851"
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
logger = logging.getLogger(__name__)
# Настройка сессии для обхода блокировок DNS
# Мы используем кастомный сервер, если основной недоступен
session = AiohttpSession()
bot = Bot(token=BOT_TOKEN, session=session)
dp = Dispatcher()
class SuperLightAutomator:
async def run_action(self, action_name: str):
async with async_playwright() as p:
browser = None
try:
logger.info(f"Запуск браузера для: {action_name}")
browser = await p.chromium.launch(
headless=True,
args=['--no-sandbox', '--disable-dev-shm-usage', '--single-process']
)
context = await browser.new_context(
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
)
page = await context.new_page()
# Блокировка тяжелого контента
await page.route("**/*", lambda route:
route.abort() if route.request.resource_type in ["image", "media", "font", "stylesheet"]
else route.continue_()
)
await page.goto(PANEL_URL, timeout=60000, wait_until="domcontentloaded")
if await page.query_selector('input[name="username"]'):
await page.fill('input[name="username"]', EMAIL)
await page.fill('input[name="password"]', PASSWORD)
await page.click('button[type="submit"]')
await page.wait_for_url(PANEL_URL, timeout=30000)
logger.info(f"Нажимаю кнопку: {action_name}")
button = page.get_by_role("button", name=action_name, exact=False)
await button.wait_for(state="visible", timeout=15000)
await button.click()
await asyncio.sleep(5)
return f"✅ Команда **{action_name}** отправлена!"
except Exception as e:
logger.error(f"Ошибка: {e}")
return f"❌ Ошибка: {str(e)[:100]}"
finally:
if browser:
await browser.close()
def main_kb():
return InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text="▶️ Запуск", callback_data="srv_Start"),
InlineKeyboardButton(text="🔄 Рестарт", callback_data="srv_Restart")],
[InlineKeyboardButton(text="🛑 Стоп", callback_data="srv_Stop")]
])
@dp.message(Command("start"))
async def cmd_start(message: types.Message):
await message.answer("🎮 **AzureHouse Control**", reply_markup=main_kb(), parse_mode="Markdown")
@dp.callback_query(F.data.startswith("srv_"))
async def handle_srv(callback: CallbackQuery):
action = callback.data.split("_")[1]
await callback.message.edit_text(f"⏳ Выполняю: **{action}**...", parse_mode="Markdown")
result = await SuperLightAutomator().run_action(action)
await callback.message.edit_text(f"{result}\n\nВыбери действие:", reply_markup=main_kb(), parse_mode="Markdown")
await callback.answer()
async def keep_alive():
while True:
await asyncio.sleep(1200)
logger.info("Keep-alive: бот активен")
async def main():
logger.info("Проверка связи с Telegram...")
try:
me = await bot.get_me()
logger.info(f"Связь установлена! Бот: @{me.username}")
except Exception as e:
logger.error(f"Не удалось подключиться к Telegram: {e}")
return
await asyncio.gather(dp.start_polling(bot), keep_alive())
if __name__ == "__main__":
asyncio.run(main())