Skip to content

Commit 7bba7be

Browse files
author
Taylor.R
committed
Clean + Query Async Task
1 parent 043785a commit 7bba7be

2 files changed

Lines changed: 130 additions & 174 deletions

File tree

‎src/Main.php‎

Lines changed: 96 additions & 174 deletions
Original file line numberDiff line numberDiff line change
@@ -11,26 +11,104 @@
1111
use pocketmine\command\CommandSender;
1212
use NhanAZ\QueryServer\libs\libpmquery\PMQuery;
1313
use NhanAZ\QueryServer\libs\libpmquery\PmQueryException;
14+
use pocketmine\console\ConsoleCommandSender;
15+
use pocketmine\Server;
1416

1517
class Main extends PluginBase implements Listener {
1618

1719
public array $players = [];
1820

19-
public function qrs($sender, $query) {
20-
$sender->sendMessage("§e>§f GameName:§a " . (($query["GameName"] == null) ? "§cNull!" : $query["GameName"]));
21-
$sender->sendMessage("§e>§f HostName:§r " . (($query["HostName"] == null) ? "§cNull!" : $query["HostName"]));
22-
$sender->sendMessage("§e>§f Protocol:§a " . (($query["Protocol"] == null) ? "§cNull!" : $query["Protocol"]));
23-
$sender->sendMessage("§e>§f Version:§a " . (($query["Version"] == null) ? "§cNull!" : $query["Version"]));
24-
$sender->sendMessage("§e>§f Players:§a " . (($query["Players"] == null) ? "§cNull!" : $query["Players"]));
25-
$sender->sendMessage("§e>§f MaxPlayers:§a " . (($query["MaxPlayers"] == null) ? "§cNull!" : $query["MaxPlayers"]));
26-
$sender->sendMessage("§e>§f ServerId:§a " . (($query["ServerId"] == null) ? "§cNull!" : $query["ServerId"]));
27-
$sender->sendMessage("§e>§f Map:§a " . (($query["Map"] == null) ? "§cNull!" : $query["Map"]));
28-
$sender->sendMessage("§e>§f GameMode:§a " . (($query["GameMode"] == null) ? "§cNull!" : $query["GameMode"]));
29-
$sender->sendMessage("§e>§f NintendoLimited:§a " . (($query["NintendoLimited"] == null) ? "§cNull!" : $query["NintendoLimited"]));
30-
$sender->sendMessage("§e>§f IPv4Port:§a " . (($query["IPv4Port"] == null) ? "§cNull!" : $query["IPv4Port"]));
31-
$sender->sendMessage("§e>§f IPv6Port:§a " . (($query["IPv6Port"] == null) ? "§cNull!" : $query["IPv6Port"]));
32-
$sender->sendMessage("§e>§f Extra:§a " . (($query["Extra"] == null) ? "§cNull!" : $query["Extra"]));
33-
}
21+
public static function qrs($sender, $query): void {
22+
$keys = [
23+
"GameName" => "§e>§f GameName:§a ",
24+
"HostName" => "§e>§f HostName:§r ",
25+
"Protocol" => "§e>§f Protocol:§a ",
26+
"Version" => "§e>§f Version:§a ",
27+
"Players" => "§e>§f Players:§a ",
28+
"MaxPlayers" => "§e>§f MaxPlayers:§a ",
29+
"ServerId" => "§e>§f ServerId:§a ",
30+
"Map" => "§e>§f Map:§a ",
31+
"GameMode" => "§e>§f GameMode:§a ",
32+
"NintendoLimited" => "§e>§f NintendoLimited:§a ",
33+
"IPv4Port" => "§e>§f IPv4Port:§a ",
34+
"IPv6Port" => "§e>§f IPv6Port:§a ",
35+
"Extra" => "§e>§f Extra:§a "
36+
];
37+
38+
foreach ($keys as $key => $message) {
39+
$value = $query[$key];
40+
$output = ($value == null) ? "§cNull!" : $value;
41+
$sender->sendMessage($message . $output);
42+
}
43+
}
44+
45+
public static function logInfo($status): void {
46+
$sender = new ConsoleCommandSender(Server::getInstance(), Server::getInstance()->getLanguage());
47+
$serverInfo = $status->ip . ":" . $status->port;
48+
if ($status->online) {
49+
$sender->sendMessage("§e>§f Domain:§a " . str_replace(":", "§f:§a", $serverInfo));
50+
51+
$fields = [
52+
"ip" => "IP/Port",
53+
"debug->ping" => "Ping",
54+
"debug->query" => "Query",
55+
"debug->srv" => "SRV",
56+
"debug->querymismatch" => "QueryMisMatch",
57+
"debug->ipinsrv" => "IPInSRV",
58+
"debug->cnameinsrv" => "CNameInSRV",
59+
"debug->animatedmotd" => "AnimatedMotd",
60+
"debug->cachetime" => "CacheTime",
61+
"motd->clean" => "Motd",
62+
"players->online" => "Online",
63+
"players->max" => "Max",
64+
"players->list" => "Players",
65+
"players->uuid" => "UUIDS",
66+
"version" => "Version",
67+
"protocol" => "Protocol",
68+
"hostname" => "HostName",
69+
"icon" => "Icon",
70+
"software" => "SoftWare",
71+
"map" => "Map",
72+
"plugins->raw" => "Plugins",
73+
"mods->raw" => "Mods",
74+
"info->clean" => "Info"
75+
];
76+
77+
foreach ($fields as $field => $label) {
78+
try {
79+
$value = $status;
80+
foreach (explode("->", $field) as $key) {
81+
$value = $value->$key;
82+
}
83+
$output = ($value == null) ? "§cError or has blocked queries!" : $value;
84+
if(is_array($output)) {
85+
$output = implode("§f,§a ", $output);
86+
}
87+
$sender->sendMessage("§e>§f $label:§a " . $output);
88+
} catch (\Exception $e) {
89+
$sender->sendMessage("§e>§f $label:§c Error or has blocked queries!");
90+
}
91+
}
92+
93+
if (strrchr($serverInfo, ":")) {
94+
$sender->sendMessage("§e>§f Below is the fallback query method:");
95+
96+
try {
97+
$IP_Or_Domain_And_Port = explode(":", $serverInfo);
98+
$IP_Or_Domain = $IP_Or_Domain_And_Port[0];
99+
$Port = $IP_Or_Domain_And_Port[1];
100+
$query = PMQuery::query($IP_Or_Domain, (int)$Port);
101+
Main::qrs($sender, $query);
102+
} catch (PmQueryException $e) {
103+
$sender->sendMessage("§e>§c The server is offline or has blocked queries!");
104+
$sender->sendMessage("§e>§f Possible error:§c Your IP does not open the port or the device does not match!");
105+
}
106+
}
107+
} else {
108+
$sender->sendMessage("§e>§c The server is offline or has blocked queries!");
109+
$sender->sendMessage("§e>§c Try another query method using §b/querys");
110+
}
111+
}
34112

35113
public function onCommand(CommandSender $sender, Command $cmd, string $label, array $args): bool {
36114
if ($cmd->getName() == "query") {
@@ -40,164 +118,8 @@ public function onCommand(CommandSender $sender, Command $cmd, string $label, ar
40118
return true;
41119
}
42120
if (!$sender instanceof Player) {
43-
try {
44-
$status = json_decode(file_get_contents("https://api.mcsrvstat.us/2/" . $args[0]));
45-
} catch (\Exception $e) {
46-
$sender->sendMessage("§e>§f Error:§c Your IP does not open the port or the device does not match!");
47-
$sender->sendMessage("§e>§c Try another query method using §b/querys");
48-
return true;
49-
}
50-
if ($status->online == true) {
51-
$sender->sendMessage("§e>§f Domain:§a " . str_replace(":", "§f:§a", $args[0]));
52-
try {
53-
$sender->sendMessage("§e>§f IP/Port:§a " . $status->ip . "§f:§a" . $status->port);
54-
} catch (\Exception $e) {
55-
$sender->sendMessage("§e>§f IP/Port:§c Error or has blocked queries!");
56-
}
57-
try {
58-
$sender->sendMessage("§e>§f Ping:§a " . ($status->debug->ping ? "true" : "§cfalse"));
59-
} catch (\Exception $e) {
60-
$sender->sendMessage("§e>§f Ping:§c Error or has blocked queries!");
61-
}
62-
try {
63-
$sender->sendMessage("§e>§f Query:§a " . ($status->debug->query ? "true" : "§cfalse"));
64-
} catch (\Exception $e) {
65-
$sender->sendMessage("§e>§f Query:§c Error or has blocked queries!");
66-
}
67-
try {
68-
$sender->sendMessage("§e>§f SRV:§a " . ($status->debug->srv ? "true" : "§cfalse"));
69-
} catch (\Exception $e) {
70-
$sender->sendMessage("§e>§f SRV:§c Error or has blocked queries!");
71-
}
72-
try {
73-
$sender->sendMessage("§e>§f QueryMisMatch:§a " . ($status->debug->querymismatch ? "true" : "§cfalse"));
74-
} catch (\Exception $e) {
75-
$sender->sendMessage("§e>§f QueryMisMatch:§c Error or has blocked queries!");
76-
}
77-
try {
78-
$sender->sendMessage("§e>§f IPInSRV:§a " . ($status->debug->ipinsrv ? "true" : "§cfalse"));
79-
} catch (\Exception $e) {
80-
$sender->sendMessage("§e>§f IPInSRV:§c Error or has blocked queries!");
81-
}
82-
try {
83-
$sender->sendMessage("§e>§f CNameInSRV:§a " . ($status->debug->cnameinsrv ? "true" : "§cfalse"));
84-
} catch (\Exception $e) {
85-
$sender->sendMessage("§e>§f CNameInSRV:§c Error or has blocked queries!");
86-
}
87-
try {
88-
$sender->sendMessage("§e>§f AnimatedMotd:§a " . ($status->debug->animatedmotd ? "true" : "§cfalse"));
89-
} catch (\Exception $e) {
90-
$sender->sendMessage("§e>§f AnimatedMotd:§c Error or has blocked queries!");
91-
}
92-
try {
93-
$sender->sendMessage("§e>§f CacheTime:§a " . $status->debug->cachetime);
94-
} catch (\Exception $e) {
95-
$sender->sendMessage("§e>§f CacheTime:§c Error or has blocked queries!");
96-
}
97-
try {
98-
foreach ($status->motd->clean as $clean) {
99-
$sender->sendMessage("§e>§f Motd:§r " . $clean);
100-
}
101-
} catch (\Exception $e) {
102-
$sender->sendMessage("§e>§f Motd:§c Error or has blocked queries!");
103-
}
104-
try {
105-
$sender->sendMessage("§e>§f Online/Max:§a " . $status->players->online . "§f/§a" . $status->players->max);
106-
} catch (\Exception $e) {
107-
$sender->sendMessage("§e>§f Online/Max:§c Error or has blocked queries!");
108-
}
109-
try {
110-
$list = "§e>§f Players (" . count($players->list) . "): §a";
111-
foreach ($players->list as $lists) {
112-
$list .= $lists . "§f,§a ";
113-
}
114-
$sender->sendMessage($list);
115-
} catch (\Exception $e) {
116-
$sender->sendMessage("§e>§f Players:§c Error or has blocked queries!");
117-
}
118-
try {
119-
$uuid = "§e>§f UUIDS (" . count($players->uuid) . "): §a";
120-
foreach ($players->uuid as $uuids) {
121-
$uuid .= $uuids . "§f,§a ";
122-
}
123-
$sender->sendMessage($uuid);
124-
} catch (\Exception $e) {
125-
$sender->sendMessage("§e>§f UUIDS:§c Error or has blocked queries!");
126-
}
127-
try {
128-
$sender->sendMessage("§e>§f Version:§a " . (($status->version == null) ? "§cNull!" : $status->version));
129-
} catch (\Exception $e) {
130-
$sender->sendMessage("§e>§f Version:§c Error or has blocked queries!");
131-
}
132-
try {
133-
$sender->sendMessage("§e>§f protocol:§a " . $status->protocol);
134-
} catch (\Exception $e) {
135-
$sender->sendMessage("§e>§f Protocol:§c Error or has blocked queries!");
136-
}
137-
try {
138-
$sender->sendMessage("§e>§f HostName:§a " . $status->hostname);
139-
} catch (\Exception $e) {
140-
$sender->sendMessage("§e>§f HostName:§c Error or has blocked queries!");
141-
}
142-
try {
143-
$sender->sendMessage("§e>§f Icon:§a " . $status->icon);
144-
} catch (\Exception $e) {
145-
$sender->sendMessage("§e>§f Icon:§c Error or has blocked queries!");
146-
}
147-
try {
148-
$sender->sendMessage("§e>§f SoftWare:§a " . $status->software);
149-
} catch (\Exception $e) {
150-
$sender->sendMessage("§e>§f SoftWare:§c Error or has blocked queries!");
151-
}
152-
try {
153-
$sender->sendMessage("§e>§f Map:§a " . $status->map);
154-
} catch (\Exception $e) {
155-
$sender->sendMessage("§e>§f Map:§c Error or has blocked queries!");
156-
}
157-
try {
158-
$plugin = "§e>§f Plugins (" . count($status->plugins->raw) . "): §a";
159-
foreach ($status->plugins->raw as $raw) {
160-
$plugin .= str_replace(" ", " v", $raw) . "§f,§a ";
161-
}
162-
$sender->sendMessage($plugin);
163-
} catch (\Exception $e) {
164-
$sender->sendMessage("§e>§f Plugins:§c Error or has blocked queries!");
165-
}
166-
try {
167-
$mod = "§e>§f Mods (" . count($status->mods->raw) . "): §a";
168-
foreach ($status->mods->raw as $raw) {
169-
$mod .= $raw . "§f,§a ";
170-
}
171-
$sender->sendMessage($mod);
172-
} catch (\Exception $e) {
173-
$sender->sendMessage("§e>§f Mods:§c Error or has blocked queries!");
174-
}
175-
try {
176-
$info = "§e>§f Info (" . count($status->info->clean) . "): §a";
177-
foreach ($status->info->clean as $clean) {
178-
$info .= $clean . "§f,§a ";
179-
}
180-
$sender->sendMessage($info);
181-
} catch (\Exception $e) {
182-
$sender->sendMessage("§e>§f Info:§c Error or has blocked queries!");
183-
}
184-
if (strrchr($args[0], ":") == true) {
185-
$sender->sendMessage("§e>§f Below is the fallback query method:");
186-
try {
187-
$IP_Or_Domain_And_Port = explode(":", $args[0]);
188-
$IP_Or_Domain = $IP_Or_Domain_And_Port[0];
189-
$Port = $IP_Or_Domain_And_Port[1];
190-
$query = PMQuery::query($IP_Or_Domain, (int)$Port);
191-
$this->qrs($sender, $query);
192-
} catch (PmQueryException $e) {
193-
$sender->sendMessage("§e>§c The server is offline or has blocked queries!");
194-
$sender->sendMessage("§e>§f Possible error:§c Your IP does not open the port or the device does not match!");
195-
}
196-
}
197-
} else {
198-
$sender->sendMessage("§e>§c The server is offline or has blocked queries!");
199-
$sender->sendMessage("§e>§c Try another query method using §b/querys");
200-
}
121+
$this->getServer()->getAsyncPool()->submitTask(new QueryTask($args[0]));
122+
201123
} else {
202124
$sender->sendMessage("§e>§c Please use the command on the console!");
203125
}
@@ -222,7 +144,7 @@ public function onCommand(CommandSender $sender, Command $cmd, string $label, ar
222144
}
223145
try {
224146
$query = PMQuery::query($args[0], (int)$args[1]);
225-
$this->qrs($sender, $query);
147+
Main::qrs($sender, $query);
226148
} catch (PmQueryException $e) {
227149
$sender->sendMessage("§e>§c The server is offline or has blocked queries!");
228150
$sender->sendMessage("§e>§f Possible error:§c Your IP does not open the port or the device does not match!");

‎src/QueryTask.php‎

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace NhanAZ\QueryServer;
6+
7+
use pocketmine\scheduler\AsyncTask;
8+
use pocketmine\utils\Internet;
9+
10+
class QueryTask extends AsyncTask {
11+
12+
13+
public function __construct(
14+
private string $info
15+
){}
16+
17+
public function onRun() : void
18+
{
19+
try {
20+
$status = Internet::getURL("https://api.mcsrvstat.us/2/" . $this->info);
21+
} catch (\pocketmine\utils\InternetException $e) {
22+
var_dump("§e>§f Error:§c Your IP does not open the port or the device does not match!");
23+
var_dump("§e>§c Try another query method using §b/querys");
24+
}
25+
$status = json_decode($status->getBody());
26+
$this->setResult($status);
27+
}
28+
29+
public function onCompletion() : void
30+
{
31+
$result = $this->getResult();
32+
Main::logInfo($result);
33+
}
34+
}

0 commit comments

Comments
 (0)