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" }