refactor(logging): add detailed debug logs

This commit is contained in:
2026-08-02 00:44:16 +05:00
parent a74e2eb328
commit 60d67b613a
4 changed files with 172 additions and 83 deletions
+59 -26
View File
@@ -1,6 +1,7 @@
import logging
from dataclasses import dataclass
from pathlib import Path
from phonenumbers import parse, geocoder
from typing import List, Optional
@@ -32,112 +33,144 @@ class Result:
class Checker:
def __init__(self, path: str):
def __init__(self, path: Path, temp_path: Path):
self.path = path
self.temp_path = temp_path
self.client = None
logger.info(f"Инициализация проверки для пути: {path}")
logger.debug(f"Создание экземпляра Checker для пути: {path}")
try:
self.desktop = TDATA(path=self.path)
self.desktop = TDATA(path=self.path, temp_path=self.temp_path)
logger.debug("TDATA успешно инициализирована")
except Exception as e:
logger.error(f"Ошибка инициализации TDATA: {e}")
self.desktop = None
async def __aenter__(self):
self.__ensure_client()
logger.debug("Вход в контекстный менеджер Checker")
await self.__ensure_client()
return self
async def __aexit__(self, exc_type, exc_val, exc_tb):
logger.debug("Выход из контекстного менеджера Checker")
if self.client:
logger.debug("Отключение клиента Telethon")
try:
await self.client.disconnect()
logger.debug("Telethon клиент отключен")
except Exception as e:
logger.error(f"Ошибка отключения клиента Telethon: {e}")
logger.warning(f"Ошибка при отключении клиента: {e}")
async def __ensure_client(self):
if self.client is None:
if self.desktop is None:
logger.error("Попытка инициализации клиента с неинициализированной TDATA")
raise Exception("TDATA не инициализирована")
logger.debug("Инициализация клиента Telethon из TDATA")
logger.debug("Конвертация TDATA в Telethon клиент")
self.client = await self.desktop.convert()
logger.debug("Telethon клиент успешно создан")
async def check_stars(self, me: User) -> int:
logger.debug("Запрос баланса звезд")
try:
stars_status = await self.client(GetStarsStatusRequest(peer=me))
return stars_status.balance.amount
stars = stars_status.balance.amount
logger.debug(f"Баланс звезд: {stars}")
return stars
except Exception as e:
logger.warning(f"Не удалось получить баланс звезд: {e}")
return 0
async def check_country(self, me: User) -> str:
logger.debug(f"Определение страны для номера +{me.phone}")
try:
phone_parse = parse(str(f"+{me.phone}"))
return geocoder.description_for_number(phone_parse, "en")
country = geocoder.description_for_number(phone_parse, "ru")
logger.debug(f"Страна определена: {country}")
return country
except Exception as e:
logger.warning(f"Не удалось определить страну: {e}")
return "N/A"
async def check_contacts(self) -> List[User]:
logger.debug("Запрос списка контактов")
try:
logger.debug("Получение контактов")
result = await self.client(GetContactsRequest(hash=0))
return result.users
contacts = result.users
logger.debug(f"Получено контактов: {len(contacts)}")
return contacts
except Exception as e:
logger.warning(f"Не удалось получить контакты: {e}")
return []
async def check_chats(self) -> List[Chat]:
logger.debug("Запрос всех диалогов")
try:
logger.debug("Получение всех диалогов")
chats = []
async for dialog in self.client.iter_dialogs():
chats.append(dialog.entity)
logger.debug(f"Получено диалогов: {len(chats)}")
return chats
except Exception as e:
logger.warning(f"Не удалось получить чаты: {e}")
return []
async def check_channels(self, chats: List[Chat]) -> List[Channel]:
logger.debug(f"Фильтрация каналов из {len(chats)} чатов")
try:
channels = [chat for chat in chats if isinstance(chat, Channel)]
logger.debug(f"Найдено каналов: {len(channels)}")
return channels
except Exception as e:
logger.warning(f"Не удалось отфильтровать каналы: {e}")
return []
async def check_admin_channels(self, channels: List[Channel]) -> List[Channel]:
logger.debug("Проверка прав администратора в каналах")
try:
logger.debug("Проверка прав администратора")
admin_channels = []
checked = 0
for channel in channels:
permissions = await self.client.get_permissions(channel, "me")
if permissions.is_admin or permissions.is_creator:
admin_channels.append(channel)
checked += 1
try:
permissions = await self.client.get_permissions(channel, "me")
if permissions.is_admin or permissions.is_creator:
admin_channels.append(channel)
logger.debug(f"Найден админ канал: {channel.title}")
except Exception as e:
logger.debug(f"Не удалось проверить права для канала: {e}")
logger.debug(f"Проверено каналов: {checked}, найдено админских: {len(admin_channels)}")
return admin_channels
except Exception as e:
logger.warning(f"Не удалось проверить админские права: {e}")
return []
async def check_all(self) -> Result:
logger.debug("Начало полной проверки аккаунта")
try:
me = await self.client.get_me()
if not me:
logger.error("Не удалось получить информацию о пользователе")
raise SessionInvalid()
# Собираем данные с обработкой ошибок
stars = self.check_stars(me=me)
country = self.check_country(me=me)
logger.debug(f"Получен пользователь: {me.first_name} (+{me.phone})")
contacts = self.check_contacts()
chats = self.check_chats()
channels = [] if chats == [] else self.check_channels(chats=chats)
admin_channels = (
[] if channels == [] else self.check_admin_channels(channels=channels)
)
stars = await self.check_stars(me=me)
country = await self.check_country(me=me)
contacts = await self.check_contacts()
chats = await self.check_chats()
channels = await self.check_channels(chats=chats) if chats else []
admin_channels = await self.check_admin_channels(channels=channels) if channels else []
logger.debug("Полная проверка завершена успешно")
return Result(
me=me,
stars=stars,