From f4ce13a2c735499448ffda53207dccf005ddb9be Mon Sep 17 00:00:00 2001 From: Alexander Popov Date: Thu, 1 May 2025 20:18:46 +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=D1=8B=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80?= =?UTF-8?q?=D1=8B=20`telegram=20id`=20=D0=B8=20`telegram=20url`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/actions.py | 4 ++-- app/collect.py | 20 ++++++++++++-------- app/utils.py | 21 ++++++++++++++++++++- pyproject.toml | 4 ++-- 4 files changed, 36 insertions(+), 13 deletions(-) diff --git a/app/actions.py b/app/actions.py index e37b187..cf0ba9e 100644 --- a/app/actions.py +++ b/app/actions.py @@ -35,7 +35,7 @@ async def get_top_wins() -> None: time.sleep(1) async for message in client.get_chat_history(BOT_NAME, limit=1): - parse_wins_top(message) + await parse_wins_top(message) await client.read_chat_history(BOT_NAME) @@ -71,7 +71,7 @@ async def get_top_donates() -> None: time.sleep(1) async for message in client.get_chat_history(BOT_NAME, limit=1): - parse_donates_top(message) + await parse_donates_top(message) await client.read_chat_history(BOT_NAME) diff --git a/app/collect.py b/app/collect.py index b38d2b9..d2e4023 100644 --- a/app/collect.py +++ b/app/collect.py @@ -3,12 +3,14 @@ import re # Импорт сторонних модулей from pyrogram.types import Message +from pyrogram.enums import MessageEntityType # Импорт модулей приложения from . import db +from .utils import get_telegram_id, get_player_data -def parse_wins_top(message: Message) -> None: +async def parse_wins_top(message: Message) -> None: """Выполняет парсинг данных топа побед членов клана""" if message.text.startswith('🏆 Топ по победам'): players = message.text.split('\n') @@ -30,23 +32,24 @@ def parse_wins_top(message: Message) -> None: battle_count = battle_count.replace(' ⚔', '') # удаляем эмодзи мечей battle_count = int(re.sub(r'[^\x00-\x7F]', '', battle_count)) # преобразовывает строку в число + player_url, player_telegram_id = await get_player_data(message, idx) + WINS.append( { - # 'telegram_id': message.entities[idx].url.strip('http://t.me/'), + 'telegram_id': player_telegram_id, 'username': player, 'count': battle_count, + 'url': player_url, } ) - # print('{0} - {1} (@{2})'.format(player, battle_count, message.entities[idx].url.strip('http://t.me/'))) - print(WINS) db.add_data(WINS, True) else: pass -def parse_donates_top(message: Message) -> None: +async def parse_donates_top(message: Message) -> None: """Выполняет парсинг данных топа пожертвований членов клана""" if message.text.startswith('🏆 Топ по пожертвованиям'): players = message.text.split('\n') @@ -71,16 +74,17 @@ def parse_donates_top(message: Message) -> None: donates_count = donates_count.replace(' 💠', '') # удаляем эмодзи пожертвований donates_count = int(re.sub(r'[^\x00-\x7F]', '', donates_count)) # преобразовывает строку в число + player_url, player_telegram_id = await get_player_data(message, idx) + DONATES.append( { - # 'telegram_id': message.entities[idx].url.strip('http://t.me/'), + 'telegram_id': player_telegram_id, 'username': player, 'count': donates_count, + 'url': player_url, } ) - # print('{0} - {1} (@{2})'.format(player, donates_count, message.entities[idx].url.strip('http://t.me/'))) - print(DONATES) db.add_data(DONATES, False) else: diff --git a/app/utils.py b/app/utils.py index 23c123a..a8c3149 100644 --- a/app/utils.py +++ b/app/utils.py @@ -1,8 +1,27 @@ +# Импорт сторонних модулей +from pyrogram.types import Message +from pyrogram.enums import MessageEntityType + from . import client async def get_telegram_id(username: str) -> int: - """Возвращает Telegram ID по имени пользователя""" + """Возвращает Telegram ID""" telegram_user = await client.get_users(username) return telegram_user.id + + +async def get_player_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/', '')) + elif message.entities[idx].type == MessageEntityType.TEXT_MENTION: + player_url = None + player_telegram_id = message.entities[idx].user.id + else: + player_url = None + player_telegram_id = None + + return (player_url, player_telegram_id) diff --git a/pyproject.toml b/pyproject.toml index 4e08e8b..237b343 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] dynamic = [ "version" ] -name = "..." -description = "..." +name = "ClanStat" +description = "AniCard Clan Statistics" authors = [ {name = "Alexander Popov", email = "iiiypuk@fastmail.fm"}, ] readme = "README.md" license = { text = "MIT-0 License" }