пофиксил баг отправки уведомлений
This commit is contained in:
parent
6d51cf135d
commit
b3b6a54e2d
5 changed files with 253 additions and 32 deletions
144
check_recent_games.py
Normal file
144
check_recent_games.py
Normal file
|
|
@ -0,0 +1,144 @@
|
|||
#!/usr/bin/env python3
|
||||
"""Скрипт для проверки недавних игр пользователя через Lichess API"""
|
||||
|
||||
import requests
|
||||
import json
|
||||
from datetime import datetime, timedelta
|
||||
import sys
|
||||
|
||||
def get_recent_games(username: str, minutes: int = 30):
|
||||
"""Получить игры за последние N минут"""
|
||||
|
||||
# Вычисляем временные метки
|
||||
now = datetime.now()
|
||||
since_time = now - timedelta(minutes=minutes)
|
||||
|
||||
since_ms = int(since_time.timestamp() * 1000)
|
||||
until_ms = int(now.timestamp() * 1000)
|
||||
|
||||
print(f"🔍 Проверяем игры для {username}")
|
||||
print(f"⏰ Период: с {since_time.strftime('%Y-%m-%d %H:%M:%S')} до {now.strftime('%Y-%m-%d %H:%M:%S')}")
|
||||
print(f"📅 Timestamps: since={since_ms}, until={until_ms}")
|
||||
print()
|
||||
|
||||
# Делаем запрос к Lichess API
|
||||
url = f"https://lichess.org/api/games/user/{username}"
|
||||
params = {
|
||||
'since': since_ms,
|
||||
'until': until_ms,
|
||||
'max': 1000,
|
||||
'rated': 'true' # Только рейтинговые
|
||||
}
|
||||
|
||||
headers = {
|
||||
'Accept': 'application/x-ndjson'
|
||||
}
|
||||
|
||||
try:
|
||||
response = requests.get(url, params=params, headers=headers, timeout=30)
|
||||
|
||||
if response.status_code == 404:
|
||||
print(f"❌ Пользователь {username} не найден (404)")
|
||||
return []
|
||||
elif response.status_code != 200:
|
||||
print(f"❌ Ошибка API: {response.status_code} - {response.text[:200]}")
|
||||
return []
|
||||
|
||||
# Парсим NDJSON
|
||||
games = []
|
||||
content = response.text.strip()
|
||||
|
||||
if content:
|
||||
for line in content.split('\n'):
|
||||
if line.strip():
|
||||
try:
|
||||
game = json.loads(line)
|
||||
games.append(game)
|
||||
except json.JSONDecodeError as e:
|
||||
print(f"⚠️ Ошибка парсинга JSON: {e}")
|
||||
continue
|
||||
|
||||
return games
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Ошибка при запросе: {e}")
|
||||
return []
|
||||
|
||||
def format_game_time(created_at_ms: int) -> str:
|
||||
"""Форматирует время создания игры"""
|
||||
dt = datetime.fromtimestamp(created_at_ms / 1000)
|
||||
return dt.strftime('%Y-%m-%d %H:%M:%S')
|
||||
|
||||
def main():
|
||||
username = sys.argv[1] if len(sys.argv) > 1 else "vrubelroman"
|
||||
minutes = int(sys.argv[2]) if len(sys.argv) > 2 else 40
|
||||
|
||||
games = get_recent_games(username, minutes)
|
||||
|
||||
if not games:
|
||||
print("❌ Игры не найдены")
|
||||
return
|
||||
|
||||
print(f"✅ Найдено игр: {len(games)}")
|
||||
print()
|
||||
print("=" * 80)
|
||||
|
||||
now = datetime.now()
|
||||
|
||||
for i, game in enumerate(games, 1):
|
||||
game_id = game.get('id', 'N/A')
|
||||
created_at_ms = game.get('createdAt', 0)
|
||||
speed = game.get('speed', 'unknown')
|
||||
rated = game.get('rated', False)
|
||||
|
||||
# Результат
|
||||
white = game.get('players', {}).get('white', {})
|
||||
black = game.get('players', {}).get('black', {})
|
||||
white_user = white.get('user', {}).get('name', 'N/A')
|
||||
black_user = black.get('user', {}).get('name', 'N/A')
|
||||
winner = game.get('winner')
|
||||
|
||||
# Определяем результат для пользователя
|
||||
if white_user == username:
|
||||
result = "Победа" if winner == "white" else ("Поражение" if winner == "black" else "Ничья")
|
||||
opponent = black_user
|
||||
elif black_user == username:
|
||||
result = "Победа" if winner == "black" else ("Поражение" if winner == "white" else "Ничья")
|
||||
opponent = white_user
|
||||
else:
|
||||
result = "N/A"
|
||||
opponent = "N/A"
|
||||
|
||||
game_time = format_game_time(created_at_ms)
|
||||
time_ago = now - datetime.fromtimestamp(created_at_ms / 1000)
|
||||
minutes_ago = int(time_ago.total_seconds() / 60)
|
||||
|
||||
print(f"\n🎮 Игра #{i}")
|
||||
print(f" ID: {game_id}")
|
||||
print(f" Время: {game_time} ({minutes_ago} минут назад)")
|
||||
print(f" Скорость: {speed}")
|
||||
print(f" Рейтинговая: {'Да' if rated else 'Нет'}")
|
||||
print(f" Соперник: {opponent}")
|
||||
print(f" Результат: {result}")
|
||||
|
||||
# Рейтинг
|
||||
if white_user == username:
|
||||
rating_change = white.get('ratingDiff', 0)
|
||||
final_rating = white.get('rating', 0)
|
||||
elif black_user == username:
|
||||
rating_change = black.get('ratingDiff', 0)
|
||||
final_rating = black.get('rating', 0)
|
||||
else:
|
||||
rating_change = 0
|
||||
final_rating = 0
|
||||
|
||||
if rating_change != 0 or final_rating != 0:
|
||||
print(f" Рейтинг: {final_rating} ({rating_change:+d})")
|
||||
|
||||
print()
|
||||
print("=" * 80)
|
||||
print(f"\n📊 Всего игр за последние {minutes} минут: {len(games)}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue