-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathping.py
87 lines (71 loc) · 1.97 KB
/
ping.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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)