File size: 2,513 Bytes
89dd8f0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
import os
from dataclasses import dataclass
from pathlib import Path
from telethon import TelegramClient
@dataclass
class ValidationResult:
is_valid: bool
is_error: bool = False
message: str = ''
class Validator:
env_vars = ['API_ID', 'API_HASH', 'PHONE_NUMBER']
@staticmethod
def validate_env_file(env_filename: str = '.env') -> ValidationResult:
if not Path(env_filename).is_file():
log_msg = 'Отсутвует файл .env'
return ValidationResult(is_valid=False, message=log_msg)
return ValidationResult(is_valid=True)
@staticmethod
def validate_env_var(var_name: str, error_msg: str | None = None) -> ValidationResult:
if os.getenv(var_name) is None:
return ValidationResult(is_valid=False, message=error_msg)
return ValidationResult(is_valid=True)
@classmethod
def validate_env_id(cls) -> ValidationResult:
return cls.validate_env_var('API_ID', 'Отсутствует переменная API_ID')
@classmethod
def validate_env_hash(cls) -> ValidationResult:
return cls.validate_env_var('API_HASH', 'Отсутствует переменная API_HASH')
@classmethod
def validate_env_phone_number(cls) -> ValidationResult:
return cls.validate_env_var('PHONE_NUMBER', 'Отсутствует переменная PHONE_NUMBER')
@classmethod
def validate_env_vars(cls) -> ValidationResult:
if all([cls.validate_env_var(var).is_valid for var in cls.env_vars]):
return ValidationResult(is_valid=True)
return ValidationResult(is_valid=False)
@staticmethod
async def validate_auth(client: TelegramClient) -> ValidationResult:
try:
if not client.is_connected():
await client.connect()
is_user_authorized = await client.is_user_authorized()
if not is_user_authorized:
log_msg = 'Клиент не авторизован'
return ValidationResult(is_valid=False, message=log_msg)
return ValidationResult(is_valid=True)
except Exception as ex:
log_msg = f'Ошибка при подключении клиента, код ошибки: {ex}'
return ValidationResult(is_valid=False, is_error=True, message=log_msg)
finally:
if client.is_connected():
await client.disconnect() |