Skip to content

Commit

Permalink
* Change version to 1.2.x
Browse files Browse the repository at this point in the history
* Added getServers method
* Added ip & port fields for getServerInfo respose
* Updated Readme & Examples
* Update .npmignore
* Added action for install Bun and check TSC
  • Loading branch information
salwador committed Jul 11, 2024
1 parent ec03396 commit 2749e60
Show file tree
Hide file tree
Showing 17 changed files with 318 additions and 50 deletions.
27 changes: 27 additions & 0 deletions .github/workflows/tscheck.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: "TypeScript Compilation Checking"

on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:

jobs:
start:
name: Start
runs-on: ubuntu-20.04
steps:
- name: Basic (1/1) - Checkout Project
uses: actions/checkout@v4

- name: Bun (1/2) - Installing
uses: oven-sh/setup-bun@v2
with:
bun-version: latest

- name: Bun (2/2) - Modules Installing
run: bun install

- name: Build (1/1) - TypeScript Compilation
run: bun run build
4 changes: 3 additions & 1 deletion .npmignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
/src/**/*.ts
/src/example/**
/dist/example/**
tsconfig.json
tsconfig.json
.github/**
133 changes: 97 additions & 36 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,14 @@
Library for send requests to [Multi Theft Auto: San Andreas](https://mtasa.com) servers and get basic info.<br>
Working around ASE protocol ([EYE1](https://github.com/multitheftauto/mtasa-blue/blob/615b9b67c89fb3448f1e7c284146ee0800a3215e/Server/mods/deathmatch/logic/ASE.cpp#L236)).

Also, possible request all servers info with "partially" fields from [those API](https://mtasa.com/api).

```ts
// These objects is returned by getServerInfo()
interface MTAServerResponse {
name: string;
ip: string;
port: number;
gamemode: string;
map: string;
version: string;
Expand All @@ -22,6 +27,17 @@ interface MTAServerResponse {
score: number;
}[]
}

// These objects is returned by getServers()
interface MTAServerResponseLite {
name: string;
ip: string;
port: number;
version: string;
private: boolean;
players: number;
max_players: number;
}
```

**[What is a "Rules"?](https://wiki.multitheftauto.com/wiki/SetRuleValue)** (MTA:SA Wiki)<br>
Expand All @@ -32,6 +48,22 @@ interface MTAServerResponse {
npm install @bsnext/mta-ase-query
```

## API:
```ts
getServerInfo(
serverAdress: string, serverPort: number = 22003, requestTimeout: number = 7500
): Promise<MTAServerResponse>;

// serverAdress - Server adress, can be IP or Domain.
// serverPort - Server port, 22003 by default.
// requestTimeout - Timeout for close long-time requests.
```

```ts
getServers(): Promise<MTAServerResponseLite>;
```

## Usage:
```ts
import { getServerInfo } from "@bsnext/mta-ase-query";
const serverInfo = await getServerInfo(`lime.dayzmta.ru`, 22003);
Expand All @@ -53,55 +85,84 @@ serverInfo = {
*/
```

## Usage:
```ts
getServerInfo(
serverAdress: string, serverPort: number = 22003, requestTimeout: number = 7500
): Promise<MTAServerResponse>;
```
import { getServers } from "@bsnext/mta-ase-query";
const allServersInfo = await getServers();

* **serverAdress** - Server adress, can be IP or Domain.
* **serverPort** - Server port, 22003 by default.
* **requestTimeout** - Timeout for close long-time requests.
/*
allServersInfo = [
...,
{
name: '██ #3 | RU █ [BS] DAYZ ULTIMATE: LIME █ PVP, EASY, LOOT X3',
version: '1.6',
private: false,
players: 4,
max_players: 80,
},
{
name: '██ #4 | EU █ [BS] DAYZ ULTIMATE: MINT █ PVP, EASY, LOOT X3',
version: '1.6',
private: false,
players: 16,
max_players: 80,
},
...
]
*/
```

