ddmaster 3.1.7 → 3.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/bin.js +22 -18
- package/lib/serverlist.d.ts +39 -1
- package/lib/serverlist.js +15 -22
- package/package.json +1 -1
package/lib/bin.js
CHANGED
|
@@ -1,45 +1,49 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
const
|
|
4
|
+
const serverlist_js_1 = require("./serverlist.js");
|
|
5
5
|
const [command, ...args] = process.argv.slice(2);
|
|
6
|
-
if (command ===
|
|
7
|
-
|
|
6
|
+
if (command === 'find') {
|
|
7
|
+
(0, serverlist_js_1.findDDNetPlayerByName)(args.join(' ')).then(async (servers) => {
|
|
8
8
|
if (servers.length === 0) {
|
|
9
|
-
console.log(
|
|
9
|
+
console.log('Player not found on any server.');
|
|
10
10
|
return;
|
|
11
11
|
}
|
|
12
12
|
console.log(`Count of servers: ${servers.length}`);
|
|
13
|
-
console.log((await
|
|
13
|
+
console.log((await (0, serverlist_js_1.getDDNetServers)({ servers })).join('\n'));
|
|
14
14
|
}).catch((err) => {
|
|
15
15
|
console.error('Error:', err);
|
|
16
16
|
});
|
|
17
17
|
}
|
|
18
|
-
else if (command ===
|
|
19
|
-
|
|
20
|
-
console.log(servers.join(
|
|
18
|
+
else if (command === 'list') {
|
|
19
|
+
(0, serverlist_js_1.getDDNetServers)().then((servers) => {
|
|
20
|
+
console.log(servers.join('\n'));
|
|
21
21
|
}).catch((err) => {
|
|
22
22
|
console.error('Error:', err);
|
|
23
23
|
});
|
|
24
24
|
}
|
|
25
|
-
else if (command ===
|
|
26
|
-
|
|
27
|
-
console.log(JSON.stringify(
|
|
25
|
+
else if (command === 'raw') {
|
|
26
|
+
(0, serverlist_js_1.getrawDDNetServers)().then((data) => {
|
|
27
|
+
console.log(JSON.stringify(data, null, 2));
|
|
28
28
|
}).catch((err) => {
|
|
29
29
|
console.error('Error:', err);
|
|
30
30
|
});
|
|
31
31
|
}
|
|
32
|
-
else if (command ===
|
|
33
|
-
|
|
32
|
+
else if (command === 'info') {
|
|
33
|
+
(0, serverlist_js_1.getinfoserver)(args[0]).then((server) => {
|
|
34
|
+
if (!server) {
|
|
35
|
+
console.log('Server not found.');
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
34
38
|
console.log(JSON.stringify(server, null, 2));
|
|
35
39
|
}).catch((err) => {
|
|
36
40
|
console.error('Error:', err);
|
|
37
41
|
});
|
|
38
42
|
}
|
|
39
43
|
else {
|
|
40
|
-
console.log(
|
|
41
|
-
console.log(
|
|
42
|
-
console.log(
|
|
43
|
-
console.log(
|
|
44
|
-
console.log(
|
|
44
|
+
console.log('Usage:');
|
|
45
|
+
console.log(' find <playerName> - Найти сервера с игроком');
|
|
46
|
+
console.log(' list - Получить список всех серверов');
|
|
47
|
+
console.log(' raw - Получить сырые данные серверов');
|
|
48
|
+
console.log(' info <address> - Получить информацию о сервере по адресу');
|
|
45
49
|
}
|
package/lib/serverlist.d.ts
CHANGED
|
@@ -1 +1,39 @@
|
|
|
1
|
-
|
|
1
|
+
import type { DDNetServer } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Делает запрос на мастер сервер ДДНета.
|
|
4
|
+
* @returns Сервера ДДНета но в сыром виде.
|
|
5
|
+
*/
|
|
6
|
+
export declare function getrawDDNetServers(): Promise<{
|
|
7
|
+
servers: DDNetServer[];
|
|
8
|
+
} | null>;
|
|
9
|
+
/**
|
|
10
|
+
*
|
|
11
|
+
* @param {string} addr - берёт примерно такое "tw-0.7+udp://152.89.254.27:8310"
|
|
12
|
+
* @returns {string|null} 152.89.254.27:8310 возвращает чистый адрес (если addr не валидный то null)
|
|
13
|
+
*/
|
|
14
|
+
export declare function convertudptw(addr: string): string | null;
|
|
15
|
+
/**
|
|
16
|
+
* Делает запрос на мастер сервер ДДНета.
|
|
17
|
+
* @param {Object|null} data - опционально, сырая data от getrawDDNetServers(). Если не передана, функция сама её получит.
|
|
18
|
+
* @returns Сервера ДДНета если все пошло хорошо. ['ip:port']
|
|
19
|
+
*/
|
|
20
|
+
export declare function getDDNetServers(data?: {
|
|
21
|
+
servers: DDNetServer[];
|
|
22
|
+
} | null): Promise<string[]>;
|
|
23
|
+
/**
|
|
24
|
+
* Ищет игрока по имени на всех серверах ДДНета.
|
|
25
|
+
* Возвращает ПОЛНУЮ инфу о серверах (как getrawDDNetServers),
|
|
26
|
+
* но только те сервера, где есть игрок с таким именем.
|
|
27
|
+
*
|
|
28
|
+
* @param {string} playerName - имя игрока, ищется строго через ===
|
|
29
|
+
* @param {Object|null} data - опционально, сырая data от getrawDDNetServers().
|
|
30
|
+
* @returns {Promise<Array>} Массив серверов (как в getrawDDNetServers().servers),
|
|
31
|
+
* на которых найден игрок.
|
|
32
|
+
*/
|
|
33
|
+
export declare function findDDNetPlayerByName(playerName: string, data?: {
|
|
34
|
+
servers: DDNetServer[];
|
|
35
|
+
} | null): Promise<DDNetServer[]>;
|
|
36
|
+
export declare function filterbycommunity(servers: DDNetServer[], community: string): DDNetServer[];
|
|
37
|
+
export declare function filterbylocation(servers: DDNetServer[], location: string): DDNetServer[];
|
|
38
|
+
export declare function filterbylocationincludes(servers: DDNetServer[], location: string): DDNetServer[];
|
|
39
|
+
export declare function getinfoserver(address: string): Promise<DDNetServer | undefined>;
|
package/lib/serverlist.js
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
// 0374flop MIT
|
|
2
3
|
// npm i ddmaster
|
|
3
|
-
"use strict";
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
global.fetch = nodeFetch.default || nodeFetch;
|
|
14
|
-
}
|
|
5
|
+
exports.getrawDDNetServers = getrawDDNetServers;
|
|
6
|
+
exports.convertudptw = convertudptw;
|
|
7
|
+
exports.getDDNetServers = getDDNetServers;
|
|
8
|
+
exports.findDDNetPlayerByName = findDDNetPlayerByName;
|
|
9
|
+
exports.filterbycommunity = filterbycommunity;
|
|
10
|
+
exports.filterbylocation = filterbylocation;
|
|
11
|
+
exports.filterbylocationincludes = filterbylocationincludes;
|
|
12
|
+
exports.getinfoserver = getinfoserver;
|
|
15
13
|
/**
|
|
16
14
|
* Делает запрос на мастер сервер ДДНета.
|
|
17
15
|
* @returns Сервера ДДНета но в сыром виде.
|
|
@@ -47,10 +45,9 @@ function convertudptw(addr) {
|
|
|
47
45
|
*/
|
|
48
46
|
async function getDDNetServers(data = null) {
|
|
49
47
|
try {
|
|
50
|
-
const servers = data
|
|
51
|
-
if (!servers)
|
|
48
|
+
const servers = data?.servers ?? (await getrawDDNetServers())?.servers;
|
|
49
|
+
if (!servers)
|
|
52
50
|
return [];
|
|
53
|
-
}
|
|
54
51
|
const ipv4WithPorts = [];
|
|
55
52
|
for (const server of servers) {
|
|
56
53
|
server.addresses.forEach((addr) => {
|
|
@@ -82,19 +79,17 @@ async function findDDNetPlayerByName(playerName, data = null) {
|
|
|
82
79
|
throw new TypeError('playerName должен быть строкой');
|
|
83
80
|
}
|
|
84
81
|
try {
|
|
85
|
-
const raw = data
|
|
86
|
-
if (!raw || !Array.isArray(raw.servers))
|
|
82
|
+
const raw = data ?? await getrawDDNetServers();
|
|
83
|
+
if (!raw || !Array.isArray(raw.servers))
|
|
87
84
|
return [];
|
|
88
|
-
}
|
|
89
85
|
const resultServers = [];
|
|
90
86
|
for (const server of raw.servers) {
|
|
91
87
|
const info = server.info;
|
|
92
88
|
if (!info || !Array.isArray(info.clients))
|
|
93
89
|
continue;
|
|
94
90
|
const hasPlayer = info.clients.some((client) => client.name === playerName);
|
|
95
|
-
if (hasPlayer)
|
|
91
|
+
if (hasPlayer)
|
|
96
92
|
resultServers.push(server);
|
|
97
|
-
}
|
|
98
93
|
}
|
|
99
94
|
return resultServers;
|
|
100
95
|
}
|
|
@@ -114,11 +109,9 @@ function filterbylocationincludes(servers, location) {
|
|
|
114
109
|
}
|
|
115
110
|
async function getinfoserver(address) {
|
|
116
111
|
const servers = await getrawDDNetServers();
|
|
117
|
-
|
|
112
|
+
return servers?.servers.find((server) => {
|
|
118
113
|
if (!server.addresses || server.addresses.length === 0)
|
|
119
114
|
return false;
|
|
120
115
|
return convertudptw(server.addresses[0]) === address;
|
|
121
116
|
});
|
|
122
|
-
return server;
|
|
123
117
|
}
|
|
124
|
-
module.exports = { getDDNetServers, getrawDDNetServers, convertudptw, findDDNetPlayerByName, filterbycommunity, filterbylocation, filterbylocationincludes, getinfoserver };
|