88 lines
2.0 KiB
Python
88 lines
2.0 KiB
Python
from mctools import PINGClient
|
|
from time import sleep, time
|
|
|
|
from datetime import datetime
|
|
now = datetime.now
|
|
|
|
host = 'CoolFunZone.aternos.me'
|
|
port = 36413
|
|
# 764 - 1.20.2
|
|
prot = 764
|
|
global c
|
|
c = PINGClient(host, port, proto_num = prot)
|
|
|
|
from db import *
|
|
from func import *
|
|
|
|
date = now().strftime("%Y-%m-%d")
|
|
# Проверяем существует ли
|
|
stat_exist(date)
|
|
db = read(f'data/{date}.json')
|
|
|
|
# КАК ЧАСТО ОБНОВЛЯЕМ (секунды)
|
|
update = 60
|
|
|
|
while True:
|
|
try:
|
|
raw = c.get_stats()
|
|
ms = round( c.ping() ) # Пинг
|
|
except:
|
|
c.stop()
|
|
c = PINGClient(host, port, proto_num = prot)
|
|
continue
|
|
|
|
if "sample" in raw["players"]:
|
|
# Список игроков
|
|
players_raw = raw["players"]["sample"]
|
|
# Оставляем только ники (без айди)
|
|
players = []
|
|
for i in players_raw:
|
|
players.append(i[0][:i[0].find('[')])
|
|
# Онлайн
|
|
online = raw["players"]["online"]
|
|
else:
|
|
players = []
|
|
online = 0
|
|
|
|
# Фикс атерноса
|
|
max = raw["players"]["max"]
|
|
if max == 0:
|
|
ms = 0
|
|
|
|
# Открываем БД.
|
|
# Дата
|
|
date = now().strftime("%Y-%m-%d")
|
|
# Проверяем существует ли
|
|
stat_exist(date)
|
|
db = read(f'data/{date}.json')
|
|
|
|
# Заполняем БД
|
|
# Пинг
|
|
db["ping"]["time"].append( now().strftime('%H:%M') )
|
|
db["ping"]["ms"].append( ms )
|
|
# Онлайн
|
|
db["online"]["time"].append( now().strftime('%H:%M') )
|
|
db["online"]["count"].append( online )
|
|
|
|
|
|
# Топ игроков по времени и последнее время захода
|
|
stat = read('data/stat.json')
|
|
# Перебираем игроков
|
|
for i in players:
|
|
# Если игрок уже в базе
|
|
if i in stat["players"]["time"]:
|
|
stat["players"]["time"][i] += update
|
|
else:
|
|
stat["players"]["time"][i] = update
|
|
# Время захода
|
|
stat["players"]["last"][i] = time()
|
|
|
|
|
|
# Записываем изменения
|
|
write(db, f'data/{date}.json')
|
|
|
|
write(stat, 'data/stat.json')
|
|
|
|
# Задержка
|
|
sleep(update)
|