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

129 lines
3.3 KiB
Python
Raw Permalink Normal View History

2022-07-01 13:28:39 +03:00
"""Operators, whitelist and banned players lists"""
2022-03-18 17:38:36 +03:00
import enum
2022-03-25 15:45:38 +03:00
from typing import List, Union
2021-10-15 18:31:47 +03:00
from typing import TYPE_CHECKING
import lxml.html
2023-05-24 16:41:33 +03:00
from .atconnect import BASE_URL, AJAX_URL
2021-10-15 18:31:47 +03:00
if TYPE_CHECKING:
2022-06-23 14:13:56 +03:00
from .atserver import AternosServer
2022-03-18 17:38:36 +03:00
class Lists(enum.Enum):
2021-10-15 18:31:47 +03:00
2022-06-23 14:13:56 +03:00
"""Players list type enum"""
whl = 'whitelist'
whl_je = 'whitelist'
whl_be = 'allowlist'
2022-06-23 14:13:56 +03:00
ops = 'ops'
ban = 'banned-players'
ips = 'banned-ips'
2022-03-18 17:38:36 +03:00
class PlayersList:
"""Class for managing operators,
whitelist and banned players lists"""
2022-06-23 14:13:56 +03:00
2022-07-01 13:28:39 +03:00
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
"""
2022-06-23 14:13:56 +03:00
self.atserv = atserv
self.lst = Lists(lst)
2022-07-01 09:31:23 +03:00
# 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
2022-07-01 13:28:39 +03:00
if common_whl and bedrock:
self.lst = Lists.whl_be
self.players: List[str] = []
2022-06-23 14:13:56 +03:00
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
2022-06-23 14:13:56 +03:00
"""
if cache and self.parsed:
return self.players
listreq = self.atserv.atserver_request(
2023-05-24 16:41:33 +03:00
f'{BASE_URL}/players/{self.lst.value}',
2022-06-23 14:13:56 +03:00
'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
2022-06-23 14:13:56 +03:00
"""
self.atserv.atserver_request(
2023-07-04 13:15:17 +03:00
f'{AJAX_URL}/server/players/lists/add',
2022-06-23 14:13:56 +03:00
'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
2022-06-23 14:13:56 +03:00
"""
self.atserv.atserver_request(
2023-07-04 13:15:17 +03:00
f'{AJAX_URL}/server/players/lists/remove',
2022-06-23 14:13:56 +03:00
'POST', data={
'list': self.lst.value,
'name': name
}, sendtoken=True
)
for i, j in enumerate(self.players):
if j == name:
del self.players[i]