feat(bot): add async DB and FSM state handling

This commit is contained in:
2026-07-23 22:58:52 +05:00
parent b1c8f6d9f8
commit 87385228ea
28 changed files with 514 additions and 213 deletions
+13 -13
View File
@@ -1,8 +1,8 @@
import asyncio
import re
from bot.logging_utils import get_logger
from bot.api.asf import get_all_bots, redeem_key
from bot.logging_utils import get_logger, mask_key
KEY_PATTERN = r"[A-Z0-9]{5}(?:-[A-Z0-9]{5}){2}"
logger = get_logger(__name__)
@@ -52,7 +52,7 @@ async def redeem_single_bot_keys(bot_name: str, keys: list[str]) -> str:
logger.info(
"Попытка активации ключа для одного бота: bot=%s key=%s",
bot_name,
mask_key(key),
key,
)
success, result = await redeem_key(bot_name, key)
await asyncio.sleep(2)
@@ -62,16 +62,16 @@ async def redeem_single_bot_keys(bot_name: str, keys: list[str]) -> str:
logger.warning(
"Активация ключа завершилась ошибкой ASF/HTTP: bot=%s key=%s",
bot_name,
mask_key(key),
key,
)
results.append(f"{key}: ASF ERROR")
results.append(f"{key}: ошибка ASF")
continue
status = parse_redeem_result(result)
logger.info(
"Получен результат активации ключа: bot=%s key=%s status=%s",
bot_name,
mask_key(key),
key,
status,
)
@@ -80,7 +80,7 @@ async def redeem_single_bot_keys(bot_name: str, keys: list[str]) -> str:
results.append(f"{key}: активировано")
elif status == "rate_limited":
failed_count += 1
results.append(f"{key}: rate limit")
results.append(f"{key}: лимит запросов")
elif status == "already_owned":
failed_count += 1
results.append(f"⚠️ {key}: игра уже есть")
@@ -124,13 +124,13 @@ async def redeem_all_bots_keys(keys: list[str]) -> str:
for key in keys:
activated = False
key_report = []
logger.info("Начата обработка ключа по всем ботам: key=%s", mask_key(key))
logger.info("Начата обработка ключа по всем ботам: key=%s", key)
for bot_name in bots:
logger.info(
"Попытка активации ключа на боте: bot=%s key=%s",
bot_name,
mask_key(key),
key,
)
success, result = await redeem_key(bot_name, key)
await asyncio.sleep(2)
@@ -139,16 +139,16 @@ async def redeem_all_bots_keys(keys: list[str]) -> str:
logger.warning(
"Активация ключа завершилась ошибкой ASF/HTTP: bot=%s key=%s",
bot_name,
mask_key(key),
key,
)
key_report.append(f"{bot_name}: ASF ERROR")
key_report.append(f"{bot_name}: ошибка ASF")
continue
status = parse_redeem_result(result, bot_name)
logger.info(
"Получен результат активации ключа: bot=%s key=%s status=%s",
bot_name,
mask_key(key),
key,
status,
)
@@ -158,7 +158,7 @@ async def redeem_all_bots_keys(keys: list[str]) -> str:
activated = True
break
if status == "rate_limited":
key_report.append(f"{bot_name}: rate limit")
key_report.append(f"{bot_name}: лимит запросов")
continue
if status == "already_owned":
key_report.append(f"⚠️ {bot_name}: игра уже есть")
@@ -178,7 +178,7 @@ async def redeem_all_bots_keys(keys: list[str]) -> str:
failed_count += 1
logger.warning(
"Ключ не удалось активировать ни на одном боте: key=%s",
mask_key(key),
key,
)
results.append(f"\n🔑 {key}\n" + "\n".join(key_report))