feat: Initial commit Plants vs Zombies Web Edition v2.4
- 5 Biomes: Day, Night, Pool, Fog, Roof (25 Campaign levels) - Minigames: Wall-nut Bowling, I Zombie, Roguelike, Boss Rush & Dr. Zomboss - Systems: Zen Garden, Workshop Crafting, Almanac, Tree of Wisdom, Achievements - Backend: REST API + SQLite Accounts & Save Synchronization - Infrastructure: Nginx HTTPS & Docker deployment
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
CLI Tool to list, inspect, and manage registered users in Plants vs. Zombies database.
|
||||
Usage:
|
||||
python3 scripts/manage_users.py # List all registered users in a formatted table
|
||||
python3 scripts/manage_users.py <user> # Show detailed full JSON profile for a specific user
|
||||
"""
|
||||
|
||||
import sys
|
||||
import json
|
||||
import os
|
||||
|
||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
sys.path.insert(0, os.path.join(BASE_DIR, "scripts"))
|
||||
|
||||
import db
|
||||
|
||||
def print_user_table(users):
|
||||
if not users:
|
||||
print("\nВ базе данных пока нет зарегистрированных пользователей.")
|
||||
print("Чтобы зарегистрироваться, откройте игру на https://ai.qpid.pro/ и нажмите кнопку «Войти».\n")
|
||||
return
|
||||
|
||||
print("\n" + "=" * 90)
|
||||
print(f"{'ID':<4} | {'Имя пользователя':<18} | {'Монеты':<8} | {'Уровень':<8} | {'Макс Ур':<8} | {'Рекорд':<8} | {'Создан':<19}")
|
||||
print("-" * 90)
|
||||
for u in users:
|
||||
print(f"{u['id']:<4} | {u['username']:<18} | {u['coins']:<8} | {u['level']:<8} | {u['maxUnlockedLevel']:<8} | {u['highScore']:<8} | {u['createdAt']:<19}")
|
||||
print("=" * 90)
|
||||
print(f"Всего зарегистрировано пользователей: {len(users)}\n")
|
||||
|
||||
def print_user_detail(username):
|
||||
users = db.list_all_users()
|
||||
target = next((u for u in users if u["username"].lower() == username.lower()), None)
|
||||
if not target:
|
||||
print(f"\nПользователь '{username}' не найден в базе данных.\n")
|
||||
return
|
||||
|
||||
print("\n" + "=" * 60)
|
||||
print(f" Профиль пользователя: {target['username']} (ID: {target['id']})")
|
||||
print("=" * 60)
|
||||
print(f" Дата регистрации: {target['createdAt']}")
|
||||
print(f" Последний вход: {target['lastLogin']}")
|
||||
print(f" Текущий уровень: {target['level']}")
|
||||
print(f" Макс. открытый: {target['maxUnlockedLevel']}")
|
||||
print(f" Всего монет: {target['coins']}")
|
||||
print(f" Рекорд очков: {target['highScore']}")
|
||||
print(f" Тема оформления: {target['theme']}")
|
||||
print("-" * 60)
|
||||
print(" Материалы мастерской:")
|
||||
for mat, count in target['materials'].items():
|
||||
print(f" - {mat}: {count}")
|
||||
print("-" * 60)
|
||||
print(" Уровни растений:")
|
||||
for plant, lvl in target['plantLevels'].items():
|
||||
print(f" - {plant}: Уровень {lvl}")
|
||||
print("-" * 60)
|
||||
print(" Перки:")
|
||||
for perk, lvl in target['perks'].items():
|
||||
print(f" - {perk}: Уровень {lvl}")
|
||||
print("-" * 60)
|
||||
print(" Дерево Мудрости:")
|
||||
print(f" - Высота: {target['treeOfWisdom'].get('height', 0)} футов")
|
||||
print("=" * 60 + "\n")
|
||||
|
||||
if __name__ == "__main__":
|
||||
db.init_db()
|
||||
if len(sys.argv) > 1:
|
||||
print_user_detail(sys.argv[1])
|
||||
else:
|
||||
users = db.list_all_users()
|
||||
print_user_table(users)
|
||||
Reference in New Issue
Block a user