Compare commits

..

3 Commits
v0.2 ... main

Author SHA1 Message Date
trueold89 b3f9e7c8d9
fixed bug of getting motd 2024-07-13 20:54:52 +03:00
trueold89 c0b26f1fe0
BugFix: player list now updated correctly 2024-07-13 05:40:13 +03:00
trueold89 2ae08b8f7e
Add docstrings 2024-07-08 00:09:08 +03:00
2 changed files with 58 additions and 14 deletions

View File

@ -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

View File

@ -6,7 +6,7 @@ long_description = (this_directory / "README.md").read_text()
setup(
name="mcaio",
version="0.2",
version="0.2.1",
url="https://git.orudo.ru/trueold89/mcaio",
author="trueold89",
author_email="trueold89@orudo.ru",