forked from FOSS/ASF-Control-Bot
106 lines
4.1 KiB
Python
106 lines
4.1 KiB
Python
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"<b>🤖 Ботов всего:</b> {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
|