|
1 | | -import os |
2 | 1 | import time |
3 | 2 | from typing import TYPE_CHECKING |
4 | 3 |
|
5 | | -import aiohttp |
6 | | -from opengsq.protocol_socket import Socket |
| 4 | +import opengsq |
7 | 5 |
|
8 | 6 | from discordgsm.protocols.protocol import Protocol |
9 | 7 |
|
10 | 8 | if TYPE_CHECKING: |
11 | 9 | from discordgsm.gamedig import GamedigResult |
12 | 10 |
|
13 | | - |
14 | 11 | class Palworld(Protocol): |
15 | 12 | name = "palworld" |
16 | 13 |
|
17 | 14 | async def query(self): |
18 | | - host, port = str(self.kv["host"]), int(str(self.kv["port"])) |
19 | | - ip = await Socket.gethostbyname(host) |
20 | | - |
21 | | - base_url = os.getenv('OPENGSQ_MASTER_SERVER_URL', 'https://master-server.opengsq.com/').rstrip('/') |
22 | | - url = f"{base_url}/palworld/search?host={ip}&port={port}" |
| 15 | + host, port, api_port, admin_password = ( |
| 16 | + str(self.kv["host"]), |
| 17 | + int(str(self.kv["port"])), |
| 18 | + int(str(self.kv["api_port"])), |
| 19 | + str(self.kv["admin_password"]), |
| 20 | + ) |
| 21 | + palworld = opengsq.Palworld(host, api_port, "admin", admin_password, self.timeout) |
23 | 22 | start = time.time() |
24 | | - |
25 | | - async with aiohttp.ClientSession() as session: |
26 | | - async with session.get(url) as response: |
27 | | - response.raise_for_status() |
28 | | - data: dict = await response.json() |
29 | | - ping = int((time.time() - start) * 1000) |
30 | | - |
| 23 | + data = await palworld.get_status() |
| 24 | + ping = int((time.time() - start) * 1000) |
| 25 | + if data.server_name: |
| 26 | + status = "online" |
| 27 | + else: |
| 28 | + status = "offline" |
31 | 29 | result: GamedigResult = { |
32 | | - "name": data.get("name", ""), |
33 | | - "map": data.get("map_name", ""), |
34 | | - "password": data.get("is_password", False), |
35 | | - "numplayers": data.get("current_players", 0), |
| 30 | + "status": status, |
| 31 | + "name": data.server_name, |
| 32 | + "map": None, |
| 33 | + "password": False, |
| 34 | + "numplayers": data.num_players, |
36 | 35 | "numbots": 0, |
37 | | - "maxplayers": data.get("max_players", 0), |
| 36 | + "maxplayers": data.max_players, |
38 | 37 | "players": None, |
39 | 38 | "bots": None, |
40 | 39 | "connect": f"{host}:{port}", |
41 | 40 | "ping": ping, |
42 | | - "raw": data, |
| 41 | + "raw": data.__dict__, |
43 | 42 | } |
44 | 43 |
|
45 | 44 | return result |
0 commit comments