feat(spamblock): add SpamBot spamblock check and language support
This commit is contained in:
+42
-5
@@ -27,6 +27,7 @@ class Result:
|
||||
me: Optional[User] = None
|
||||
stars: Optional[int] = None
|
||||
country: Optional[str] = None
|
||||
spamblock: Optional[bool] = None
|
||||
|
||||
contacts: Optional[List[User]] = None
|
||||
chats: Optional[List[Chat]] = None
|
||||
@@ -35,9 +36,10 @@ class Result:
|
||||
|
||||
|
||||
class Checker:
|
||||
def __init__(self, path: Path, temp_path: Path):
|
||||
def __init__(self, path: Path, temp_path: Path, lang_code: str = "en"):
|
||||
self.path = path
|
||||
self.temp_path = temp_path
|
||||
self.lang_code = lang_code
|
||||
self.client = None
|
||||
logger.debug(f"Создание экземпляра Checker для пути: {path}")
|
||||
try:
|
||||
@@ -53,7 +55,7 @@ class Checker:
|
||||
logger.error("TDATA не инициализирована")
|
||||
raise SessionInvalid()
|
||||
try:
|
||||
await self.__ensure_client()
|
||||
await self.__ensure_client(lang_code=self.lang_code)
|
||||
except (OpenTeleException, Exception) as e:
|
||||
logger.error(f"Не удалось инициализировать клиент: {e}")
|
||||
raise SessionInvalid()
|
||||
@@ -68,10 +70,10 @@ class Checker:
|
||||
except Exception as e:
|
||||
logger.warning(f"Ошибка при отключении клиента: {e}")
|
||||
|
||||
async def __ensure_client(self):
|
||||
async def __ensure_client(self, lang_code: str = "en"):
|
||||
if self.client is None:
|
||||
logger.debug("Конвертация TDATA в Telethon клиент")
|
||||
self.client = await self.desktop.convert()
|
||||
logger.debug(f"Конвертация TDATA в Telethon клиент с языком '{lang_code}'")
|
||||
self.client = await self.desktop.convert(lang_code=lang_code)
|
||||
logger.debug("Telethon клиент успешно создан")
|
||||
|
||||
async def check_stars(self, me: User) -> int:
|
||||
@@ -160,6 +162,39 @@ class Checker:
|
||||
logger.warning(f"Не удалось проверить админские права: {e}")
|
||||
return []
|
||||
|
||||
async def check_spamblock(self) -> bool:
|
||||
logger.debug("Проверка spamblock через @SpamBot")
|
||||
try:
|
||||
await self.client.send_message("@SpamBot", "/start")
|
||||
logger.debug("Отправлено сообщение /start в @SpamBot")
|
||||
|
||||
# Ждем ответ от SpamBot
|
||||
import asyncio
|
||||
|
||||
await asyncio.sleep(2)
|
||||
|
||||
# Получаем последние сообщения от SpamBot
|
||||
messages = await self.client.get_messages("@SpamBot", limit=1)
|
||||
|
||||
if messages and len(messages) > 0:
|
||||
response_text = messages[0].message
|
||||
logger.debug(f"Ответ от SpamBot: {response_text[:50]}...")
|
||||
|
||||
# Проверяем, содержит ли ответ текст об отсутствии ограничений
|
||||
if "свободен от каких-либо ограничений" in response_text.lower():
|
||||
logger.debug("Аккаунт не имеет spamblock")
|
||||
return False
|
||||
else:
|
||||
logger.debug("Аккаунт имеет spamblock")
|
||||
return True
|
||||
else:
|
||||
logger.warning("Не удалось получить ответ от SpamBot")
|
||||
return None
|
||||
|
||||
except Exception as e:
|
||||
logger.warning(f"Не удалось проверить spamblock: {e}")
|
||||
return None
|
||||
|
||||
async def check_all(self) -> Result:
|
||||
logger.debug("Начало полной проверки аккаунта")
|
||||
try:
|
||||
@@ -172,6 +207,7 @@ class Checker:
|
||||
|
||||
stars = await self.check_stars(me=me)
|
||||
country = await self.check_country(me=me)
|
||||
spamblock = await self.check_spamblock()
|
||||
contacts = await self.check_contacts()
|
||||
chats = await self.check_chats()
|
||||
channels = await self.check_channels(chats=chats) if chats else []
|
||||
@@ -184,6 +220,7 @@ class Checker:
|
||||
me=me,
|
||||
stars=stars,
|
||||
country=country,
|
||||
spamblock=spamblock,
|
||||
contacts=contacts,
|
||||
chats=chats,
|
||||
channels=channels,
|
||||
|
||||
Reference in New Issue
Block a user