-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathServer.py
61 lines (53 loc) · 3.2 KB
/
Server.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
from mcstatus import JavaServer
# Требуется скачать все необходимые зависимости из requirements.txt с помощью команды:
# pip install -r requirements.txt (или можно скачать их вручную)
class Server:
# При инициализации класс принимает 3 параметра:
# ip (ip/домен),
# port (порт, по умолчанию 25685),
# timeout (тайм-аут в секундах до сбоя подключения, по умолчанию 10 сек)
def __init__(self, ip, port=25685, timeout=10):
self.ip = ip
self.port = port
self.timeout = timeout
# Создание экземпляра класса JavaServer
self.server = JavaServer(self.ip, self.port, timeout=self.timeout)
# Метод, который возвращает список состоящий из 1 элементов:
# Текущее количество игроков на сервере
# Максимальное количество игроков на сервере
def get_server_online(self) -> list:
try:
status = self.server.status()
return [status.players.online, status.players.max]
# Код выполняемый при возникновении ошибки в блоке try
except Exception as e:
print(e)
return ["Error", "Error"]
# Метод, который возвращает список с никами текущих игроков на сервере
def get_server_online_list(self) -> list:
try:
query = self.server.query()
return query.players.names
# Код выполняемый при возникновении ошибки в блоке try
except Exception as e:
print(e)
return ["Error"]
# Метода, который возвращает строковое значение задержки между клиентом и сервером
# Возвращаемое значение имеет строковый тип, чтобы не происходило путаницы при обработке исключений
def get_ping(self) -> str:
try:
ping = self.server.ping()
return f"{ping:.1f}" # Тут можно изменить количество знаков после запятой
# Код выполняемый при возникновении ошибки в блоке try
except Exception as e:
print(e)
return "Error"
# Пример использования (не будет срабатывать при импорте в другой проект)
if __name__ == "__main__":
server = Server("135.181.237.55") # Создание тестового экземпляра класса
# Онлайн
print(f"Online: {server.get_server_online()[0]}/{server.get_server_online()[1]}")
# Список игроков на сервере
print(f"Players online: {", ".join(player for player in server.get_server_online_list())}")
# Пинг
print(f"latency: {server.get_ping()}ms")