## Example:
**Basic example of request.**
```ts
void async function test() {
const result: MTAServerResponse | false = await getServerInfo(`lime.dayzmta.ru`, 22003);
const result: MTAServerResponse = await getServerInfo(`lime.dayzmta.ru`, 22003);

console.log(result);
console.log(`Server Name: ${result.name}`);
console.log(`Gamemode: ${result.gamemode}`);
console.log(`Map: ${result.map}`);
console.log(`Version: ${result.version}`);
console.log(`Is Passworded: ${result.private ? `Yes` : `No`}`);
console.log(`Players: ${result.players}/${result.max_players}`);

console.log(`Server Name: ${result.name}`);
console.log(`Gamemode: ${result.gamemode}`);
console.log(`Map: ${result.map}`);
console.log(`Version: ${result.version}`);
console.log(`Is Passworded: ${result.private ? `Yes` : `No`}`);
console.log(`Players: ${result.players}/${result.max_players}`);

if (result.rules.length > 0) {
console.log(`Rules:`);
for (const rule of result.rules) {
console.log(`- ${rule.name}: ${rule.value}`);
}
if (result.rules.length > 0) {
console.log(`Rules:`);
for (const rule of result.rules) {
console.log(`- ${rule.name}: ${rule.value}`);
}
}

if (result.players_list.length > 0) {
console.log(`Players List:`);
for (const player of result.players_list) {
console.log(`- ${player.name}: ${player.score} (${player.ping} ms)`);
}
if (result.players_list.length > 0) {
console.log(`Players List:`);
for (const player of result.players_list) {
console.log(`- ${player.name}: ${player.score} (${player.ping} ms)`);
}
}();
}
```

**Catch the request error.**
```ts
void async function main() {
try {
const result: MTAServerResponse = await getServerInfo(`not-existed-server.dayzmta.ru`, 22003);
console.log(`Server Name: ${result.name}`);
} catch(e) {
console.error(e);
try {
const result: MTAServerResponse = await getServerInfo(`not-existed-server.dayzmta.ru`, 22003);
console.log(`Server Name: ${result.name}`);
} catch(e) {
console.error(e);
}
```

**Request all servers info, and filter by name.**
```ts
const result: MTAServerResponseLite[] = await getServers();

const filteredResult = result.filter(
function (value) {
return value.name.search(`DAYZ ULTIMATE`) > -1;
}
}();
);

for (const serverInfo of filteredResult) {
console.log(`----------------`);
console.log(`Server Name: ${serverInfo.name}`);
console.log(`Version: ${serverInfo.version}`);
console.log(`Is Passworded: ${serverInfo.private ? `Yes` : `No`}`);
console.log(`Players: ${serverInfo.players}/${serverInfo.max_players}`);
}
```
File renamed without changes.
2 changes: 1 addition & 1 deletion dist/example/index.js → dist/example/getServerInfo.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions dist/example/getServerInfo.js.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions dist/example/getServers.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export {};
17 changes: 17 additions & 0 deletions dist/example/getServers.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions dist/example/getServers.js.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion dist/example/index.js.map

This file was deleted.

18 changes: 15 additions & 3 deletions dist/index.d.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
export declare interface MTAServerResponse {
export interface MTAServerResponse {
name: string;
ip: string;
port: number;
gamemode: string;
map: string;
version: string;
Expand All @@ -9,13 +11,23 @@ export declare interface MTAServerResponse {
rules: MTAServerResponseRule[];
players_list: MTAServerResponsePlayer[];
}
export declare interface MTAServerResponseRule {
export interface MTAServerResponseLite {
name: string;
ip: string;
port: number;
version: string;
private: boolean;
players: number;
max_players: number;
}
export interface MTAServerResponseRule {
name: string;
value: string;
}
export declare interface MTAServerResponsePlayer {
export interface MTAServerResponsePlayer {
name: string;
ping: number;
score: number;
}
export declare function getServerInfo(ip: string, port: number, timeout?: number): Promise<MTAServerResponse>;
export declare function getServers(): Promise<MTAServerResponseLite[]>;
45 changes: 44 additions & 1 deletion dist/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 2749e60

Please sign in to comment.