diff --git a/app.py b/app.py index 8c54c87..61b1b5b 100644 --- a/app.py +++ b/app.py @@ -108,8 +108,10 @@ def get_users(db_config): connection.close() return users -def search_user(db_config, username): - """Wyszukuje użytkownika po nazwie i wyświetla jego statystyki.""" +def search_user(db_config, usernames): + """Wyszukuje wielu użytkowników po nazwach i wyświetla ich statystyki w tabeli.""" + usernames_list = [name.strip() for name in usernames.split(',')] + connection = mysql.connector.connect(**db_config) cursor = connection.cursor(dictionary=True) @@ -127,51 +129,71 @@ def search_user(db_config, username): FROM users u LEFT JOIN node n ON u.uid = n.uid LEFT JOIN userpoints p ON u.uid = p.uid - WHERE u.name = %s + WHERE u.name IN (%s) GROUP BY u.uid """ - cursor.execute(query, (username,)) - user = cursor.fetchone() + # Przygotowanie parametrów dla IN w zapytaniu SQL + params = tuple(usernames_list) + query = query % (','.join(['%s'] * len(usernames_list))) + + cursor.execute(query, params) + users = cursor.fetchall() cursor.close() connection.close() - if not user: - print(f"❌ Użytkownik '{username}' nie został znaleziony.") + if not users: + print(f"❌ Żaden z użytkowników ({usernames}) nie został znaleziony.") return None - # Dodatkowe informacje o e-mailu - temp_domains_cache = load_temp_domains() - email_valid = not is_fake_email(user['mail']) and not is_temp_email(user['mail'], temp_domains_cache) - bad_name = is_bad_name(user['name']) + # Przygotowanie danych do wyświetlenia + headers = [ + "UID", "Nazwa użytkownika", "E-mail", "Status konta", + "Data rejestracji", "Ostatnie logowanie", "Ostatnia aktywność", + "Dni nieaktywności", "Punkty", "Liczba postów", + "E-mail poprawny", "Tymczasowy e-mail", "Podejrzana nazwa" + ] - # Oblicz dni nieaktywności - now_ts = int(datetime.now().timestamp()) - last_access = user['access'] or 0 - days_inactive = (now_ts - last_access) / 86400 if last_access else float('inf') - - # Przygotuj dane do wyświetlenia - user_data = { - 'UID': user['uid'], - 'Nazwa użytkownika': user['name'], - 'E-mail': user['mail'], - 'Status konta': 'Aktywny' if user['status'] == 1 else 'Zablokowany', - 'Data rejestracji': datetime.fromtimestamp(user['created']).strftime('%Y-%m-%d %H:%M:%S') if user.get('created') else 'Nieznana', - 'Ostatnie logowanie': datetime.fromtimestamp(user['access']).strftime('%Y-%m-%d %H:%M:%S') if user.get('access') else 'Nigdy', - 'Ostatnia aktywność': datetime.fromtimestamp(user['login']).strftime('%Y-%m-%d %H:%M:%S') if user.get('login') else 'Nigdy', - 'Dni nieaktywności': f"{days_inactive:.1f} dni", - 'Punkty': user.get('points', 0), - 'Liczba postów': user.get('post_count', 0), - 'E-mail poprawny': 'Tak' if email_valid else 'Nie', - 'Tymczasowy e-mail': 'Tak' if is_temp_email(user['mail'], temp_domains_cache) else 'Nie', - 'Podejrzana nazwa': 'Tak' if bad_name else 'Nie' - } + # Transpozycja danych - każdy użytkownik jako kolumna + table_data = [] + for header in headers: + row = [header] + for user in users: + # Dodatkowe informacje o e-mailu + temp_domains_cache = load_temp_domains() + email_valid = not is_fake_email(user['mail']) and not is_temp_email(user['mail'], temp_domains_cache) + bad_name = is_bad_name(user['name']) + + # Oblicz dni nieaktywności + now_ts = int(datetime.now().timestamp()) + last_access = user['access'] or 0 + days_inactive = (now_ts - last_access) / 86400 if last_access else float('inf') + + # Mapowanie danych + user_data = { + "UID": user['uid'], + "Nazwa użytkownika": user['name'], + "E-mail": user['mail'], + "Status konta": 'Aktywny' if user['status'] == 1 else 'Zablokowany', + "Data rejestracji": datetime.fromtimestamp(user['created']).strftime('%Y-%m-%d %H:%M:%S') if user.get('created') else 'Nieznana', + "Ostatnie logowanie": datetime.fromtimestamp(user['access']).strftime('%Y-%m-%d %H:%M:%S') if user.get('access') else 'Nigdy', + "Ostatnia aktywność": datetime.fromtimestamp(user['login']).strftime('%Y-%m-%d %H:%M:%S') if user.get('login') else 'Nigdy', + "Dni nieaktywności": f"{days_inactive:.1f} dni", + "Punkty": user.get('points', 0), + "Liczba postów": user.get('post_count', 0), + "E-mail poprawny": 'Tak' if email_valid else 'Nie', + "Tymczasowy e-mail": 'Tak' if is_temp_email(user['mail'], temp_domains_cache) else 'Nie', + "Podejrzana nazwa": 'Tak' if bad_name else 'Nie' + } + + row.append(user_data.get(header, '')) + table_data.append(row) # Wyświetl wyniki w tabeli - print("\n🔍 Szczegóły użytkownika:") - print(tabulate([(k, v) for k, v in user_data.items()], tablefmt="fancy_grid")) + print("\n🔍 Porównanie użytkowników:") + print(tabulate(table_data, headers=[""] + [user['name'] for user in users], tablefmt="fancy_grid")) - return user + return users def is_fake_email(email): try: