@@ -16,8 +16,9 @@ class Status:
16
16
limit : int
17
17
desc : int
18
18
modename : int
19
- ping : float
19
+ ping : int
20
20
21
+ # ! Main Class
21
22
class Server :
22
23
def __init__ (
23
24
self ,
@@ -27,43 +28,55 @@ def __init__(
27
28
) -> None :
28
29
self .server : Tuple [str , int ] = (server_host , server_port )
29
30
self .input_server : Tuple [str , int ] = (server_host , input_port )
30
-
31
- def get_status (self , timeout : float = 10.0 ) -> Status :
31
+
32
+ # ! Magic Methods
33
+ def __str__ (self ) -> str :
34
+ return f"{ self .server [0 ]} :{ self .server [1 ]} :{ self .input_server [1 ]} "
35
+
36
+ def __repr__ (self ) -> str :
37
+ return f"{ self .__class__ .__name__ } ({ repr (self .__str__ ())} )"
38
+
39
+ # ! Main Method
40
+ def get_status (
41
+ self ,
42
+ timeout : float = 10.0 ,
43
+ encoding : str = 'utf-8' ,
44
+ errors : str = 'strict'
45
+ ) -> Status :
46
+ info = {}
32
47
s = socket (AF_INET , SOCK_DGRAM )
33
48
s .connect (self .server )
34
49
s .settimeout (timeout )
35
- info = {}
36
50
s_time = time ()
37
51
s .send (b"\xfe \x01 " )
38
52
data = s .recv (1024 )
39
53
e_time = time ()
40
- # * Парсинг
41
- info ["name" ] = data [1 :data [0 ]+ 1 ].decode ("utf-8" )
54
+ info ['name' ] = data [1 :data [0 ]+ 1 ].decode (encoding , errors )
42
55
data = data [data [0 ]+ 1 :]
43
- info [" map" ] = data [1 :data [0 ]+ 1 ].decode ("utf-8" )
56
+ info [' map' ] = data [1 :data [0 ]+ 1 ].decode (encoding , errors )
44
57
data = data [data [0 ]+ 1 :]
45
- info [" players" ] = unpack (">i" , data [:4 ])[0 ]
58
+ info [' players' ] = unpack (">i" , data [:4 ])[0 ]
46
59
data = data [4 :]
47
- info [" wave" ] = unpack (">i" , data [:4 ])[0 ]
60
+ info [' wave' ] = unpack (">i" , data [:4 ])[0 ]
48
61
data = data [4 :]
49
- info [" version" ] = unpack (">i" , data [:4 ])[0 ]
62
+ info [' version' ] = unpack (">i" , data [:4 ])[0 ]
50
63
data = data [4 :]
51
- info [" vertype" ] = data [1 :data [0 ]+ 1 ].decode ("utf-8" )
64
+ info [' vertype' ] = data [1 :data [0 ]+ 1 ].decode (encoding , errors )
52
65
data = data [data [0 ]+ 1 :]
53
66
info ['gamemode' ] = unpack ('>b' , data [:1 ])[0 ]
54
67
data = data [1 :]
55
68
info ['limit' ] = unpack (">i" , data [:4 ])[0 ]
56
69
data = data [4 :]
57
- info ['desc' ] = data [1 :data [0 ]+ 1 ].decode ("utf-8" )
70
+ info ['desc' ] = data [1 :data [0 ]+ 1 ].decode (encoding , errors )
58
71
data = data [data [0 ]+ 1 :]
59
- info ['modename' ] = data [1 :data [0 ]+ 1 ].decode ("utf-8" )
72
+ info ['modename' ] = data [1 :data [0 ]+ 1 ].decode (encoding , errors )
60
73
data = data [data [0 ]+ 1 :]
61
- info [" ping" ] = round ((e_time - s_time ) * 1000 )
74
+ info [' ping' ] = round ((e_time - s_time ) * 1000 )
62
75
return Status (** info )
63
76
64
77
def send_command (self , command : str ) -> None :
65
78
s = create_connection (self .input_server )
66
- s .sendall (command .encode (errors = "ignore" ))
79
+ s .sendall (command .encode ())
67
80
s .close ()
68
81
69
82
def ping (self , timeout : float = 10.0 ) -> int :
0 commit comments