From cf46592915dd7feac5b497041a6c5787f7792761 Mon Sep 17 00:00:00 2001 From: Alexander Popov Date: Sat, 5 Jul 2025 12:21:09 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BE=D0=B1=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B5=20?= =?UTF-8?q?401=20`AUTH=5FKEY=5FUNREGISTERED`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ClanStat/__init__.py | 2 +- ClanStat/__main__.py | 7 +++++++ ClanStat/actions.py | 16 ++++++++-------- ClanStat/collect.py | 4 ++-- ClanStat/db.py | 41 +++++++++++++++++++++++++++++++++-------- ClanStat/utils.py | 3 ++- HISTORY.md | 4 ++++ requirements.txt | 4 +++- 8 files changed, 60 insertions(+), 21 deletions(-) diff --git a/ClanStat/__init__.py b/ClanStat/__init__.py index d2ed087..c6398ba 100644 --- a/ClanStat/__init__.py +++ b/ClanStat/__init__.py @@ -1,6 +1,6 @@ # Информация о программе __author__ = 'Alexander Popov' -__version__ = (2, 2, 3) +__version__ = (2, 2, 4) # Импорт модулей стандартной библиотеки from os import getenv diff --git a/ClanStat/__main__.py b/ClanStat/__main__.py index 4e5929a..91e74e1 100644 --- a/ClanStat/__main__.py +++ b/ClanStat/__main__.py @@ -1,6 +1,10 @@ # Импорт модулей стандартной библиотеки import time +# Импорт сторонних модулей +from pyrogram.errors import exceptions +from rich import print as rich_print + # Импорт модулей приложения from . import __version__, client, db, logger, DELAY_TIME from .actions import get_top_wins, get_top_donates @@ -42,6 +46,9 @@ if __name__ == '__main__': try: client.run(main()) + except exceptions.unauthorized_401.AuthKeyUnregistered: + rich_print('Ошибка Telegram: [bold red][401 AUTH_KEY_UNREGISTERED][/bold red]') + rich_print('Удалите файлы авторизации [bold green]Pyrogram[/bold green]:'' [italic yellow]*.session, *.session-journal[/italic yellow]') except KeyboardInterrupt: pass diff --git a/ClanStat/actions.py b/ClanStat/actions.py index cf0ba9e..6296081 100644 --- a/ClanStat/actions.py +++ b/ClanStat/actions.py @@ -7,7 +7,7 @@ from .collect import parse_wins_top, parse_donates_top async def get_top_wins() -> None: - """Получает топ клана по победам""" + """⚔️ Получает топ клана по победам""" logger.info('Выполняется получения списка побед клана') await client.send_message(BOT_NAME, '🛡 Мой клан') @@ -22,7 +22,7 @@ async def get_top_wins() -> None: message_id=message_id, callback_data='my_clan:tops:91:0:0:0:0:1', ) - time.sleep(1) + time.sleep(2) async for message in client.get_chat_history(BOT_NAME, limit=1): message_id = message.id @@ -32,22 +32,22 @@ async def get_top_wins() -> None: message_id=message_id, callback_data='my_clan:top-wins:91:0:0:0:0:1', ) - time.sleep(1) + time.sleep(2) async for message in client.get_chat_history(BOT_NAME, limit=1): await parse_wins_top(message) - await client.read_chat_history(BOT_NAME) + await client.read_chat_history(BOT_NAME) # Помечает сообщения в чате прочитанными logger.info('Получение списка побед клана завершено') async def get_top_donates() -> None: - """Получает топ клана по пожертвованиям""" + """💠 Получает топ клана по пожертвованиям""" logger.info('Выполняется получения списка пожертвований клана') await client.send_message(BOT_NAME, '🛡 Мой клан') - time.sleep(1) + time.sleep(2) message_id = 0 async for message in client.get_chat_history(BOT_NAME, limit=1): @@ -58,7 +58,7 @@ async def get_top_donates() -> None: message_id=message_id, callback_data='my_clan:tops:91:0:0:0:0:1', ) - time.sleep(1) + time.sleep(2) async for message in client.get_chat_history(BOT_NAME, limit=1): message_id = message.id @@ -73,6 +73,6 @@ async def get_top_donates() -> None: async for message in client.get_chat_history(BOT_NAME, limit=1): await parse_donates_top(message) - await client.read_chat_history(BOT_NAME) + await client.read_chat_history(BOT_NAME) # Помечает сообщения в чате прочитанными logger.info('Получение списка пожертвований клана завершено') diff --git a/ClanStat/collect.py b/ClanStat/collect.py index 47176b3..4bc909d 100644 --- a/ClanStat/collect.py +++ b/ClanStat/collect.py @@ -11,7 +11,7 @@ from .utils import get_telegram_id, get_telegram_data, clean_icons async def parse_wins_top(message: Message) -> None: - """Выполняет парсинг данных топа побед членов клана""" + """⚔️ Выполняет парсинг данных топа побед членов клана""" if message.text.startswith('🏆 Топ по победам'): players = message.text.split('\n') players.pop(0) @@ -45,7 +45,7 @@ async def parse_wins_top(message: Message) -> None: async def parse_donates_top(message: Message) -> None: - """Выполняет парсинг данных топа пожертвований членов клана""" + """💠 Выполняет парсинг данных топа пожертвований членов клана""" if message.text.startswith('🏆 Топ по пожертвованиям'): players = message.text.split('\n') diff --git a/ClanStat/db.py b/ClanStat/db.py index bc43a69..de84d23 100644 --- a/ClanStat/db.py +++ b/ClanStat/db.py @@ -23,13 +23,27 @@ class DataBase(object): def connect(self) -> bool: """Выполняет подключение к базе данных""" - self.conn = psycopg2.connect( - dbname=self.name, - host=self.host, - user=self.user, - password=self.password, - port=self.port, - ) + + connection_kwargs = { + "host": self.host, + "port": self.port, + "user": self.user, + "password": self.password, + "database": self.name, + } + """Настройки соединения""" + + keepalive_kwargs = { + "keepalives": 1, + "keepalives_idle": 5, + "keepalives_interval": 5, + "keepalives_count": 2, + "tcp_user_timeout": 1000, + } + """Настройки TCP""" + + + self.conn = psycopg2.connect(**connection_kwargs, **keepalive_kwargs) # Выполняет подключение к базе данных self.conn.autocommit = True # Активирует автоматический коммит транзакций return True @@ -39,12 +53,23 @@ class DataBase(object): self.conn.close() return True + def check_connect(self) -> None: + """Проверяет статус подключения""" + try: + cur = self.conn.cursor() + cur.execute('SELECT 1') + cur.close() + + return True + except Exception as e: + return False + def commit(self) -> None: """Выполняет коммит""" self.conn.commit() return True - def add_data(self, data, wins: bool) -> bool: # wins изменит на Enum + def add_data(self, data, wins: bool) -> bool: # wins изменить на Enum """Добавляет данные в базу данных""" if wins: table = 'wins' diff --git a/ClanStat/utils.py b/ClanStat/utils.py index 19a6d09..2f282ce 100644 --- a/ClanStat/utils.py +++ b/ClanStat/utils.py @@ -6,7 +6,7 @@ from . import client async def get_telegram_id(username: str) -> int: - """Возвращает Telegram ID""" + """🆔 Возвращает Telegram ID""" try: telegram_user = await client.get_users(username) @@ -17,6 +17,7 @@ async def get_telegram_id(username: str) -> int: async def get_telegram_data(message: Message, idx: int) -> tuple(): """...""" + if message.entities[idx].type == MessageEntityType.TEXT_LINK: player_url = message.entities[idx].url player_telegram_id = await get_telegram_id(player_url.replace('http://t.me/', '')) diff --git a/HISTORY.md b/HISTORY.md index 4b38325..387f55b 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -11,3 +11,7 @@ include_toc: true * 🟢 – Добавлено * 🔴 – Удалёно * ♻️ – Исправлено + +## 2.2.4 + +* Добавлено сообщение об ошибке **401** `AUTH_KEY_UNREGISTERED` diff --git a/requirements.txt b/requirements.txt index 46bd33f..c0ecbec 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,7 @@ loguru==0.7.2 +psycopg2==2.9.10 Pyrogram==2.0.106 python-dotenv==1.0.1 +rich==14.0.0 TgCrypto==1.2.5 -psycopg2==2.9.10 +zstandard==0.23.0