from aiogram import Router from aiogram.types import CallbackQuery from bot.api.asf import get_all_bots from bot.filters import AdminCallbackFilter from bot.services.bots import is_idle_enabled, update_idle_game from bot.services.twofa import stop_twofa_task from bot.ui.formatters import format_bot_ui, get_farm_summary from bot.ui.keyboards import bot_details_keyboard, bots_keyboard, games_keyboard router = Router() @router.callback_query(lambda c: c.data == "bot_loading", AdminCallbackFilter()) async def bot_loading_handler(callback: CallbackQuery) -> None: await callback.answer( "Аккаунт ещё загружается. Попробуйте через несколько секунд.", show_alert=True, ) @router.callback_query(lambda c: c.data == "bots", AdminCallbackFilter()) async def bots_handler(callback: CallbackQuery) -> None: await stop_twofa_task(callback.message.message_id) # type: ignore[union-attr] await callback.answer() try: response = get_all_bots() if response.status_code != 200: await callback.message.edit_text("Ошибка API") # type: ignore[union-attr] return data = response.json() if not data.get("Success"): await callback.message.edit_text("ASF вернул ошибку") # type: ignore[union-attr] return bots = data.get("Result", {}) text = f"🤖 Ботов всего: {len(bots)}\n\n{get_farm_summary(bots)}" await callback.message.edit_text(text, reply_markup=bots_keyboard(bots)) # type: ignore[union-attr] except Exception as error: await callback.message.edit_text(f"Ошибка: {error}") # type: ignore[union-attr] @router.callback_query( lambda c: c.data and c.data.startswith("bot_"), AdminCallbackFilter() ) async def bot_selected(callback: CallbackQuery) -> None: await stop_twofa_task(callback.message.message_id) # type: ignore[union-attr] await callback.answer() if not callback.data: return bot_name = callback.data.replace("bot_", "") try: data = get_all_bots().json() bots = data.get("Result", {}) bot = bots.get(bot_name) if not bot or not bot.get("BotName") or not bot.get("SteamID"): await callback.answer( "Аккаунт ещё загружается. Попробуйте через несколько секунд.", show_alert=True, ) return await callback.message.edit_text( # type: ignore[union-attr] format_bot_ui(bot), disable_web_page_preview=True, reply_markup=bot_details_keyboard( bot_name, bool(bot.get("HasMobileAuthenticator")) ), ) except Exception as error: await callback.message.edit_text(f"Ошибка: {error}") # type: ignore[union-attr] @router.callback_query( lambda c: c.data and c.data.startswith("games_"), AdminCallbackFilter() ) async def games(callback: CallbackQuery) -> None: await callback.answer() if not callback.data: return bot_name = callback.data.replace("games_", "") idle_enabled = is_idle_enabled(bot_name, 730) await callback.message.edit_text( # type: ignore[union-attr] "⌚ Выберите игру для накрутки часов", reply_markup=games_keyboard(bot_name, idle_enabled), ) @router.callback_query( lambda c: c.data and c.data.startswith("farm|"), AdminCallbackFilter() ) async def farm_game(callback: CallbackQuery) -> None: await callback.answer() if not callback.data: return _, bot_name, app_id_value = callback.data.split("|") success, text, enabled = await update_idle_game(bot_name, int(app_id_value)) if not success: await callback.answer(text, show_alert=True) return await callback.answer(text, show_alert=True) try: await callback.message.edit_reply_markup( # type: ignore[union-attr] reply_markup=games_keyboard(bot_name, enabled) ) except Exception: pass