ddbot.js-0374 4.4.0 → 4.4.2

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/README.md CHANGED
@@ -23,29 +23,28 @@ const ddbot = require('ddbot.js-0374');
23
23
  ```ts
24
24
  import * as ddbot from '../lib/index.js';
25
25
 
26
- const bot = new ddbot.Bot(/* identity, options, custom teeworlds */);
27
- // if no identity is provided, it will be default 'nameless tee' with default skin
28
-
29
- bot.on('connect', () => {
30
- console.log('Connected to server!');
31
- });
32
-
33
- bot.on('disconnect', () => {
34
- console.log('Disconnected from server!');
26
+ const bot = new ddbot.Bot(/* identity, options, custom teeworlds */);
27
+ // if no identity is provided, it will be default 'nameless tee' with default skin
28
+
29
+ bot.on('connect', () => {
30
+ console.log('Connected to server!');
31
+ });
32
+
33
+ bot.on('disconnect', () => {
34
+ console.log('Disconnected from server!');
35
+ });
36
+
37
+ (async () => {
38
+ await bot.connect('45.141.57.22', 8303, 20000); // IP, port, timeout (IP is of ddnet server)
39
+ bot.bot_client?.game.Say('DDNet!'); // from teeworlds
40
+ setTimeout(async () => {
41
+ await bot.disconnect();
42
+ process.exit(0);
43
+ }, 5000); // 5 sec
44
+ process.on('SIGINT', async () => { // on Ctrl+C
45
+ await bot.disconnect();
46
+ process.exit(0);
35
47
  });
36
-
37
- (async () => {
38
- await bot.connect('45.141.57.22', 8303, 20000); // IP, port, timeout (IP is of ddnet server)
39
- bot.bot_client?.game.Say('DDNet!'); // from teeworlds
40
- setTimeout(async () => {
41
- await bot.disconnect();
42
- process.exit(0);
43
- }, 5000); // 5 sec
44
-
45
- process.on('SIGINT', async () => { // on Ctrl+C
46
- await bot.disconnect();
47
- process.exit(0);
48
- });
49
48
  })();
50
49
  ```
51
50
 
@@ -3,6 +3,7 @@ import { EventEmitter } from 'events';
3
3
  import * as Types from '../types.js';
