ddbot.js-0374 1.0.8 → 2.0.0
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 +5 -121
- package/ddbot.js-0374.d.ts +2 -118
- package/docs/documentation.md +1 -183
- package/docs/examples/chat.js +87 -0
- package/docs/examples/echo-bot.js +2 -1
- package/docs/examples/main.js +3 -2
- package/index.js +1 -4
- package/package.json +2 -1
- package/src/bot/bot.js +1 -1
- package/src/debug.js +0 -108
- package/src/map/automaploader.js +0 -60
- package/src/map/maploader.js +0 -135
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
Смотрите за руками
|
|
2
2
|
|
|
3
|
+
Создатель такой никто под именем 0374flop
|
|
4
|
+
|
|
3
5
|
Скажу прямо.
|
|
4
6
|
Коментари с нецензурной лексикой и тут и в коде только потому что я за то чтобы цензура стала слабее. Мне не нравиться что везде слишком сильная цензура.
|
|
5
7
|
Так что да, не плакайте там.
|
|
@@ -14,22 +16,7 @@
|
|
|
14
16
|
Работает с дебагером.
|
|
15
17
|
Емитит кастомные емиты
|
|
16
18
|
и там всякое которое мне лень разказывать
|
|
17
|
-
2.
|
|
18
|
-
Думаю, нужно было начинать с него.
|
|
19
|
-
Ета хуйня дает кучу возможностей для дебагинга
|
|
20
|
-
например можно менять режим дебажинга, типа консольный лог или дебаг
|
|
21
|
-
зделан в виде класса самый лутший по моему мнению ЖСДок из всех остальных файлов тут.
|
|
22
|
-
зделан даже тест если запущен как node debug.js
|
|
23
|
-
3. maploader.js
|
|
24
|
-
Первая вещь которая позволяет загружать карты дднет напрямую с дднет сайта. а точнее гита на котором лежат карты, как я выяснил.
|
|
25
|
-
можно получать тип карты, загружать и автоматически понимать какой тип у карты и по нему загружать.
|
|
26
|
-
есть возможность получать сырые функции в advanced. ето просто чтобы можно было напрямую все делать.
|
|
27
|
-
в нем же есть и объект дебагера.
|
|
28
|
-
4. automaploader.js
|
|
29
|
-
изпользует bot.js чтобы автоматически загружать карту через maploader.js когда он подключиться к серверу.
|
|
30
|
-
Выгружает свой дебаг логер.
|
|
31
|
-
также с кастомным емитером.
|
|
32
|
-
5. index'ы.js
|
|
19
|
+
2. index'ы.js
|
|
33
20
|
просто вещи чтобы проще было.
|
|
34
21
|
что про них сказать?
|
|
35
22
|
подключают из других файлов все, и выгружают все в один объект.
|
|
@@ -38,7 +25,7 @@
|
|
|
38
25
|
Так как я только что первый раз зделал нпм пакет то теперь его можно поставить как пакет
|
|
39
26
|
Вот так `npm i ddbot.js-0374`
|
|
40
27
|
Делаем require('ddbot.js-0374')
|
|
41
|
-
И все после етого вам доступно все ето : { bot,
|
|
28
|
+
И все после етого вам доступно все ето : { bot, botClassAndLoger }.
|
|
42
29
|
Наслаждайтесь етом дерьмом.
|
|
43
30
|
|
|
44
31
|
## Техническая документация.
|
|
@@ -102,107 +89,4 @@ neiky-ddracebot.js
|
|
|
102
89
|
15. bot.getPlayerName()
|
|
103
90
|
1. Принимает уникальное имя бота/Array список игроков.
|
|
104
91
|
2. clientid нужного игрока.
|
|
105
|
-
- Имя нужного игрока.
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
### maploader
|
|
109
|
-
Возможно первая вещь которая может загружать карты по официальным названиям ДДНета.
|
|
110
|
-
|
|
111
|
-
#### Самые нужные
|
|
112
|
-
fetchMapType и loadMap.
|
|
113
|
-
|
|
114
|
-
1. fetchMapType
|
|
115
|
-
Получает тип карты с ddnet.org
|
|
116
|
-
1. mapName - Имя карты.
|
|
117
|
-
- Тип карты (novice тд.).
|
|
118
|
-
2. loadMap
|
|
119
|
-
Загружает карту по нужному имени в нужную директорию.
|
|
120
|
-
1. mapName - Имя карты.
|
|
121
|
-
2. MAP_DIR - Директория куда будет загружена карта.
|
|
122
|
-
- Возвращает булевое значение.
|
|
123
|
-
|
|
124
|
-
#### Дополнитильные или сырые функции
|
|
125
|
-
Находиться в advanced
|
|
126
|
-
Тут есть сырой downloadMap, tryDownloadMap, logDebuger.
|
|
127
|
-
|
|
128
|
-
1. downloadMap
|
|
129
|
-
Загрузка карты по имени и типу.
|
|
130
|
-
Нет никакого протекшена почти.
|
|
131
|
-
1. mapName - Имя карты
|
|
132
|
-
2. type - Тип карты
|
|
133
|
-
3. MAP_DIR_DM - Папка для загрузки карты
|
|
134
|
-
- Путь к загруженной карте
|
|
135
|
-
2. tryDownloadMap
|
|
136
|
-
Принимает все тоже что и downloadMap, только оборачивает его в try.
|
|
137
|
-
- Возвращает болевое значение.
|
|
138
|
-
|
|
139
|
-
logDebuger из debug.js
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
### automaploader.js
|
|
143
|
-
Хуйня.
|
|
144
|
-
Не работает не с официальными ДДНет серверами, потому что они уже дают нам mapDetails.map_url а automaploader загружает по имени.
|
|
145
|
-
Мне лень переделывать его. пусть будет.
|
|
146
|
-
|
|
147
|
-
Если хотите понять как им пользоваться, лутше сами посмотрите его. он очень простой и маленький.
|
|
148
|
-
|
|
149
|
-
### debug.js / DebugLogger
|
|
150
|
-
Главный логер для отладки. Позволяет гибко настраивать вывод отладочной информации с поддержкой цветного текста через chalk.
|
|
151
|
-
|
|
152
|
-
#### Конструктор
|
|
153
|
-
```
|
|
154
|
-
new DebugLogger(prefix, isDebug, islog, prefixforprefix, chalk)
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
Параметры:
|
|
158
|
-
1. **prefix** (string) - Префикс для всех отладочных сообщений. По умолчанию "null".
|
|
159
|
-
2. **isDebug** (boolean) - Включен ли режим отладки. По умолчанию false.
|
|
160
|
-
3. **islog** (boolean) - Использовать console.log вместо console.debug. По умолчанию true.
|
|
161
|
-
4. **prefixforprefix** (Array) - Массив из двух элементов [начало, конец] для оформления префикса. По умолчанию ['[', ']'].
|
|
162
|
-
5. **chalk** (boolean) - Использовать ли цветной текст. По умолчанию true (если chalk установлен).
|
|
163
|
-
|
|
164
|
-
#### Методы
|
|
165
|
-
|
|
166
|
-
1. **logDebug(...args)**
|
|
167
|
-
Выводит отладочное сообщение с префиксом, если режим отладки включен.
|
|
168
|
-
- Аргументы: любые данные для логирования
|
|
169
|
-
- Возвращает: ничего
|
|
170
|
-
- Формат вывода: [префикс] сообщение (с цветами если включен chalk)
|
|
171
|
-
|
|
172
|
-
2. **setDebugMode(debugMode, useLog, chalk)**
|
|
173
|
-
Изменяет режим отладки и способ вывода.
|
|
174
|
-
1. debugMode (boolean) - Включить или выключить режим отладки
|
|
175
|
-
2. useLog (boolean) - Использовать console.log (true) или console.debug (false). По умолчанию true.
|
|
176
|
-
3. chalk (boolean) - Использовать цветной текст. По умолчанию текущее значение this.chalk
|
|
177
|
-
- Возвращает: ничего
|
|
178
|
-
|
|
179
|
-
#### Пример использования
|
|
180
|
-
```javascript
|
|
181
|
-
const DebugLogger = require('ddbot.js-0374').DebugLogger;
|
|
182
|
-
|
|
183
|
-
// Создаем логер с префиксом 'MyBot', включаем отладку, используем console.log и цветной текст
|
|
184
|
-
const logger = new DebugLogger('MyBot', true, true, ['[', ']'], true);
|
|
185
|
-
|
|
186
|
-
// Выводим сообщение
|
|
187
|
-
logger.logDebug('Бот запущен');
|
|
188
|
-
|
|
189
|
-
// Выключаем режим отладки
|
|
190
|
-
logger.setDebugMode(false);
|
|
191
|
-
|
|
192
|
-
// Это сообщение не будет выведено
|
|
193
|
-
logger.logDebug('Это не видно');
|
|
194
|
-
|
|
195
|
-
// Включаем обратно и переходим на console.debug
|
|
196
|
-
logger.setDebugMode(true, false);
|
|
197
|
-
|
|
198
|
-
// Это сообщение выведется в console.debug
|
|
199
|
-
logger.logDebug('Это видно в console.debug');
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
#### Цветовая схема
|
|
203
|
-
Если chalk включен:
|
|
204
|
-
- Префиксные скобки (начало и конец) выводятся серым цветом
|
|
205
|
-
- Сам префикс выводится зелёным цветом
|
|
206
|
-
- Сообщение выводится синим цветом
|
|
207
|
-
|
|
208
|
-
Если chalk выключен - обычный текст без цветов.
|
|
92
|
+
- Имя нужного игрока.
|
package/ddbot.js-0374.d.ts
CHANGED
|
@@ -185,132 +185,16 @@ declare module 'ddbot.js-0374' {
|
|
|
185
185
|
}
|
|
186
186
|
|
|
187
187
|
/**
|
|
188
|
-
*
|
|
189
|
-
*/
|
|
190
|
-
export class DebugLogger {
|
|
191
|
-
/**
|
|
192
|
-
* Создает новый логгер
|
|
193
|
-
* @param prefix - Префикс для сообщений
|
|
194
|
-
* @param isDebug - Включить режим отладки
|
|
195
|
-
* @param islog - Использовать console.log вместо console.debug
|
|
196
|
-
* @param prefixforprefix - Префикс для префикса [начало, конец]
|
|
197
|
-
* @param chalk - Использовать цветной текст
|
|
198
|
-
*/
|
|
199
|
-
constructor(
|
|
200
|
-
prefix: string,
|
|
201
|
-
isDebug?: boolean,
|
|
202
|
-
islog?: boolean,
|
|
203
|
-
prefixforprefix?: [string, string] | null,
|
|
204
|
-
chalk?: boolean
|
|
205
|
-
);
|
|
206
|
-
|
|
207
|
-
/**
|
|
208
|
-
* Логирует отладочную информацию
|
|
209
|
-
* @param args - Аргументы для логирования
|
|
210
|
-
*/
|
|
211
|
-
logDebug(...args: any[]): void;
|
|
212
|
-
|
|
213
|
-
/**
|
|
214
|
-
* Устанавливает режим отладки
|
|
215
|
-
* @param debugMode - Включить/выключить отладку
|
|
216
|
-
* @param useLog - Использовать console.log
|
|
217
|
-
* @param chalk - Использовать цветной текст
|
|
218
|
-
*/
|
|
219
|
-
setDebugMode(debugMode: boolean, useLog?: boolean, chalk?: boolean): void;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
/**
|
|
223
|
-
* Функции для загрузки карт
|
|
224
|
-
*/
|
|
225
|
-
export interface MapLoader {
|
|
226
|
-
/**
|
|
227
|
-
* Получает тип карты с ddnet.org
|
|
228
|
-
* @param mapName - Имя карты
|
|
229
|
-
* @returns Тип карты (novice, moderate и т.д.)
|
|
230
|
-
*/
|
|
231
|
-
fetchMapType(mapName: string): Promise<string>;
|
|
232
|
-
|
|
233
|
-
/**
|
|
234
|
-
* Загружает карту по имени
|
|
235
|
-
* @param mapName - Имя карты
|
|
236
|
-
* @param MAP_DIR - Директория для загрузки
|
|
237
|
-
* @returns true если загрузка успешна
|
|
238
|
-
*/
|
|
239
|
-
loadMap(mapName: string, MAP_DIR: string): Promise<boolean>;
|
|
240
|
-
|
|
241
|
-
/**
|
|
242
|
-
* Расширенные функции для работы с картами
|
|
243
|
-
*/
|
|
244
|
-
advanced: {
|
|
245
|
-
/**
|
|
246
|
-
* Загружает карту по имени и типу
|
|
247
|
-
* @param mapName - Имя карты
|
|
248
|
-
* @param type - Тип карты
|
|
249
|
-
* @param MAP_DIR_DM - Директория для загрузки
|
|
250
|
-
* @returns Путь к загруженной карте
|
|
251
|
-
*/
|
|
252
|
-
downloadMap(mapName: string, type: string, MAP_DIR_DM: string): Promise<string>;
|
|
253
|
-
|
|
254
|
-
/**
|
|
255
|
-
* Пытается загрузить карту
|
|
256
|
-
* @param mapName - Имя карты
|
|
257
|
-
* @param type - Тип карты
|
|
258
|
-
* @param MAP_DIR - Директория для загрузки
|
|
259
|
-
* @returns true если успешно
|
|
260
|
-
*/
|
|
261
|
-
tryDownloadMap(mapName: string, type: string, MAP_DIR: string): Promise<boolean>;
|
|
262
|
-
|
|
263
|
-
/** Логгер для MapLoader */
|
|
264
|
-
logDebuger: DebugLogger;
|
|
265
|
-
};
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
/**
|
|
269
|
-
* Событие загрузки карты
|
|
270
|
-
*/
|
|
271
|
-
export interface AutoMapLoadedEvent {
|
|
272
|
-
loaded: boolean;
|
|
273
|
-
mapDetails: MapDetails;
|
|
274
|
-
botName: string;
|
|
275
|
-
dir: string;
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
/**
|
|
279
|
-
* Автоматический загрузчик карт
|
|
280
|
-
*/
|
|
281
|
-
export interface AutomapLoader {
|
|
282
|
-
/**
|
|
283
|
-
* Запускает автоматическую загрузку карт для бота
|
|
284
|
-
* @param botName - Имя бота
|
|
285
|
-
* @param dir - Директория для загрузки карт
|
|
286
|
-
*/
|
|
287
|
-
work(botName: string, dir: string): Promise<void>;
|
|
288
|
-
|
|
289
|
-
/**
|
|
290
|
-
* Подписка на события автозагрузки
|
|
291
|
-
* @param event - Имя события
|
|
292
|
-
* @param callback - Обработчик события
|
|
293
|
-
*/
|
|
294
|
-
on(event: 'automaploader:map_loaded', callback: (data: AutoMapLoadedEvent) => void): void;
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
/**
|
|
298
|
-
* Объект с классом BotManager и логгером
|
|
188
|
+
* Объект с классом BotManager и логгером из модуля Loger0374
|
|
299
189
|
*/
|
|
300
190
|
export interface BotClassAndLogger {
|
|
301
191
|
BotManager: typeof BotManager;
|
|
302
|
-
logDebuger:
|
|
192
|
+
logDebuger: any;
|
|
303
193
|
}
|
|
304
194
|
|
|
305
195
|
/** Экземпляр BotManager */
|
|
306
196
|
export const bot: BotManager;
|
|
307
197
|
|
|
308
|
-
/** Загрузчик карт */
|
|
309
|
-
export const mapLoader: MapLoader;
|
|
310
|
-
|
|
311
|
-
/** Автоматический загрузчик карт */
|
|
312
|
-
export const Automaploader: AutomapLoader;
|
|
313
|
-
|
|
314
198
|
/** Класс BotManager и логгер */
|
|
315
199
|
export const botClassAndLoger: BotClassAndLogger;
|
|
316
200
|
}
|
package/docs/documentation.md
CHANGED
|
@@ -58,186 +58,4 @@ neiky-ddracebot.js
|
|
|
58
58
|
15. bot.getPlayerName()
|
|
59
59
|
1. Принимает уникальное имя бота/Array список игроков.
|
|
60
60
|
2. clientid нужного игрока.
|
|
61
|
-
- Имя нужного игрока.
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
# maploader
|
|
65
|
-
Возможно первая вещь которая может загружать карты по официальным названиям ДДНета.
|
|
66
|
-
|
|
67
|
-
## Самые нужные
|
|
68
|
-
fetchMapType и loadMap.
|
|
69
|
-
|
|
70
|
-
1. fetchMapType
|
|
71
|
-
Получает тип карты с ddnet.org
|
|
72
|
-
1. mapName - Имя карты.
|
|
73
|
-
- Тип карты (novice тд.).
|
|
74
|
-
2. loadMap
|
|
75
|
-
Загружает карту по нужному имени в нужную директорию.
|
|
76
|
-
1. mapName - Имя карты.
|
|
77
|
-
2. MAP_DIR - Директория куда будет загружена карта.
|
|
78
|
-
- Возвращает булевое значение.
|
|
79
|
-
|
|
80
|
-
## Дополнитильные или сырые функции
|
|
81
|
-
Находиться в advanced
|
|
82
|
-
Тут есть сырой downloadMap, tryDownloadMap, logDebuger.
|
|
83
|
-
|
|
84
|
-
1. downloadMap
|
|
85
|
-
Загрузка карты по имени и типу.
|
|
86
|
-
Нет никакого протекшена почти.
|
|
87
|
-
1. mapName - Имя карты
|
|
88
|
-
2. type - Тип карты
|
|
89
|
-
3. MAP_DIR_DM - Папка для загрузки карты
|
|
90
|
-
- Путь к загруженной карте
|
|
91
|
-
2. tryDownloadMap
|
|
92
|
-
Принимает все тоже что и downloadMap, только оборачивает его в try.
|
|
93
|
-
- Возвращает болевое значение.
|
|
94
|
-
|
|
95
|
-
logDebuger из debug.js
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
# automaploader.js
|
|
99
|
-
Хуйня.
|
|
100
|
-
Не работает не с официальными ДДНет серверами, потому что они уже дают нам mapDetails.map_url а automaploader загружает по имени.
|
|
101
|
-
Мне лень переделывать его. пусть будет.
|
|
102
|
-
|
|
103
|
-
Если хотите понять как им пользоваться, лутше сами посмотрите его. он очень простой и маленький.
|
|
104
|
-
|
|
105
|
-
# debug.js / DebugLogger
|
|
106
|
-
Главный логер для отладки. Позволяет гибко настраивать вывод отладочной информации с поддержкой цветного текста через chalk.
|
|
107
|
-
|
|
108
|
-
## Конструктор
|
|
109
|
-
```javascript
|
|
110
|
-
new DebugLogger(prefix, isDebug, islog, prefixforprefix, chalk)
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
### Параметры конструктора:
|
|
114
|
-
1. **prefix** (string) - Префикс для всех отладочных сообщений. По умолчанию "null".
|
|
115
|
-
2. **isDebug** (boolean) - Включен ли режим отладки. По умолчанию false.
|
|
116
|
-
3. **islog** (boolean) - Использовать console.log вместо console.debug. По умолчанию true.
|
|
117
|
-
4. **prefixforprefix** (Array) - Массив из двух элементов [начало, конец] для оформления префикса. По умолчанию ['[', ']'].
|
|
118
|
-
5. **chalk** (boolean) - Использовать ли цветной текст. По умолчанию true (если chalk установлен).
|
|
119
|
-
|
|
120
|
-
## Свойства класса
|
|
121
|
-
1. **isDebug** (boolean) - Флаг включения/выключения режима отладки
|
|
122
|
-
2. **islog** (boolean) - Флаг использования console.log вместо console.debug
|
|
123
|
-
3. **prefix** (string) - Текущий префикс для сообщений
|
|
124
|
-
4. **prefixforprefix** (Array) - Символы для оформления префикса [начало, конец]
|
|
125
|
-
5. **chalk** (boolean) - Флаг использования цветного текста
|
|
126
|
-
|
|
127
|
-
## Методы класса
|
|
128
|
-
|
|
129
|
-
### logDebug(...args)
|
|
130
|
-
Выводит отладочное сообщение с префиксом, если режим отладки включен.
|
|
131
|
-
|
|
132
|
-
**Параметры:**
|
|
133
|
-
- ...args - Любые данные для логирования (можно передать несколько аргументов)
|
|
134
|
-
|
|
135
|
-
**Возвращаемое значение:** ничего (void)
|
|
136
|
-
|
|
137
|
-
**Описание:**
|
|
138
|
-
Метод проверяет, включен ли режим отладки (this.isDebug). Если да, то форматирует сообщение с префиксом и выводит его в консоль. Если islog = true, используется console.log, иначе console.debug.
|
|
139
|
-
|
|
140
|
-
**Формат вывода:**
|
|
141
|
-
- С цветом: `[серый]зелёный_префикс[серый] синее_сообщение`
|
|
142
|
-
- Без цвета: `[префикс] сообщение`
|
|
143
|
-
|
|
144
|
-
### setDebugMode(debugMode, useLog, chalk)
|
|
145
|
-
Изменяет режим отладки и способ вывода логов.
|
|
146
|
-
|
|
147
|
-
**Параметры:**
|
|
148
|
-
1. debugMode (boolean) - Включить (true) или выключить (false) режим отладки
|
|
149
|
-
2. useLog (boolean) - Использовать console.log (true) или console.debug (false). По умолчанию true.
|
|
150
|
-
3. chalk (boolean) - Использовать цветной текст. По умолчанию текущее значение this.chalk
|
|
151
|
-
|
|
152
|
-
**Возвращаемое значение:** ничего (void)
|
|
153
|
-
|
|
154
|
-
**Описание:**
|
|
155
|
-
Позволяет динамически менять режим отладки без пересоздания объекта. Полезно для переключения между режимами во время выполнения программы.
|
|
156
|
-
|
|
157
|
-
## Примеры использования
|
|
158
|
-
|
|
159
|
-
### Базовый пример
|
|
160
|
-
```javascript
|
|
161
|
-
const DebugLogger = require('ddbot.js-0374').DebugLogger;
|
|
162
|
-
|
|
163
|
-
// Создаем логер с префиксом 'MyBot'
|
|
164
|
-
const logger = new DebugLogger('MyBot', true, true, ['[', ']'], true);
|
|
165
|
-
|
|
166
|
-
// Выводим сообщение в console.log с цветом
|
|
167
|
-
logger.logDebug('Бот успешно запущен');
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
### Пример с переключением режимов
|
|
171
|
-
```javascript
|
|
172
|
-
const logger = new DebugLogger('Server', true, true);
|
|
173
|
-
|
|
174
|
-
// Выводит в console.log
|
|
175
|
-
logger.logDebug('Сервер запустился');
|
|
176
|
-
|
|
177
|
-
// Выключаем отладку
|
|
178
|
-
logger.setDebugMode(false);
|
|
179
|
-
|
|
180
|
-
// Это сообщение не будет выведено
|
|
181
|
-
logger.logDebug('Это не видно');
|
|
182
|
-
|
|
183
|
-
// Включаем отладку с console.debug вместо console.log
|
|
184
|
-
logger.setDebugMode(true, false);
|
|
185
|
-
|
|
186
|
-
// Выводит в console.debug
|
|
187
|
-
logger.logDebug('Переключились на console.debug');
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
### Пример с пользовательским оформлением
|
|
191
|
-
```javascript
|
|
192
|
-
const logger = new DebugLogger(
|
|
193
|
-
'ERROR',
|
|
194
|
-
true,
|
|
195
|
-
true,
|
|
196
|
-
['<<< ', ' >>>'], // Кастомное оформление
|
|
197
|
-
true
|
|
198
|
-
);
|
|
199
|
-
|
|
200
|
-
// Выведет: <<< ERROR >>> ошибка произошла
|
|
201
|
-
logger.logDebug('ошибка произошла');
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
### Пример без цветного текста
|
|
205
|
-
```javascript
|
|
206
|
-
const logger = new DebugLogger('Bot', true, true, ['[', ']'], false);
|
|
207
|
-
|
|
208
|
-
// Выведет обычный текст без цветов
|
|
209
|
-
logger.logDebug('Обычный лог без цветов');
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
## Цветовая схема
|
|
213
|
-
Если chalk включен и найден в зависимостях, применяется следующая схема окраски:
|
|
214
|
-
- **Скобки-префиксы** [начало и конец] - серый цвет (grey)
|
|
215
|
-
- **Сам префикс** - зелёный цвет (green)
|
|
216
|
-
- **Сообщение** - синий цвет (blue)
|
|
217
|
-
|
|
218
|
-
Если chalk отключен или не установлен - все выводится обычным текстом без стилизации.
|
|
219
|
-
|
|
220
|
-
## Внутренние методы
|
|
221
|
-
|
|
222
|
-
### _format(prefix, prefixforprefix, ...args)
|
|
223
|
-
(Для внутреннего использования)
|
|
224
|
-
|
|
225
|
-
Форматирует сообщение с цветовыми кодами (если включен chalk).
|
|
226
|
-
|
|
227
|
-
**Параметры:**
|
|
228
|
-
- prefix (string) - Префикс сообщения
|
|
229
|
-
- prefixforprefix (Array) - Символы для оформления
|
|
230
|
-
- ...args - Аргументы для логирования
|
|
231
|
-
|
|
232
|
-
**Возвращаемое значение:** Array - Отформатированное сообщение (массив цветных строк или обычный массив)
|
|
233
|
-
|
|
234
|
-
**Описание:**
|
|
235
|
-
Метод используется внутри logDebug для форматирования вывода. Если chalk доступен, возвращает массив с цветными строками для console.log/debug. Иначе возвращает обычный массив.
|
|
236
|
-
|
|
237
|
-
## Тестирование
|
|
238
|
-
Для тестирования класса используйте:
|
|
239
|
-
```bash
|
|
240
|
-
node debug.js
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
При прямом запуске файла как скрипта DebugLogger автоматически создает несколько экземпляров и демонстрирует различные режимы работы.
|
|
61
|
+
- Имя нужного игрока.
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// Пример писался под комит c453b96f9fd717375f5ff70525603b7e1491c290.
|
|
2
|
+
|
|
3
|
+
const DebugLogger = require('Loger0374'); // Подключаем логгер
|
|
4
|
+
const { bot, botClassAndLoger } = require('../../index'); // Подключаем бота (если подключаете с пакета, то ddbot.js-0374)
|
|
5
|
+
const botdebug = botClassAndLoger.logDebuger;
|
|
6
|
+
botdebug.setDebugMode(true, true, true);
|
|
7
|
+
|
|
8
|
+
const readline = require('readline');
|
|
9
|
+
|
|
10
|
+
// Создаем интерфейс для ввода с консоли
|
|
11
|
+
const rl = readline.createInterface({
|
|
12
|
+
input: process.stdin,
|
|
13
|
+
output: process.stdout,
|
|
14
|
+
prompt: '> '
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
function clearLastLine() {
|
|
18
|
+
process.stdout.moveCursor(0, -1); // поднимаемся на одну строку вверх
|
|
19
|
+
process.stdout.clearLine(0); // очищаем всю строку
|
|
20
|
+
process.stdout.cursorTo(0); // возвращаем курсор в начало строки
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const logDebuger = new DebugLogger('example', true, true, null, true);
|
|
24
|
+
|
|
25
|
+
async function main() {
|
|
26
|
+
logDebuger.logDebug('Main started');
|
|
27
|
+
|
|
28
|
+
const identitybot = {
|
|
29
|
+
name: "Towa",
|
|
30
|
+
clan: "Towa Team",
|
|
31
|
+
skin: "Astolfofinho",
|
|
32
|
+
use_custom_color: 1,
|
|
33
|
+
color_body: 16711680,
|
|
34
|
+
color_feet: 16711680,
|
|
35
|
+
country: 804
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const botName = await bot.createBot('45.141.57.22:8365', 'Towa', {
|
|
39
|
+
identity: identitybot,
|
|
40
|
+
reconnect: true,
|
|
41
|
+
reconnectAttempts: -1,
|
|
42
|
+
randreconnect: true
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
bot.connectBot(botName); // подкюлчаем
|
|
46
|
+
|
|
47
|
+
const botClient = bot.getBotClient(botName); // получаем оригинальный клиент neiky-ddracebot.js
|
|
48
|
+
|
|
49
|
+
// Подписка на событие подключения
|
|
50
|
+
bot.on(`${botName}:connect`, () => {
|
|
51
|
+
let timemsg = 0; // время
|
|
52
|
+
|
|
53
|
+
rl.on('line', (input) => {
|
|
54
|
+
const message = input.trim();
|
|
55
|
+
|
|
56
|
+
if (message === 'exit') {
|
|
57
|
+
exit();
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (message) {
|
|
62
|
+
botClient.game.Say(message);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
rl.prompt(); // Показываем prompt снова
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
// подписка на чат
|
|
69
|
+
bot.on(`${botName}:ChatNoSystem`, (msgraw, autormsg, text, team, client_id) => {
|
|
70
|
+
logDebuger.logDebug(`${client_id} ${team} '${autormsg}' : ${text}`); // вывод чата в консоль
|
|
71
|
+
clearLastLine(); // очищаем последнюю строку ввода
|
|
72
|
+
logDebuger.logDebug(`${client_id} ${team} '${autormsg}' : ${text}`); // повторно выводим сообщение
|
|
73
|
+
if (text == 'exit') exit(); // выход
|
|
74
|
+
rl.prompt();
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
// Выход через Ctrl+C
|
|
79
|
+
async function exit() {
|
|
80
|
+
logDebuger.logDebug('Shutting down...');
|
|
81
|
+
await bot.disconnectAllBots(); // отключаем всех ботов
|
|
82
|
+
process.exit(0); // завершаем процес
|
|
83
|
+
}
|
|
84
|
+
process.on('SIGINT', exit); // Ctrl+C
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if (require.main === module) main();
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Пример писался под комит c453b96f9fd717375f5ff70525603b7e1491c290.
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const DebugLogger = require('Loger0374');
|
|
4
|
+
const { bot, botClassAndLoger } = require('../../index');
|
|
4
5
|
const botdebug = botClassAndLoger.logDebuger;
|
|
5
6
|
botdebug.setDebugMode(true, true, true);
|
|
6
7
|
|
package/docs/examples/main.js
CHANGED
|
@@ -39,7 +39,7 @@ async function main() {
|
|
|
39
39
|
|
|
40
40
|
if (!me) return;
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
if (me.name !== identitybot.name) {
|
|
43
43
|
botClient.game.ChangePlayerInfo({ ...identitybot, name: identitybot.name });
|
|
44
44
|
}
|
|
45
45
|
}, 10000);
|
|
@@ -136,4 +136,5 @@ if (require.main === module) main();
|
|
|
136
136
|
module.exports.main = main;
|
|
137
137
|
|
|
138
138
|
// можете щитать ето примером, ето просто как тест
|
|
139
|
-
// тут нет коментариев но если хотите то сами поймите как работает
|
|
139
|
+
// тут нет коментариев но если хотите то сами поймите как работает
|
|
140
|
+
// если что то не понятно то спрашивайте ИИ может поможет, надеюсь...
|
package/index.js
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
const { bot, BotManager, logDebuger } = require('./src/bot'); // Импортируем bot и BotManager из модуля bot/index.js
|
|
3
|
-
const mapLoader = require('./src/map/maploader'); // Импортируем mapLoader из модуля map/maploader.js
|
|
4
|
-
const Automaploader = require('./src/map/Automaploader'); // Импортируем Automaploader из модуля map/Automaploader.js
|
|
5
|
-
const DebugLogger = require('./src/debug'); // Импортируем DebugLogger из модуля debug.js
|
|
6
3
|
|
|
7
4
|
/**
|
|
8
5
|
* Зделал так чтобы было меньше експорта.
|
|
@@ -14,4 +11,4 @@ const botClassAndLoger = {
|
|
|
14
11
|
logDebuger
|
|
15
12
|
}
|
|
16
13
|
|
|
17
|
-
module.exports = { bot,
|
|
14
|
+
module.exports = { bot, botClassAndLoger }; // Экспортируем bot, mapLoader, Automaploader, botClassAndLoger и DebugLogger
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"dependencies": {
|
|
3
3
|
"chalk": "^4.1.2",
|
|
4
|
+
"loger0374": "^0.0.2",
|
|
4
5
|
"neiky-ddracebot.js": "^2.4.0"
|
|
5
6
|
},
|
|
6
7
|
"name": "ddbot.js-0374",
|
|
7
|
-
"version": "
|
|
8
|
+
"version": "2.0.0",
|
|
8
9
|
"description": "ddbot.js — это Node.js проект для автоматизации и управления ботами, а также работы с картами и логами.",
|
|
9
10
|
"main": "./index.js",
|
|
10
11
|
"scripts": {
|
package/src/bot/bot.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
const DDRaceBot = require('neiky-ddracebot.js');
|
|
3
3
|
const EventEmitter = require('events');
|
|
4
|
-
const DebugLogger = require('
|
|
4
|
+
const DebugLogger = require('Loger0374');
|
|
5
5
|
const logDebuger = new DebugLogger('BotManager', false, true, null, true);
|
|
6
6
|
const logDebug = ( ...args) => {
|
|
7
7
|
logDebuger.logDebug(...args);
|
package/src/debug.js
DELETED
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
let hasChalk = false;
|
|
4
|
-
let chalklib;
|
|
5
|
-
try {
|
|
6
|
-
require.resolve('chalk');
|
|
7
|
-
chalklib = require('chalk');
|
|
8
|
-
hasChalk = true;
|
|
9
|
-
} catch {
|
|
10
|
-
hasChalk = false;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
class DebugLogger {
|
|
14
|
-
/**
|
|
15
|
-
* Класс DebugLogger.
|
|
16
|
-
* @param {string} prefix - Префикс для сообщений отладки.
|
|
17
|
-
* @param {boolean} isDebug - Флаг для включения/выключения режима отладки.
|
|
18
|
-
* @param {boolean} islog - Флаг для использования console.log вместо console.debug.
|
|
19
|
-
* @param {object} prefixforprefix - Префикс для префикса. Аррей, Array где 1 айтем для начала, и 2 для конца оригинальноо префикса.
|
|
20
|
-
* @param {boolean} chalk - Изпользовать красивый цветной текст или нет.
|
|
21
|
-
*/
|
|
22
|
-
constructor(prefix, isDebug = false, islog = true, prefixforprefix = ['[',']'], chalk = true) {
|
|
23
|
-
/**
|
|
24
|
-
* @var {boolean} isDebug - Флаг для включения/выключения режима отладки
|
|
25
|
-
*/
|
|
26
|
-
if (typeof isDebug === "boolean") this.isDebug = isDebug; else this.isDebug = false;
|
|
27
|
-
/**
|
|
28
|
-
* @var {boolean} islog - Флаг для использования console.log вместо console.debug
|
|
29
|
-
*/
|
|
30
|
-
if (typeof islog === "boolean") this.islog = islog; else this.islog = true;
|
|
31
|
-
/**
|
|
32
|
-
* @var {string} prefix - Префикс для сообщений отладки
|
|
33
|
-
*/
|
|
34
|
-
if (typeof prefix === "string") this.prefix = prefix; else this.prefix = "null";
|
|
35
|
-
/**
|
|
36
|
-
* @var {object} prefixforprefix - Array Массив из двух строк, которые будут по бокам обычного префикса.
|
|
37
|
-
*/
|
|
38
|
-
if (Array.isArray(prefixforprefix)) this.prefixforprefix = prefixforprefix; else this.prefixforprefix = ['[',']'];
|
|
39
|
-
/**
|
|
40
|
-
* @var {boolean} chalk - Изпользовать ли цветные тексты.
|
|
41
|
-
*/
|
|
42
|
-
if (typeof chalk === "boolean") this.chalk = chalk; else this.chalk = hasChalk;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* (Для внутреннего изпользования)
|
|
47
|
-
* Формат, ПфП1, префикс, ПфП2, Аргументы.
|
|
48
|
-
* @param {string} prefix - Префикс
|
|
49
|
-
* @param {object} prefixforprefix - ПфП, то что по бокам префикса.
|
|
50
|
-
* @param {...any} args - Данные.
|
|
51
|
-
* @returns {string} Цветовой текст в формате.
|
|
52
|
-
*/
|
|
53
|
-
_format(prefix, prefixforprefix, ...args) {
|
|
54
|
-
if (this.chalk && hasChalk)
|
|
55
|
-
return [chalklib.grey(prefixforprefix[0]), chalklib.green(prefix), chalklib.grey(prefixforprefix[1]), chalklib.blue(...args)];
|
|
56
|
-
return [prefixforprefix[0], prefix, prefixforprefix[1], ...args];
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Функция для логирования отладочной информации
|
|
61
|
-
* @param {...*} args - Аргументы для логирования
|
|
62
|
-
*/
|
|
63
|
-
logDebug(...args) {
|
|
64
|
-
const prefix = this.prefix; // Используем префикс из свойства класса
|
|
65
|
-
const prefixforprefix = this.prefixforprefix; // префикс для префикса
|
|
66
|
-
if (this.isDebug) { // Проверяем, включен ли режим отладки
|
|
67
|
-
if (this.islog) { // Проверяем, использовать ли console.log
|
|
68
|
-
console.log(...this._format(prefix, prefixforprefix, ...args));
|
|
69
|
-
} else { // Иначе
|
|
70
|
-
console.debug(...this._format(prefix, prefixforprefix, ...args));
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* Функция для установки режима отладки и использования console.log
|
|
77
|
-
* @param {boolean} debugMode - Включить или выключить режим отладки
|
|
78
|
-
* @param {boolean} useLog - Использовать console.log вместо console.debug
|
|
79
|
-
* @param {boolean} chalk - Изпользовать ли цветной текст или нет
|
|
80
|
-
*/
|
|
81
|
-
setDebugMode(debugMode, useLog = true, chalk = this.chalk) { // лог по умолчанию, потому что мне так удобнее
|
|
82
|
-
this.chalk = chalk
|
|
83
|
-
this.isDebug = debugMode; // Устанавливаем режим отладки
|
|
84
|
-
this.islog = useLog; // Устанавливаем использование console.log
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// Экспортируем класс DebugLogger
|
|
89
|
-
module.exports = DebugLogger;
|
|
90
|
-
module.exports.DebugLogger = DebugLogger; // ну чтобы можно было класно короче
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
// Пример использования класса DebugLogger
|
|
94
|
-
if (require.main === module) { // Только если запускаеться напрямую
|
|
95
|
-
let test = new DebugLogger('test', true, true, ["[","]"], true); // Создаем экземпляр класса с префиксом 'test', режим отладки включен и используем console.log
|
|
96
|
-
function log() {
|
|
97
|
-
test.logDebug('cum.'); // Логируем сообщение
|
|
98
|
-
test.setDebugMode(false); // Выключаем режим отладки
|
|
99
|
-
test.logDebug('ето не выведется.'); // Это сообщение не будет выведено
|
|
100
|
-
test.setDebugMode(true, false); // Включаем режим отладки и используем console.debug
|
|
101
|
-
test.logDebug('ето выведется в console.debug.'); // Логируем сообщение
|
|
102
|
-
}
|
|
103
|
-
log(); // тестовая функция
|
|
104
|
-
test = new DebugLogger('говно', true, true, ['1','Какашечка'], false); // создаем новый екземпляр с другими настройками
|
|
105
|
-
log(); // тестовая функция 2
|
|
106
|
-
test = new DebugLogger('кал', true, true, ['Абоба','2'], true); // снова создаем новый екземпляр с другими настройками
|
|
107
|
-
log(); // тестовая функция 3
|
|
108
|
-
}
|
package/src/map/automaploader.js
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
const { bot } = require('../bot');
|
|
3
|
-
const mapLoader = require('./maploader');
|
|
4
|
-
const DebugLogger = require('../debug');
|
|
5
|
-
const logDebuger = new DebugLogger('Automaploader', false, true);
|
|
6
|
-
const logdebug = logDebuger.logDebug;
|
|
7
|
-
|
|
8
|
-
const EventEmitter = require('events');
|
|
9
|
-
const eventEmitter = new EventEmitter();
|
|
10
|
-
|
|
11
|
-
const registeredHandlers = new Set(); // чтобы не срать обработчиками
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
/** * Функция для работы с Automaploader
|
|
15
|
-
* @param {string} botName - Имя бота, для которого будет работать Automaploader
|
|
16
|
-
* @param {string} dir - Папка, в которую будут загружаться карты
|
|
17
|
-
* @returns {Promise<void>} Пустой промис после регистрации обработчика
|
|
18
|
-
*/
|
|
19
|
-
async function work(botName, dir) {
|
|
20
|
-
// Проверяем, не зарегистрирован ли уже обработчик для этого бота
|
|
21
|
-
const handlerKey = `${botName}:map_details`;
|
|
22
|
-
if (registeredHandlers.has(handlerKey)) {
|
|
23
|
-
return; // Обработчик уже зарегистрирован
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
registeredHandlers.add(handlerKey); // Добавляем обработчик в множество
|
|
27
|
-
|
|
28
|
-
// Регистрация обработчика события map_details для данного бота
|
|
29
|
-
bot.on(`${botName}:map_details`, (mapDetails) => {
|
|
30
|
-
const mapName = mapDetails.map_name; // Извлекаем имя карты из объекта mapDetails
|
|
31
|
-
logdebug(`Automaploader`, `Received map details for bot "${botName}":`, mapDetails);
|
|
32
|
-
// Вызываем загрузку карты с помощью mapLoader
|
|
33
|
-
mapLoader.loadMap(mapName, dir)
|
|
34
|
-
.then((loaded) => {
|
|
35
|
-
eventEmitter.emit(`automaploader:map_loaded`, { loaded, mapDetails, botName, dir});
|
|
36
|
-
logdebug(`Automaploader`, `Map "${mapName}" loaded: ${loaded}, for bot "${botName}"`);
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Automaploader — объект для автоматической загрузки карт
|
|
43
|
-
*/
|
|
44
|
-
const Automaploader = {
|
|
45
|
-
/**
|
|
46
|
-
* Запускает автомаплоадер для бота
|
|
47
|
-
* @param {string} botName - Имя бота
|
|
48
|
-
* @param {string} dir - Папка для загрузки карт
|
|
49
|
-
*/
|
|
50
|
-
work,
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Подписка на события Automaploader
|
|
54
|
-
* @param {string} event - Имя события (Пока что только одно, "automaploader:map_loaded")
|
|
55
|
-
* @param {function(Object): void} callback - Колбэк для события с объектом { loaded, mapDetails, botName, dir }
|
|
56
|
-
*/
|
|
57
|
-
on: eventEmitter.on.bind(eventEmitter)
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
module.exports = { Automaploader, logDebuger };
|
package/src/map/maploader.js
DELETED
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
const fs = require("fs"); // фс
|
|
3
|
-
const path = require("path"); // патх
|
|
4
|
-
const https = require("https"); // хттпс
|
|
5
|
-
const DebugLogger = require("../debug"); // дебаглоггер
|
|
6
|
-
const logDebuger = new DebugLogger("MapLoader", false, true); // создаем дебагер
|
|
7
|
-
const logdebug = logDebuger.logDebug.bind(logDebuger); // закидываем сюда чтобы писать короче
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Получает тип карты с ddnet.org
|
|
11
|
-
* @param {string} mapName - Имя карты
|
|
12
|
-
* @returns {Promise<string>} - Тип карты
|
|
13
|
-
*/
|
|
14
|
-
function fetchMapType(mapName) {
|
|
15
|
-
logdebug("Fetching map type for:", mapName);
|
|
16
|
-
const url = `https://ddnet.org/maps/?json=${encodeURIComponent(mapName)}`; // сылОчка1
|
|
17
|
-
return new Promise((resolve, reject) => {
|
|
18
|
-
logdebug("Requesting URL:", url);
|
|
19
|
-
https.get(url, (res) => { // Получаем ответ
|
|
20
|
-
logdebug("Received response with status code:", res.statusCode);
|
|
21
|
-
if (res.statusCode !== 200) {
|
|
22
|
-
reject(new Error(`Failed to fetch map type: ${res.statusCode}`)); // пропердоливаемся1
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
let rawData = ""; // не приготовненная дата
|
|
27
|
-
res.on("data", (chunk) => (rawData += chunk)); // плюсуем чанки
|
|
28
|
-
res.on("end", () => { // КОНЕЦ
|
|
29
|
-
logdebug("end of data received");
|
|
30
|
-
try { // пытаемся, пытаемся...
|
|
31
|
-
const json = JSON.parse(rawData); // парсим жсон
|
|
32
|
-
const type = json.type.toLowerCase(); // типа
|
|
33
|
-
if (json && type) { // если есть жсон и тип
|
|
34
|
-
logdebug("Fetched map type:", type);
|
|
35
|
-
resolve(type); // резолвим тип
|
|
36
|
-
} else { // иначе
|
|
37
|
-
logdebug("Map type not found in response");
|
|
38
|
-
reject(new Error("Map type not found in response")); // пропердоливаемся2
|
|
39
|
-
}
|
|
40
|
-
} catch (e) { // е
|
|
41
|
-
reject(new Error("Failed to parse map type JSON")); // пропердоливаемся3
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
}).on("error", reject); // еще раз пропердоливаемся4
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/** Загрузка карты по имени и типу
|
|
49
|
-
* @param {string} mapName - Имя карты
|
|
50
|
-
* @param {string} type - Тип карты
|
|
51
|
-
* @param {string} MAP_DIR_DM - Папка для загрузки карты
|
|
52
|
-
* @returns {Promise<string>} - Путь к загруженной карте
|
|
53
|
-
*/
|
|
54
|
-
function downloadMap(mapName, type, MAP_DIR_DM) {
|
|
55
|
-
const filePath = path.join(MAP_DIR_DM, `${mapName}.map`); // прикидываем путь
|
|
56
|
-
logdebug("Downloading map:", mapName, "of type:", type, "to:", filePath);
|
|
57
|
-
if (fs.existsSync(filePath)) {
|
|
58
|
-
logdebug("Map already exists at:", filePath);
|
|
59
|
-
return Promise.resolve(filePath); // если карта уже есть, резолвим путь а точнее отдыхаем и не напрягаемся1
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
const url = `https://raw.githubusercontent.com/ddnet/ddnet-maps/master/types/${type}/maps/${mapName}.map`; // сылОчка2
|
|
63
|
-
logdebug("Map download URL:", url);
|
|
64
|
-
return new Promise((resolve, reject) => {
|
|
65
|
-
if (!fs.existsSync(MAP_DIR_DM)) {
|
|
66
|
-
reject(new Error(`Directory does not exist: ${MAP_DIR_DM}`)); // Директории нет, отдыхаем и не напрягаемся2
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
const fileStream = fs.createWriteStream(filePath); // начинаем стримить на твич
|
|
70
|
-
https.get(url, (res) => { // Получаем ответ
|
|
71
|
-
logdebug("Received response with status code:", res.statusCode);
|
|
72
|
-
if (res.statusCode !== 200) {
|
|
73
|
-
reject(new Error(`Failed to download map: ${res.statusCode}`)); // пропердоливаемся5
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
res.pipe(fileStream); // пипе
|
|
78
|
-
fileStream.on("finish", () => { // финиш
|
|
79
|
-
logdebug("Map downloaded to:", filePath);
|
|
80
|
-
fileStream.close(); // завершаем стрим и отдыхаем и не напрягаемся3
|
|
81
|
-
resolve(filePath); // резолвим путь
|
|
82
|
-
});
|
|
83
|
-
}).on("error", (err) => {
|
|
84
|
-
logdebug("Error downloading map:", err.message);
|
|
85
|
-
if (fs.existsSync(filePath)) fs.unlinkSync(filePath);// пропердоливаемся6 и удаляем файл, если он есть конечно
|
|
86
|
-
reject(err);
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Пытается загрузить карту и возвращает успех или неудачу
|
|
93
|
-
* @param {string} mapName - Имя карты
|
|
94
|
-
* @param {string} type - Тип карты
|
|
95
|
-
* @param {string} MAP_DIR - Папка для загрузки карты
|
|
96
|
-
* @returns {Promise<boolean>} - Успех или неудача загрузки
|
|
97
|
-
*/
|
|
98
|
-
async function tryDownloadMap(mapName, type, MAP_DIR) {
|
|
99
|
-
logdebug("Trying to download map:", mapName, "of type:", type);
|
|
100
|
-
try { // пытаемся
|
|
101
|
-
await downloadMap(mapName, type, MAP_DIR); // ждемс
|
|
102
|
-
return true; // да
|
|
103
|
-
} catch (e) { // фак, провалились
|
|
104
|
-
logdebug("Failed to download map:", JSON.stringify(e.message, null, 2));
|
|
105
|
-
return false; // нет
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* Загружает карту по имени в указанную папку
|
|
111
|
-
* @param {string} mapName - Имя карты
|
|
112
|
-
* @param {string} MAP_DIR - Папка для загрузки карты
|
|
113
|
-
* @returns {Promise<boolean>} - Успех или неудача загрузки
|
|
114
|
-
*/
|
|
115
|
-
async function loadMap(mapName, MAP_DIR) {
|
|
116
|
-
logdebug("Loading map:", mapName, "into directory:", MAP_DIR);
|
|
117
|
-
const type = await fetchMapType(mapName); // получаем тип карты
|
|
118
|
-
return await tryDownloadMap(mapName, type, MAP_DIR); // пытаемся загрузить карту и возвращаем результат
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Расширенные функции для работы с картами
|
|
123
|
-
*/
|
|
124
|
-
const advanced = {
|
|
125
|
-
downloadMap,
|
|
126
|
-
tryDownloadMap,
|
|
127
|
-
logDebuger // экспортируем дебаглоггер
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
// Экспортируем функции
|
|
131
|
-
module.exports = {
|
|
132
|
-
fetchMapType, // получитьТипКарты
|
|
133
|
-
loadMap, // загрузитьКарту
|
|
134
|
-
advanced // продвинутые или расширенные, или пашёл ты
|
|
135
|
-
};
|