refactor(logging): logging and rename token env

This commit is contained in:
2026-07-22 21:36:33 +05:00
parent e4de501472
commit 2fb37d1ee8
21 changed files with 741 additions and 54 deletions
+74 -1
View File
@@ -2,13 +2,17 @@ import asyncio
import re
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__)
def extract_keys(text: str) -> list[str]:
keys = re.findall(KEY_PATTERN, text.upper())
return list(dict.fromkeys(keys))
unique_keys = list(dict.fromkeys(keys))
logger.info("Из текста извлечены ключи: count=%s", len(unique_keys))
return unique_keys
def parse_redeem_result(result: str, bot_name: str | None = None) -> str:
@@ -18,6 +22,7 @@ def parse_redeem_result(result: str, bot_name: str | None = None) -> str:
if f"<{bot_name.lower()}>" in line.lower():
result_lower = line.lower()
break
if "ok/nodetail" in result_lower or "ok/" in result_lower:
return "success"
if "ratelimited" in result_lower:
@@ -34,17 +39,42 @@ def parse_redeem_result(result: str, bot_name: str | None = None) -> str:
async def redeem_single_bot_keys(bot_name: str, keys: list[str]) -> str:
logger.info(
"Начата активация ключей для одного бота: bot=%s count=%s",
bot_name,
len(keys),
)
success_count = 0
failed_count = 0
results = []
for key in keys:
logger.info(
"Попытка активации ключа для одного бота: bot=%s key=%s",
bot_name,
mask_key(key),
)
success, result = await redeem_key(bot_name, key)
await asyncio.sleep(2)
if not success or not result:
failed_count += 1
logger.warning(
"Активация ключа завершилась ошибкой ASF/HTTP: bot=%s key=%s",
bot_name,
mask_key(key),
)
results.append(f"{key}: ASF ERROR")
continue
status = parse_redeem_result(result)
logger.info(
"Получен результат активации ключа: bot=%s key=%s status=%s",
bot_name,
mask_key(key),
status,
)
if status == "success":
success_count += 1
results.append(f"{key}: активировано")
@@ -66,31 +96,62 @@ async def redeem_single_bot_keys(bot_name: str, keys: list[str]) -> str:
else:
failed_count += 1
results.append(f"{key}: неизвестный ответ")
text = (
f"Результат активации для <code>{bot_name}</code>\n\n"
f"✅ Успешно: {success_count}\n"
f"❌ Ошибок: {failed_count}\n\n" + "\n".join(results[:50])
)
logger.info(
"Завершена активация ключей для одного бота: bot=%s success=%s failed=%s",
bot_name,
success_count,
failed_count,
)
return text[:4000] + ("\n\n...обрезано" if len(text) > 4000 else "")
async def redeem_all_bots_keys(keys: list[str]) -> str:
logger.info("Начата активация ключей по всем ботам: count=%s", len(keys))
response = get_all_bots()
data = response.json()
bots = list(data.get("Result", {}).keys())
logger.info("Для массовой активации найдено ботов: count=%s", len(bots))
success_count = 0
failed_count = 0
results = []
for key in keys:
activated = False
key_report = []
logger.info("Начата обработка ключа по всем ботам: key=%s", mask_key(key))
for bot_name in bots:
logger.info(
"Попытка активации ключа на боте: bot=%s key=%s",
bot_name,
mask_key(key),
)
success, result = await redeem_key(bot_name, key)
await asyncio.sleep(2)
if not success or not result:
logger.warning(
"Активация ключа завершилась ошибкой ASF/HTTP: bot=%s key=%s",
bot_name,
mask_key(key),
)
key_report.append(f"{bot_name}: ASF ERROR")
continue
status = parse_redeem_result(result, bot_name)
logger.info(
"Получен результат активации ключа: bot=%s key=%s status=%s",
bot_name,
mask_key(key),
status,
)
if status == "success":
key_report.append(f"{bot_name}: активировано")
success_count += 1
@@ -112,12 +173,24 @@ async def redeem_all_bots_keys(keys: list[str]) -> str:
key_report.append(f"{bot_name}: неверный ключ")
break
key_report.append(f"{bot_name}: неизвестный ответ")
if not activated:
failed_count += 1
logger.warning(
"Ключ не удалось активировать ни на одном боте: key=%s",
mask_key(key),
)
results.append(f"\n🔑 {key}\n" + "\n".join(key_report))
text = (
"Результат активации\n\n"
f"✅ Успешно: {success_count}\n"
f"❌ Ошибок: {failed_count}\n\n" + "\n".join(results[:50])
)
logger.info(
"Завершена массовая активация ключей: success=%s failed=%s",
success_count,
failed_count,
)
return text[:4000] + ("\n\n...обрезано" if len(text) > 4000 else "")