4
4
  interface BotEvents {
5
5
  error: (...args: any[]) => void;
6
+ destroy: () => void;
6
7
  connect: (info: Types.ConnectionInfo) => void;
7
8
  disconnect: (reason: string | null, info: Types.ConnectionInfo) => void;
8
9
  rawconnect: (info: Types.ConnectionInfo) => void;
package/lib/core/core.js CHANGED
@@ -36,17 +36,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.Bot = void 0;
37
37
  const Teeworlds = __importStar(require("teeworlds"));
38
38
  const events_1 = require("events");
39
- function DefaultIdentity(name = 'nameless tee') {
40
- return {
41
- name: name,
42
- clan: "",
43
- skin: "default",
44
- use_custom_color: 0,
45
- color_body: 0,
46
- color_feet: 0,
47
- country: 0
48
- };
49
- }
39
+ const ddutils_js_1 = require("../ddutils.js");
50
40
  class Bot extends events_1.EventEmitter {
51
41
  teeworlds;
52
42
  client = null;
@@ -71,7 +61,7 @@ class Bot extends events_1.EventEmitter {
71
61
  super();
72
62
  this.teeworlds = CustomTeeworlds;
73
63
  this.options = options;
74
- this.identity = identity ? identity : DefaultIdentity('nameless tee');
64
+ this.identity = identity ? identity : (0, ddutils_js_1.DefaultIdentity)('nameless tee');
75
65
  }
76
66
  error(...err) {
77
67
  //console.error(err);
@@ -206,7 +196,7 @@ class Bot extends events_1.EventEmitter {
206
196
  this.identity =
207
197
  typeof identity === 'object' && identity !== null
208
198
  ? { ...this.identity, ...identity }
209
- : DefaultIdentity(this.identity.name);
199
+ : (0, ddutils_js_1.DefaultIdentity)(this.identity.name);
210
200
  if (this.client && this.status.connect.connected) {
211
201
  this.client.game.ChangePlayerInfo(this.identity);
212
202
  }
@@ -320,6 +310,7 @@ class Bot extends events_1.EventEmitter {
320
310
  await this.disconnect();
321
311
  this.removeAllListeners();
322
312
  this._clientProxy = null;
313
+ this.emit('destroy');
323
314
  }
324
315
  on(event, listener) {
325
316
  return super.on(event, listener);
@@ -18,6 +18,7 @@ class BaseModule extends events_1.EventEmitter {
18
18
  if (options.offonDisconnect !== false) {
19
19
  this.bot.on('disconnect', this._onDisconnect);
20
20
  }
21
+ this.bot.on('destroy', () => this.destroy());
21
22
  }
22
23
  /**
23
24
  * Запускает модуль, если он ещё не запущен
@@ -8,6 +8,22 @@ interface PlayerData {
8
8
  character: Types.SnapshotItemTypes.Character | null;
9
9
  DDNetCharacter: Types.SnapshotItemTypes.DDNetCharacter | null;
10
10
  }
11
+ interface PlayerJoinedInfo {
12
+ client_id: number;
13
+ name: string;
14
+ playerData: PlayerData;
15
+ }
16
+ interface PlayerLeftInfo {
17
+ client_id: number;
18
+ name: string;
19
+ playerData: PlayerData;
20
+ }
21
+ interface PlayerListEvents {
22
+ /** Игрок появился в снапшоте (зашёл на сервер) */
23
+ player_joined: (info: PlayerJoinedInfo) => void;
24
+ /** Игрок пропал из снапшота (вышел с сервера) */
25
+ player_left: (info: PlayerLeftInfo) => void;
26
+ }
11
27
  declare class PlayerList extends BaseModule<[maxclients?: number]> {
12
28
  constructor(bot: Bot);
13
29
  private client;
@@ -29,5 +45,9 @@ declare class PlayerList extends BaseModule<[maxclients?: number]> {
29
45
  getPlayerCount(): number;
30
46
  protected _start(maxclients?: number): void;
31
47
  protected _stop(): void;
48
+ on<K extends keyof PlayerListEvents>(event: K, listener: PlayerListEvents[K]): this;
49
+ once<K extends keyof PlayerListEvents>(event: K, listener: PlayerListEvents[K]): this;
50
+ emit<K extends keyof PlayerListEvents>(event: K, ...args: Parameters<PlayerListEvents[K]>): boolean;
51
+ off<K extends keyof PlayerListEvents>(event: K, listener: PlayerListEvents[K]): this;
32
52
  }
33
53
  export default PlayerList;
@@ -79,5 +79,17 @@ class PlayerList extends module_js_1.default {
79
79
  this.playermap.clear();
80
80
  this.previousMap.clear();
81
81
  }
82
+ on(event, listener) {
83
+ return super.on(event, listener);
84
+ }
85
+ once(event, listener) {
86
+ return super.once(event, listener);
87
+ }
88
+ emit(event, ...args) {
89
+ return super.emit(event, ...args);
90
+ }
91
+ off(event, listener) {
92
+ return super.off(event, listener);
93
+ }
82
94
  }
83
95
  exports.default = PlayerList;
@@ -7,6 +7,17 @@ export interface ReconnectingInfo {
7
7
  reason: string | null;
8
8
  ConnectionInfo: Types.ConnectionInfo;
9
9
  }
10
+ interface ReconnectEvents {
11
+ /** Начинается попытка переподключения */
12
+ reconnecting: (info: ReconnectingInfo) => void;
13
+ /** Успешно переподключились */
14
+ reconnected: (info: {
15
+ addr: string;
16
+ port: number;
17
+ }) => void;
18
+ /** Переподключение не удалось (исчерпаны попытки или нет данных о сервере) */
19
+ reconnect_failed: (reason: string | number | unknown) => void;
20
+ }
10
21
  declare class Reconnect extends BaseModule<[maxAttempts?: number, randomDelay?: boolean]> {
11
22
  private maxAttempts;
12
23
  private randomDelay;
@@ -18,5 +29,9 @@ declare class Reconnect extends BaseModule<[maxAttempts?: number, randomDelay?:
18
29
  private handleDisconnect;
19
30
  private calculateDelay;
20
31
  protected _stop(): void;
32
+ on<K extends keyof ReconnectEvents>(event: K, listener: ReconnectEvents[K]): this;
33
+ once<K extends keyof ReconnectEvents>(event: K, listener: ReconnectEvents[K]): this;
34
+ emit<K extends keyof ReconnectEvents>(event: K, ...args: Parameters<ReconnectEvents[K]>): boolean;
35
+ off<K extends keyof ReconnectEvents>(event: K, listener: ReconnectEvents[K]): this;
21
36
  }
22
37
  export default Reconnect;
@@ -72,7 +72,7 @@ class Reconnect extends module_js_1.default {
72
72
  baseDelay = 500;
73
73
  }
74
74
  if (this.randomDelay) {
75
- return baseDelay + Math.random() * 1000;
75
+ return baseDelay + Math.random() * 5000;
76
76
  }
77
77
  return baseDelay;
78
78
  }
@@ -85,5 +85,17 @@ class Reconnect extends module_js_1.default {
85
85
  this.reconnectTimer = null;
86
86
  }
87
87
  }
88
+ on(event, listener) {
89
+ return super.on(event, listener);
90
+ }
91
+ once(event, listener) {
92
+ return super.once(event, listener);
93
+ }
94
+ emit(event, ...args) {
95
+ return super.emit(event, ...args);
96
+ }
97
+ off(event, listener) {
98
+ return super.off(event, listener);
99
+ }
88
100
  }
89
101
  exports.default = Reconnect;
@@ -1,6 +1,28 @@
1
1
  import BaseModule from '../core/module.js';
2
2
  import type { Bot } from '../core/core.js';
3
3
  import * as Types from '../types.js';
4
+ interface HammerHit {
5
+ common: {
6
+ x: number;
7
+ y: number;
8
+ };
9
+ [key: string]: any;
10
+ }
11
+ interface SnapEvents {
12
+ /** Бота ударили молотком (hammer hit попал в тайл персонажа) */
13
+ hammerhitme: (hit: HammerHit, attackerId: number | null) => void;
14
+ /** Кто-то выстрелил рядом (sound_id === 0) */
15
+ fire: (common: {
16
+ common: {
17
+ x: number;
18
+ y: number;
19
+ };
20
+ }, nearestClient: number | null) => void;
21
+ /** Персонаж заморожен */
22
+ frozen: () => void;
23
+ /** Персонаж разморожен */
24
+ unfrozen: () => void;
25
+ }
4
26
  declare class Snap extends BaseModule {
5
27
  private _isFrozen;
6
28
  private readonly hammerHitlistener;
@@ -16,5 +38,9 @@ declare class Snap extends BaseModule {
16
38
  get isFrozen(): boolean;
17
39
  protected _start(): void;
18
40
  protected _stop(): void;
41
+ on<K extends keyof SnapEvents>(event: K, listener: SnapEvents[K]): this;
42
+ once<K extends keyof SnapEvents>(event: K, listener: SnapEvents[K]): this;
43
+ emit<K extends keyof SnapEvents>(event: K, ...args: Parameters<SnapEvents[K]>): boolean;
44
+ off<K extends keyof SnapEvents>(event: K, listener: SnapEvents[K]): this;
19
45
  }
20
46
  export default Snap;
@@ -82,5 +82,17 @@ class Snap extends module_js_1.default {
82
82
  this.bot.off('hammerhit', this.hammerHitlistener);
83
83
  this.bot.off('sound_world', this.firelistener);
84
84
  }
85
+ on(event, listener) {
86
+ return super.on(event, listener);
87
+ }
88
+ once(event, listener) {
89
+ return super.once(event, listener);
90
+ }
91
+ emit(event, ...args) {
92
+ return super.emit(event, ...args);
93
+ }
94
+ off(event, listener) {
95
+ return super.off(event, listener);
96
+ }
85
97
  }
86
98
  exports.default = Snap;
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "teeworlds": "^2.5.11"
4
4
  },
5
5
  "name": "ddbot.js-0374",
6
- "version": "4.4.0",
6
+ "version": "4.4.2",
7
7
  "description": "ddbot.js — это Node.js проект для автоматизации и управления ботами.",
8
8
  "main": "./lib/index.js",
9
9
  "scripts": {