This repository has been archived on 2024-07-30. You can view files and clone it, but cannot push or open issues or pull requests.
python-aternos/python_aternos/atplayers.py
DarkCat09 4892430f19 MkDocs, Readme, Files API, Automated session saving, v2.0.1
MkDocs: sphinx docstrings rewritten to google, improved config, written the major part of how-to.
Readme: centered title + logo, added badges, features list, updated changelog.

Improved Files API, added automatical session saving and restoring to Client.
Some changes in makefile and gitignore.
License Notice now refers to all contributors.
2022-08-26 16:14:07 +04:00

131 lines
3.2 KiB
Python

"""Operators, whitelist and banned players lists"""
import enum
from typing import List, Union
from typing import TYPE_CHECKING
import lxml.html
if TYPE_CHECKING:
from .atserver import AternosServer
class Lists(enum.Enum):
"""Players list type enum"""
whl = 'whitelist'
whl_je = 'whitelist'
whl_be = 'allowlist'
ops = 'ops'
ban = 'banned-players'
ips = 'banned-ips'
class PlayersList:
"""Class for managing operators,
whitelist and banned players lists"""
def __init__(
self,
lst: Union[str, Lists],
atserv: 'AternosServer') -> None:
"""Class for managing operators,
whitelist and banned players lists
Args:
lst (Union[str,Lists]): Players list type, must be
atplayers.Lists enum value
atserv (python_aternos.atserver.AternosServer):
atserver.AternosServer instance
"""
self.atserv = atserv
self.lst = Lists(lst)
# Fix for #30 issue
# whl_je = whitelist for java
# whl_be = whitelist for bedrock
# whl = common whitelist
common_whl = (self.lst == Lists.whl)
bedrock = (atserv.is_bedrock)
if common_whl and bedrock:
self.lst = Lists.whl_be
self.players: List[str] = []
self.parsed = False
def list_players(self, cache: bool = True) -> List[str]:
"""Parse a players list
Args:
cache (bool, optional): If the function should
return cached list (highly recommended)
Returns:
List of players' nicknames
"""
if cache and self.parsed:
return self.players
listreq = self.atserv.atserver_request(
f'https://aternos.org/players/{self.lst.value}',
'GET'
)
listtree = lxml.html.fromstring(listreq.content)
items = listtree.xpath(
'//div[@class="list-item"]'
)
result = []
for i in items:
name = i.xpath('./div[@class="list-name"]')
result.append(name[0].text.strip())
self.players = result
self.parsed = True
return result
def add(self, name: str) -> None:
"""Appends a player to the list by the nickname
Args:
name (str): Player's nickname
"""
self.atserv.atserver_request(
'https://aternos.org/panel/ajax/players/add.php',
'POST', data={
'list': self.lst.value,
'name': name
}, sendtoken=True
)
self.players.append(name)
def remove(self, name: str) -> None:
"""Removes a player from the list by the nickname
Args:
name (str): Player's nickname
"""
self.atserv.atserver_request(
'https://aternos.org/panel/ajax/players/remove.php',
'POST', data={
'list': self.lst.value,
'name': name
}, sendtoken=True
)
for i, j in enumerate(self.players):
if j == name:
del self.players[i]