Source code for discordSuperUtils.FiveM

import aiohttp
import aiohttp.client_exceptions


[docs]class ServerNotFound(Exception): """Raises an error when a server is invalid or offline."""
[docs]class FiveMPlayer: def __init__(self, player_id, identifiers, name, ping): self.player_id = player_id self.identifiers = identifiers self.name = name self.ping = ping def __str__(self): return f"<FiveM Player {self.player_id=}>" def __repr__(self): return f"<FiveM Player {self.name=}, {self.player_id=}, {self.identifiers=}, {self.ping=}>"
[docs] @classmethod def fetch(cls, player_dict): identifiers = dict([x.split(':') for x in player_dict['identifiers']]) return cls(player_dict['id'], identifiers, player_dict['name'], player_dict['ping'])
[docs]class FiveMServer: def __init__(self, ip, resources, players, name, variables): self.ip = ip self.resources = resources self.players = players self.name = name self.variables = variables def __str__(self): return f"<FiveM Server {self.name=}>" def __repr__(self): return f"<FiveM Server {self.ip=}," \ f" {self.name=}," \ f" {self.players=}," \ f" {self.resources=}," \ f" {self.variables=}>"
[docs] @classmethod async def fetch(cls, ip): base_address = "http://" + ip + "/" async with aiohttp.ClientSession() as session: try: await session.get(base_address) # Server status check except (aiohttp.client_exceptions.ClientConnectorError, aiohttp.client_exceptions.InvalidURL): raise ServerNotFound(f"Server '{ip}' is invalid or offline.") players_request = await session.get(base_address + "players.json") info_request = await session.get(base_address + "info.json") dynamic_info_request = await session.get(base_address + "dynamic.json") info = await info_request.json(content_type=None) players = await players_request.json(content_type=None) dynamic = await dynamic_info_request.json(content_type=None) # This is still included in the session because parsing the json outside of it sometimes doesnt work # and block the program (?) :( return cls(ip, info['resources'], [FiveMPlayer.fetch(player) for player in players], dynamic["hostname"], info['vars'])