forked from FOSS/ASF-Control-Bot
feat(bot): add async DB and FSM state handling
This commit is contained in:
+47
-16
@@ -1,10 +1,13 @@
|
||||
import random
|
||||
import asyncio
|
||||
|
||||
from aiogram import Router
|
||||
from aiogram.types import CallbackQuery
|
||||
|
||||
from bot.api.asf import get_all_bots
|
||||
from bot.filters import AdminCallbackFilter
|
||||
from bot.logging_utils import describe_user, get_logger
|
||||
from bot.services.bots import is_idle_enabled, update_idle_game
|
||||
from bot.services.bots import is_bot_reloading, 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
|
||||
@@ -31,7 +34,8 @@ async def bots_handler(callback: CallbackQuery) -> None:
|
||||
"Пользователь %s открыл список ботов",
|
||||
describe_user(callback.from_user),
|
||||
)
|
||||
await stop_twofa_task(callback.message.message_id) # type: ignore[union-attr]
|
||||
await stop_twofa_task(callback.message.message_id)
|
||||
|
||||
await callback.answer()
|
||||
try:
|
||||
response = get_all_bots()
|
||||
@@ -41,16 +45,18 @@ async def bots_handler(callback: CallbackQuery) -> None:
|
||||
describe_user(callback.from_user),
|
||||
response.status_code,
|
||||
)
|
||||
await callback.message.edit_text("Ошибка API") # type: ignore[union-attr]
|
||||
await callback.message.edit_text("Ошибка API")
|
||||
return
|
||||
|
||||
data = response.json()
|
||||
if not data.get("Success"):
|
||||
logger.warning(
|
||||
"ASF вернул неуспешный ответ при загрузке списка ботов для %s",
|
||||
describe_user(callback.from_user),
|
||||
)
|
||||
await callback.message.edit_text("ASF вернул ошибку") # type: ignore[union-attr]
|
||||
await callback.message.edit_text("ASF вернул ошибку")
|
||||
return
|
||||
|
||||
bots = data.get("Result", {})
|
||||
logger.info(
|
||||
"Список ботов для %s загружен: %s бот(ов)",
|
||||
@@ -58,33 +64,50 @@ async def bots_handler(callback: CallbackQuery) -> None:
|
||||
len(bots),
|
||||
)
|
||||
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]
|
||||
|
||||
await callback.message.edit_text(text, reply_markup=bots_keyboard(bots))
|
||||
|
||||
except Exception as error:
|
||||
logger.exception(
|
||||
"Ошибка при открытии списка ботов для %s",
|
||||
describe_user(callback.from_user),
|
||||
)
|
||||
await callback.message.edit_text(f"Ошибка: {error}") # type: ignore[union-attr]
|
||||
|
||||
await callback.message.edit_text(f"Ошибка: {error}")
|
||||
|
||||
|
||||
@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()
|
||||
await stop_twofa_task(callback.message.message_id)
|
||||
|
||||
if not callback.data:
|
||||
logger.debug(
|
||||
"Колбэк выбора бота пришел без data от %s",
|
||||
describe_user(callback.from_user),
|
||||
)
|
||||
await callback.answer()
|
||||
return
|
||||
|
||||
bot_name = callback.data.replace("bot_", "")
|
||||
logger.info(
|
||||
"Пользователь %s выбрал бота %s",
|
||||
describe_user(callback.from_user),
|
||||
bot_name,
|
||||
)
|
||||
if is_bot_reloading(bot_name):
|
||||
logger.info(
|
||||
"Бот %s перезагружается, карточка временно не отображается для %s",
|
||||
bot_name,
|
||||
describe_user(callback.from_user),
|
||||
)
|
||||
await callback.answer(
|
||||
"Аккаунт перезагружается. Попробуйте через несколько секунд.",
|
||||
show_alert=True,
|
||||
)
|
||||
return
|
||||
|
||||
try:
|
||||
data = get_all_bots().json()
|
||||
bots = data.get("Result", {})
|
||||
@@ -105,20 +128,22 @@ async def bot_selected(callback: CallbackQuery) -> None:
|
||||
bot_name,
|
||||
describe_user(callback.from_user),
|
||||
)
|
||||
await callback.message.edit_text( # type: ignore[union-attr]
|
||||
await callback.answer()
|
||||
await callback.message.edit_text(
|
||||
format_bot_ui(bot),
|
||||
disable_web_page_preview=True,
|
||||
reply_markup=bot_details_keyboard(
|
||||
bot_name, bool(bot.get("HasMobileAuthenticator"))
|
||||
),
|
||||
)
|
||||
|
||||
except Exception as error:
|
||||
logger.exception(
|
||||
"Ошибка при открытии карточки бота %s для %s",
|
||||
bot_name,
|
||||
describe_user(callback.from_user),
|
||||
)
|
||||
await callback.message.edit_text(f"Ошибка: {error}") # type: ignore[union-attr]
|
||||
await callback.message.edit_text(f"Ошибка: {error}")
|
||||
|
||||
|
||||
@router.callback_query(
|
||||
@@ -132,6 +157,7 @@ async def games(callback: CallbackQuery) -> None:
|
||||
describe_user(callback.from_user),
|
||||
)
|
||||
return
|
||||
|
||||
bot_name = callback.data.replace("games_", "")
|
||||
idle_enabled = is_idle_enabled(bot_name, 730)
|
||||
logger.info(
|
||||
@@ -140,7 +166,8 @@ async def games(callback: CallbackQuery) -> None:
|
||||
bot_name,
|
||||
idle_enabled,
|
||||
)
|
||||
await callback.message.edit_text( # type: ignore[union-attr]
|
||||
|
||||
await callback.message.edit_text(
|
||||
"⌚ Выберите игру для накрутки часов",
|
||||
reply_markup=games_keyboard(bot_name, idle_enabled),
|
||||
)
|
||||
@@ -157,6 +184,7 @@ async def farm_game(callback: CallbackQuery) -> None:
|
||||
describe_user(callback.from_user),
|
||||
)
|
||||
return
|
||||
|
||||
_, bot_name, app_id_value = callback.data.split("|")
|
||||
logger.info(
|
||||
"Пользователь %s меняет игру для накрутки на боте %s: app_id=%s",
|
||||
@@ -164,6 +192,7 @@ async def farm_game(callback: CallbackQuery) -> None:
|
||||
bot_name,
|
||||
app_id_value,
|
||||
)
|
||||
|
||||
success, text, enabled = await update_idle_game(bot_name, int(app_id_value))
|
||||
if not success:
|
||||
logger.warning(
|
||||
@@ -174,20 +203,22 @@ async def farm_game(callback: CallbackQuery) -> None:
|
||||
)
|
||||
await callback.answer(text, show_alert=True)
|
||||
return
|
||||
|
||||
logger.info(
|
||||
"Игра для накрутки на боте %s обновлена для %s. CS2=%s",
|
||||
bot_name,
|
||||
describe_user(callback.from_user),
|
||||
enabled,
|
||||
)
|
||||
|
||||
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)
|
||||
await callback.message.edit_text(
|
||||
text=f"⌚ Выберите игру для накрутки часов",
|
||||
reply_markup=games_keyboard(bot_name, enabled),
|
||||
)
|
||||
|
||||
except Exception:
|
||||
logger.debug(
|
||||
"Не удалось обновить клавиатуру игр для бота %s",
|
||||
bot_name,
|
||||
exc_info=True,
|
||||
"Не удалось обновить клавиатуру игр для бота %s", bot_name, exc_info=True
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user