Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
trueold89 | b3f9e7c8d9 |
|
|
trueold89 | c0b26f1fe0 |
|
|
trueold89 | 2ae08b8f7e |
|
|
@ -37,46 +37,80 @@ class AIOConnection(object):
|
|||
class IMCServer(ABC):
|
||||
|
||||
def __init__(self, host: str, port: int) -> None:
|
||||
"""
|
||||
:param host: Minecraft server ip or hostname
|
||||
:param port: Minecraft server port
|
||||
"""
|
||||
self.host = host
|
||||
self.port = port
|
||||
|
||||
@property
|
||||
@abstractmethod
|
||||
async def players_count(self) -> int:
|
||||
async def players_count(self) -> int | None:
|
||||
"""
|
||||
Returns current number of players on server
|
||||
|
||||
:return: Number of players on server
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
@property
|
||||
@abstractmethod
|
||||
async def name(self) -> str:
|
||||
async def name(self) -> str | None:
|
||||
"""
|
||||
Returns server core name
|
||||
|
||||
:return: Server name
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
@property
|
||||
@abstractmethod
|
||||
async def maxplayers(self) -> int:
|
||||
async def maxplayers(self) -> int | None:
|
||||
"""
|
||||
Returns max number of players available on server
|
||||
|
||||
:return: Max number of players
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
@property
|
||||
@abstractmethod
|
||||
async def motd(self) -> str:
|
||||
async def motd(self) -> str | None:
|
||||
"""
|
||||
Returns Message of the day
|
||||
|
||||
:return: Server motd
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
@property
|
||||
@abstractmethod
|
||||
async def players_list(self) -> Iterable:
|
||||
"""
|
||||
Returns iterable object with online players nicknames
|
||||
|
||||
:return: Players nicknames iterable object
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
@property
|
||||
@abstractmethod
|
||||
async def all_info(self) -> dict:
|
||||
"""
|
||||
Returns dict with all information about server
|
||||
|
||||
:return: All information about server
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
class AIOMCServer(IMCServer):
|
||||
|
||||
_name: str
|
||||
_max: int
|
||||
_count: int
|
||||
_motd: str
|
||||
_name: str | None
|
||||
_max: int | None
|
||||
_count: int | None
|
||||
_motd: str | None
|
||||
_data: bytes
|
||||
_players: Iterable
|
||||
|
||||
|
@ -85,7 +119,7 @@ class AIOMCServer(IMCServer):
|
|||
self._data = self._pack_data(
|
||||
b"\x00\x00" + self._pack_data(self.host.encode('utf8')) + self.
|
||||
_pack_port(self.port) + b"\x01")
|
||||
self._players = ()
|
||||
self.clean()
|
||||
|
||||
@staticmethod
|
||||
async def _unpack_varint(s):
|
||||
|
@ -114,6 +148,13 @@ class AIOMCServer(IMCServer):
|
|||
d = bytes(d, "utf-8")
|
||||
return h + d
|
||||
|
||||
def clean(self) -> None:
|
||||
self._name = None
|
||||
self._motd = None
|
||||
self._max = None
|
||||
self._count = None
|
||||
self._players = ()
|
||||
|
||||
@staticmethod
|
||||
def _pack_port(i):
|
||||
return struct_pack('>H', i)
|
||||
|
@ -132,8 +173,11 @@ class AIOMCServer(IMCServer):
|
|||
|
||||
async def update(self) -> None:
|
||||
data = await self._get_data()
|
||||
self.clean()
|
||||
self._name = data["version"]["name"]
|
||||
self._motd = data["description"]
|
||||
if isinstance(self._motd, dict):
|
||||
self._motd = self._motd["text"]
|
||||
players = data["players"]
|
||||
self._count = int(players["online"])
|
||||
self._max = int(players["max"])
|
||||
|
@ -142,22 +186,22 @@ class AIOMCServer(IMCServer):
|
|||
players["sample"]))
|
||||
|
||||
@property
|
||||
async def players_count(self) -> int:
|
||||
async def players_count(self) -> int | None | None:
|
||||
await self.update()
|
||||
return self._count
|
||||
|
||||
@property
|
||||
async def name(self) -> str:
|
||||
async def name(self) -> str | None | None:
|
||||
await self.update()
|
||||
return self._name
|
||||
|
||||
@property
|
||||
async def maxplayers(self) -> int:
|
||||
async def maxplayers(self) -> int | None | None:
|
||||
await self.update()
|
||||
return self._max
|
||||
|
||||
@property
|
||||
async def motd(self) -> str:
|
||||
async def motd(self) -> str | None | None:
|
||||
await self.update()
|
||||
return self._motd
|
||||
|
||||
|
|
Loading…
Reference in New Issue