ddbot.js-0374 3.2.7 → 4.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/docs/documentation.md +0 -141
- package/index.js +4 -14
- package/lib/core/core.d.ts +105 -0
- package/lib/core/core.js +270 -0
- package/lib/core/ddutils.d.ts +33 -0
- package/lib/core/ddutils.js +149 -0
- package/lib/core/module.d.ts +40 -0
- package/lib/core/module.js +65 -0
- package/lib/index.d.ts +16 -0
- package/lib/index.js +16 -0
- package/lib/manager.d.ts +17 -0
- package/lib/manager.js +136 -0
- package/lib/modules/chat.d.ts +46 -0
- package/lib/modules/chat.js +120 -0
- package/lib/modules/playerlist.d.ts +33 -0
- package/lib/modules/playerlist.js +78 -0
- package/lib/modules/reconnect.d.ts +14 -0
- package/lib/modules/reconnect.js +81 -0
- package/lib/modules/snap.d.ts +17 -0
- package/lib/modules/snap.js +61 -0
- package/lib/types.d.ts +255 -0
- package/lib/types.js +4 -0
- package/package.json +6 -9
- package/README.md +0 -167
- package/ddbot.js-0374.d.ts +0 -200
- package/docs/examples/chat.js +0 -87
- package/docs/examples/echo-bot.js +0 -66
- package/docs/examples/main.js +0 -140
- package/src/bot/bot.js +0 -512
- package/src/bot/index.js +0 -5
package/README.md
DELETED
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
Смотрите за руками
|
|
2
|
-
|
|
3
|
-
Создатель такой никто под именем 0374flop
|
|
4
|
-
|
|
5
|
-
Скажу прямо.
|
|
6
|
-
Коментари с нецензурной лексикой и тут и в коде только потому что я за то чтобы цензура стала слабее. Мне не нравиться что везде слишком сильная цензура.
|
|
7
|
-
Так что да, не плакайте там.
|
|
8
|
-
Простите за орфографические ошибки, писал на скорую руку. (за другие ошибки простите тоже)
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
Ето модуль для роботы с ДДНет (DDNet/teeworlds) ботами. Внутри изпользует чистую библиотеку teeworlds (https://www.npmjs.com/package/teeworlds, https://www.npmjs.com/~swarfey) и просто делает рутинные вещи за вас. Например, может работать с кучей ботов на разных серверах, делает чат не повторяющимся без спамов. Убирает системные сообщения из чата. Можно получить весь список игроков одним методом.
|
|
12
|
-
|
|
13
|
-
Вообще я делал его для себя, и по приколу. Но решил выложить чтобы проще работать с зависимостями и не качать с гита.
|
|
14
|
-
|
|
15
|
-
Лицензия находиться в файле "LICENSE" там большими буквами для идиотов написано ( MIT )
|
|
16
|
-
|
|
17
|
-
У нас есть много всякого, например:
|
|
18
|
-
1. bot.js
|
|
19
|
-
Начнем с него.
|
|
20
|
-
Ето класс, с методами для работы с большим количеством ботов.
|
|
21
|
-
Работает с дебагером.
|
|
22
|
-
Емитит кастомные емиты
|
|
23
|
-
и там всякое которое мне лень разказывать
|
|
24
|
-
2. index'ы.js
|
|
25
|
-
просто вещи чтобы проще было.
|
|
26
|
-
что про них сказать?
|
|
27
|
-
подключают из других файлов все, и выгружают все в один объект.
|
|
28
|
-
|
|
29
|
-
## Установка.
|
|
30
|
-
Так как я только что первый раз зделал нпм пакет то теперь его можно поставить как пакет
|
|
31
|
-
Вот так `npm i ddbot.js-0374`
|
|
32
|
-
Делаем require('ddbot.js-0374')
|
|
33
|
-
И все после етого вам доступно все ето : { bot, botClassAndLoger }.
|
|
34
|
-
Наслаждайтесь етом дерьмом.
|
|
35
|
-
|
|
36
|
-
## Техническая документация.
|
|
37
|
-
### bot/BotManager
|
|
38
|
-
Окей...
|
|
39
|
-
Сейчас я вам разкажу как работает bot/BotManager.
|
|
40
|
-
|
|
41
|
-
teeworlds
|
|
42
|
-
#### Методы
|
|
43
|
-
У нас есть :
|
|
44
|
-
1. bot.createBot()
|
|
45
|
-
1. fulladdress - Полный адрес сервера (IP:порт)
|
|
46
|
-
2. botName - Имя бота
|
|
47
|
-
3. parameter - Параметры бота
|
|
48
|
-
1. identity со скином и другими косметическими деталями.
|
|
49
|
-
2. reconnect переподключаеться бот или нет
|
|
50
|
-
3. reconnectAttempts количество возможных реконектов (-1 для безконечного)
|
|
51
|
-
4. randreconnect будет ли бот переключаться с чуть разной задержкой или нет (в районе 0 - 1 сек)
|
|
52
|
-
- На выходе у нас имя бота по которому можно обращаться. (Уникальное имя бота или null в случае ошибки)
|
|
53
|
-
2. bot.connectBot()
|
|
54
|
-
1. Принимает уникальное имя бота и подключает нужного.
|
|
55
|
-
- На выхоте булевое значение (нет точных данных подключился ли бот или нет)
|
|
56
|
-
3. bot.disconnectBot()
|
|
57
|
-
1. Принимает уникальное имя бота и отключает нужного.
|
|
58
|
-
- Работает также как и connectBot().
|
|
59
|
-
4. bot.disconnectAllBots()
|
|
60
|
-
Отключает всех ботов, не принимает аргументов.
|
|
61
|
-
Под капотом disconnectBot().
|
|
62
|
-
5. bot.getBotInfo()
|
|
63
|
-
1. Принимает уникальное имя бота и возвращает информацию про него.
|
|
64
|
-
- Информация о боте или null, если бот не найден
|
|
65
|
-
6. bot.isBotConnected()
|
|
66
|
-
1. Принимает уникальное имя бота.
|
|
67
|
-
- Возвращает булевое значение.
|
|
68
|
-
7. bot.isFreezeBot()
|
|
69
|
-
1. Принимает уникальное имя бота.
|
|
70
|
-
- Возвращает булевое значение.
|
|
71
|
-
8. bot.setFreezeBot()
|
|
72
|
-
Просто меняет значение того заморожен ли бот. (не влияет на игру)
|
|
73
|
-
9. bot.getAllActiveBots()
|
|
74
|
-
Получение всех активных ботов
|
|
75
|
-
- Массив имен всех активных ботов
|
|
76
|
-
10. bot.getBotClient()
|
|
77
|
-
1. Принимает уникальное имя бота.
|
|
78
|
-
- Возвращает клиент teeworlds
|
|
79
|
-
11. bot.removeBot()
|
|
80
|
-
Удаляет бота полностью. (и отключает)
|
|
81
|
-
1. Принимает уникальное имя бота.
|
|
82
|
-
- Возвращает булевое значение.
|
|
83
|
-
12. bot.getBot()
|
|
84
|
-
1. Принимает уникальное имя бота.
|
|
85
|
-
- Возвращает прокси-объект бота.
|
|
86
|
-
13. bot._setupBotEvents()
|
|
87
|
-
Заставляет ивенты работать. Изпользуеться в bot.createBot() чтобы вы могли делать все проще и вам не нужно было получать оригинальный клиент teeworlds для ивентов.
|
|
88
|
-
1. Принимает уникальное имя бота.
|
|
89
|
-
2. Принимает клиент teeworlds
|
|
90
|
-
Ничего не возвращает.
|
|
91
|
-
14. bot.getPlayerList()
|
|
92
|
-
1. Принимает уникальное имя бота.
|
|
93
|
-
- Array список игроков.
|
|
94
|
-
15. bot.getPlayerName()
|
|
95
|
-
1. Принимает уникальное имя бота/Array список игроков.
|
|
96
|
-
2. clientid нужного игрока.
|
|
97
|
-
- Имя нужного игрока.
|
|
98
|
-
|
|
99
|
-
#### пример ехо бота
|
|
100
|
-
```js
|
|
101
|
-
// Пример писался под комит c453b96f9fd717375f5ff70525603b7e1491c290.
|
|
102
|
-
|
|
103
|
-
const DebugLogger = require('loger0374'); // мой логер (не обязательно изпользовать)
|
|
104
|
-
const { bot, botClassAndLoger } = require('../../index');
|
|
105
|
-
const botdebug = botClassAndLoger.logDebuger;
|
|
106
|
-
botdebug.setDebugMode(true, true, true);
|
|
107
|
-
|
|
108
|
-
const logDebuger = new DebugLogger('example', true, true, null, true);
|
|
109
|
-
|
|
110
|
-
async function main() {
|
|
111
|
-
logDebuger.logDebug('Main started');
|
|
112
|
-
|
|
113
|
-
const identitybot = {
|
|
114
|
-
name: "Towa",
|
|
115
|
-
clan: "Towa Team",
|
|
116
|
-
skin: "Astolfofinho",
|
|
117
|
-
use_custom_color: 1,
|
|
118
|
-
color_body: 16711680,
|
|
119
|
-
color_feet: 16711680,
|
|
120
|
-
country: 804
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
const botName = await bot.createBot('45.141.57.22:8311', 'Towa', {
|
|
124
|
-
identity: identitybot,
|
|
125
|
-
reconnect: true,
|
|
126
|
-
reconnectAttempts: -1,
|
|
127
|
-
randreconnect: true
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
bot.connectBot(botName); // подкюлчаем
|
|
131
|
-
|
|
132
|
-
const botClient = bot.getBotClient(botName); // получаем оригинальный клиент teeworlds
|
|
133
|
-
|
|
134
|
-
// Подписка на событие подключения
|
|
135
|
-
bot.on(`${botName}:connect`, () => {
|
|
136
|
-
let timemsg = 0; // время
|
|
137
|
-
|
|
138
|
-
setTimeout(() => {
|
|
139
|
-
botClient.game.Say('Ку всем');
|
|
140
|
-
}, 1251);
|
|
141
|
-
|
|
142
|
-
// подписка на чат
|
|
143
|
-
bot.on(`${botName}:ChatNoSystem`, (msgraw, autormsg, text, team, client_id) => {
|
|
144
|
-
logDebuger.logDebug(`${client_id} ${team} '${autormsg}' : ${text}`); // вывод чата в консоль
|
|
145
|
-
if (text == 'exit') exit(); // выход
|
|
146
|
-
|
|
147
|
-
// Эхо-логика
|
|
148
|
-
if (Date.now() - timemsg > 6000) {
|
|
149
|
-
timemsg = Date.now(); // устанавливаем текущее время
|
|
150
|
-
if (text && autormsg) {
|
|
151
|
-
botClient.game.Say(`${autormsg}: ${text}`); // отправка сообения (teeworlds)
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
});
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
// Выход через Ctrl+C
|
|
158
|
-
async function exit() {
|
|
159
|
-
logDebuger.logDebug('Shutting down...');
|
|
160
|
-
await bot.disconnectAllBots(); // отключаем всех ботов
|
|
161
|
-
process.exit(0); // завершаем процес
|
|
162
|
-
}
|
|
163
|
-
process.on('SIGINT', exit); // Ctrl+C
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
if (require.main === module) main();
|
|
167
|
-
```
|
package/ddbot.js-0374.d.ts
DELETED
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
declare module 'ddbot.js-0374' {
|
|
2
|
-
import { EventEmitter } from 'events';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Информация об идентичности бота (скин, клан, цвета и т.д.)
|
|
6
|
-
*/
|
|
7
|
-
export interface BotIdentity {
|
|
8
|
-
name?: string;
|
|
9
|
-
clan?: string;
|
|
10
|
-
skin?: string;
|
|
11
|
-
use_custom_color?: number;
|
|
12
|
-
color_body?: number;
|
|
13
|
-
color_feet?: number;
|
|
14
|
-
country?: number;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Параметры для создания бота
|
|
19
|
-
*/
|
|
20
|
-
export interface BotParameters {
|
|
21
|
-
/** Идентичность бота (скин, клан, цвета) */
|
|
22
|
-
identity?: BotIdentity;
|
|
23
|
-
/** Переподключаться ли боту при разрыве соединения */
|
|
24
|
-
reconnect?: boolean;
|
|
25
|
-
/** Количество попыток переподключения (-1 для бесконечного) */
|
|
26
|
-
reconnectAttempts?: number;
|
|
27
|
-
/** Использовать ли случайную задержку при переподключении (0-1 сек) */
|
|
28
|
-
randreconnect?: boolean;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Информация о боте
|
|
33
|
-
*/
|
|
34
|
-
export interface BotInfo {
|
|
35
|
-
client: any;
|
|
36
|
-
fulladdress: string;
|
|
37
|
-
originalName: string;
|
|
38
|
-
parameter: BotParameters;
|
|
39
|
-
isConnected: boolean;
|
|
40
|
-
createdAt: number;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Информация об игроке на сервере
|
|
45
|
-
*/
|
|
46
|
-
export interface PlayerInfo {
|
|
47
|
-
client_id: number;
|
|
48
|
-
name: string;
|
|
49
|
-
clan: string;
|
|
50
|
-
country: number;
|
|
51
|
-
team: number;
|
|
52
|
-
skin: string;
|
|
53
|
-
x: number | null;
|
|
54
|
-
y: number | null;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Детали карты
|
|
59
|
-
*/
|
|
60
|
-
export interface MapDetails {
|
|
61
|
-
map_name: string;
|
|
62
|
-
map_url?: string;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Менеджер ботов для управления несколькими ботами
|
|
67
|
-
*/
|
|
68
|
-
export class BotManager extends EventEmitter {
|
|
69
|
-
/**
|
|
70
|
-
* Создает нового бота
|
|
71
|
-
* @param fulladdress - Полный адрес сервера (IP:порт)
|
|
72
|
-
* @param botName - Имя бота
|
|
73
|
-
* @param parameter - Параметры бота
|
|
74
|
-
* @returns Уникальное имя бота или null в случае ошибки
|
|
75
|
-
*/
|
|
76
|
-
createBot(
|
|
77
|
-
fulladdress: string,
|
|
78
|
-
botName: string,
|
|
79
|
-
parameter?: BotParameters
|
|
80
|
-
): Promise<string | null>;
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Подключает бота к серверу
|
|
84
|
-
* @param botName - Уникальное имя бота
|
|
85
|
-
* @returns true если подключение успешно
|
|
86
|
-
*/
|
|
87
|
-
connectBot(botName: string): Promise<boolean>;
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Отключает бота от сервера
|
|
91
|
-
* @param botName - Уникальное имя бота
|
|
92
|
-
* @returns true если отключение успешно
|
|
93
|
-
*/
|
|
94
|
-
disconnectBot(botName: string): Promise<boolean>;
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* Отключает всех ботов
|
|
98
|
-
* @returns Результаты отключения каждого бота
|
|
99
|
-
*/
|
|
100
|
-
disconnectAllBots(): Promise<Array<PromiseSettledResult<boolean>>>;
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Получает информацию о боте
|
|
104
|
-
* @param botName - Уникальное имя бота
|
|
105
|
-
* @returns Информация о боте или null
|
|
106
|
-
*/
|
|
107
|
-
getBotInfo(botName: string): BotInfo | null;
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* Проверяет, подключен ли бот
|
|
111
|
-
* @param botName - Уникальное имя бота
|
|
112
|
-
* @returns true если бот подключен
|
|
113
|
-
*/
|
|
114
|
-
isBotConnected(botName: string): boolean;
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Проверяет, заморожен ли бот
|
|
118
|
-
* @param botName - Уникальное имя бота
|
|
119
|
-
* @returns true если бот заморожен
|
|
120
|
-
*/
|
|
121
|
-
isFreezeBot(botName: string): boolean;
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* Устанавливает состояние заморозки бота
|
|
125
|
-
* @param botName - Уникальное имя бота
|
|
126
|
-
* @param isFrozen - true для заморозки, false для разморозки
|
|
127
|
-
*/
|
|
128
|
-
setFreezeBot(botName: string, isFrozen: boolean): void;
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* Получает список всех активных ботов
|
|
132
|
-
* @returns Массив имен всех активных ботов
|
|
133
|
-
*/
|
|
134
|
-
getAllActiveBots(): string[];
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* Получает клиент бота
|
|
138
|
-
* @param botName - Уникальное имя бота
|
|
139
|
-
* @returns Клиент бота или null
|
|
140
|
-
*/
|
|
141
|
-
getBotClient(botName: string): any | null;
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* Удаляет бота из менеджера
|
|
145
|
-
* @param botName - Уникальное имя бота
|
|
146
|
-
* @returns true если бот был удален
|
|
147
|
-
*/
|
|
148
|
-
removeBot(botName: string): boolean;
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Получает объект бота с событиями
|
|
152
|
-
* @param botName - Уникальное имя бота
|
|
153
|
-
* @returns Объект бота или null
|
|
154
|
-
*/
|
|
155
|
-
getBot(botName: string): any | null;
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* Получает список игроков на сервере
|
|
159
|
-
* @param botName - Уникальное имя бота
|
|
160
|
-
* @returns Массив игроков
|
|
161
|
-
*/
|
|
162
|
-
getPlayerList(botName: string): PlayerInfo[];
|
|
163
|
-
|
|
164
|
-
/**
|
|
165
|
-
* Получает имя игрока по его ID
|
|
166
|
-
* @param botName - Уникальное имя бота или массив игроков
|
|
167
|
-
* @param clientId - ID клиента игрока
|
|
168
|
-
* @returns Имя игрока или null
|
|
169
|
-
*/
|
|
170
|
-
getPlayerName(botName: string | PlayerInfo[], clientId: number): string | null;
|
|
171
|
-
|
|
172
|
-
// События
|
|
173
|
-
on(event: `${string}:connect`, listener: () => void): this;
|
|
174
|
-
on(event: `${string}:connected`, listener: () => void): this;
|
|
175
|
-
on(event: `${string}:disconnect`, listener: (reason: string, reconnectTime?: number) => void): this;
|
|
176
|
-
on(event: `${string}:disconnected`, listener: (reason: string, reconnectTime?: number) => void): this;
|
|
177
|
-
on(event: `${string}:reconnect`, listener: (reconnectTime: number) => void): this;
|
|
178
|
-
on(event: `${string}:snapshot`, listener: (snapshot: any) => void): this;
|
|
179
|
-
on(event: `${string}:message`, listener: (msg: object) => void): this;
|
|
180
|
-
on(event: `${string}:ChatNoSystem`, listener: (msgraw: object, autormsg: string, text: string, team: number, client_id: number) => void): this;
|
|
181
|
-
on(event: `${string}:ChatRaw`, listener: (msgraw: object, autormsg: string, text: string, team: number, client_id: number) => void): this;
|
|
182
|
-
on(event: `${string}:error`, listener: (error: Error) => void): this;
|
|
183
|
-
on(event: `${string}:map_details`, listener: (mapDetails: MapDetails) => void): this;
|
|
184
|
-
on(event: string, listener: (...args: any[]) => void): this;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
/**
|
|
188
|
-
* Объект с классом BotManager и логгером из модуля Loger0374
|
|
189
|
-
*/
|
|
190
|
-
export interface BotClassAndLogger {
|
|
191
|
-
BotManager: typeof BotManager;
|
|
192
|
-
logDebuger: any;
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
/** Экземпляр BotManager */
|
|
196
|
-
export const bot: BotManager;
|
|
197
|
-
|
|
198
|
-
/** Класс BotManager и логгер */
|
|
199
|
-
export const botClassAndLoger: BotClassAndLogger;
|
|
200
|
-
}
|
package/docs/examples/chat.js
DELETED
|
@@ -1,87 +0,0 @@
|
|
|
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); // получаем оригинальный клиент teeworlds
|
|
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,66 +0,0 @@
|
|
|
1
|
-
// Пример писался под комит c453b96f9fd717375f5ff70525603b7e1491c290.
|
|
2
|
-
|
|
3
|
-
const DebugLogger = require('loger0374');
|
|
4
|
-
const { bot, botClassAndLoger } = require('../../index');
|
|
5
|
-
const botdebug = botClassAndLoger.logDebuger;
|
|
6
|
-
botdebug.setDebugMode(true, true, true);
|
|
7
|
-
|
|
8
|
-
const logDebuger = new DebugLogger('example', true, true, null, true);
|
|
9
|
-
|
|
10
|
-
async function main() {
|
|
11
|
-
logDebuger.logDebug('Main started');
|
|
12
|
-
|
|
13
|
-
const identitybot = {
|
|
14
|
-
name: "Towa",
|
|
15
|
-
clan: "Towa Team",
|
|
16
|
-
skin: "Astolfofinho",
|
|
17
|
-
use_custom_color: 1,
|
|
18
|
-
color_body: 16711680,
|
|
19
|
-
color_feet: 16711680,
|
|
20
|
-
country: 804
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
const botName = await bot.createBot('45.141.57.22:8311', 'Towa', {
|
|
24
|
-
identity: identitybot,
|
|
25
|
-
reconnect: true,
|
|
26
|
-
reconnectAttempts: -1,
|
|
27
|
-
randreconnect: true
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
bot.connectBot(botName); // подкюлчаем
|
|
31
|
-
|
|
32
|
-
const botClient = bot.getBotClient(botName); // получаем оригинальный клиент teeworlds
|
|
33
|
-
|
|
34
|
-
// Подписка на событие подключения
|
|
35
|
-
bot.on(`${botName}:connect`, () => {
|
|
36
|
-
let timemsg = 0; // время
|
|
37
|
-
|
|
38
|
-
setTimeout(() => {
|
|
39
|
-
botClient.game.Say('Ку всем');
|
|
40
|
-
}, 1251);
|
|
41
|
-
|
|
42
|
-
// подписка на чат
|
|
43
|
-
bot.on(`${botName}:ChatNoSystem`, (msgraw, autormsg, text, team, client_id) => {
|
|
44
|
-
logDebuger.logDebug(`${client_id} ${team} '${autormsg}' : ${text}`); // вывод чата в консоль
|
|
45
|
-
if (text == 'exit') exit(); // выход
|
|
46
|
-
|
|
47
|
-
// Эхо-логика
|
|
48
|
-
if (Date.now() - timemsg > 6000) {
|
|
49
|
-
timemsg = Date.now(); // устанавливаем текущее время
|
|
50
|
-
if (text && autormsg) {
|
|
51
|
-
botClient.game.Say(`${autormsg}: ${text}`); // отправка сообения (teeworlds)
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
// Выход через Ctrl+C
|
|
58
|
-
async function exit() {
|
|
59
|
-
logDebuger.logDebug('Shutting down...');
|
|
60
|
-
await bot.disconnectAllBots(); // отключаем всех ботов
|
|
61
|
-
process.exit(0); // завершаем процес
|
|
62
|
-
}
|
|
63
|
-
process.on('SIGINT', exit); // Ctrl+C
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
if (require.main === module) main();
|
package/docs/examples/main.js
DELETED
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
const { bot, botClassAndLoger } = require('../../index');
|
|
2
|
-
botClassAndLoger.logDebuger.setDebugMode(true, true);
|
|
3
|
-
|
|
4
|
-
async function main() {
|
|
5
|
-
console.log('Main started');
|
|
6
|
-
|
|
7
|
-
const identitybot = {
|
|
8
|
-
name: "Towa",
|
|
9
|
-
clan: "Towa Team",
|
|
10
|
-
skin: "Astolfofinho",
|
|
11
|
-
use_custom_color: 1,
|
|
12
|
-
color_body: 16711680,
|
|
13
|
-
color_feet: 16711680,
|
|
14
|
-
country: -1
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
const botName = await bot.createBot('45.141.57.22:8375', 'Towa', {
|
|
18
|
-
identity: identitybot,
|
|
19
|
-
reconnect: true,
|
|
20
|
-
reconnectAttempts: -1
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
bot.connectBot(botName);
|
|
24
|
-
|
|
25
|
-
const botClient = bot.getBotClient(botName);
|
|
26
|
-
|
|
27
|
-
bot.on(`${botName}:connect`, () => {
|
|
28
|
-
function startemote(botClient, Emotenumber) {
|
|
29
|
-
const intervalemote = setInterval(() => {
|
|
30
|
-
botClient.game.Emote(Emotenumber);
|
|
31
|
-
}, 5000);
|
|
32
|
-
return intervalemote;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
function startnameset(botClient, bot, identitybot) {
|
|
36
|
-
const intervalnameset = setInterval(() => {
|
|
37
|
-
const myclientid = botClient.SnapshotUnpacker.OwnID;
|
|
38
|
-
const me = bot.getPlayerList(botName).find(p => p.client_id === myclientid);
|
|
39
|
-
|
|
40
|
-
if (!me) return;
|
|
41
|
-
|
|
42
|
-
if (me.name !== identitybot.name) {
|
|
43
|
-
botClient.game.ChangePlayerInfo({ ...identitybot, name: identitybot.name });
|
|
44
|
-
}
|
|
45
|
-
}, 10000);
|
|
46
|
-
return intervalnameset;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
let sync = false;
|
|
50
|
-
let intervalemote = startemote(botClient, 2);
|
|
51
|
-
let intervalnameset = startnameset(botClient, bot, identitybot);
|
|
52
|
-
|
|
53
|
-
async function startchatlistener(bot, botName) {
|
|
54
|
-
bot.on(`${botName}:ChatNoSystem`, (msg, autormsg, text, team, client_id) => {
|
|
55
|
-
console.log(`${client_id} ${team} '${autormsg}' : ${text}`);
|
|
56
|
-
|
|
57
|
-
if (text.includes(identitybot.name) && text.includes('%syncE')) {
|
|
58
|
-
sync = true;
|
|
59
|
-
if (intervalemote) clearInterval(intervalemote);
|
|
60
|
-
intervalemote = startemote(botClient, 2);
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
startchatlistener(bot, botName);
|
|
66
|
-
|
|
67
|
-
bot.on(`${botName}:disconnect`, (reason) => {
|
|
68
|
-
clearInterval(intervalemote);
|
|
69
|
-
clearInterval(intervalMove);
|
|
70
|
-
clearInterval(intervalnameset);
|
|
71
|
-
if (reason !== null) console.log(reason);
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
function findbot2(botName, identitybot) {
|
|
75
|
-
const players = bot.getPlayerList(botName);
|
|
76
|
-
|
|
77
|
-
return players.some(player =>
|
|
78
|
-
player.clan === identitybot.clan &&
|
|
79
|
-
player.skin === identitybot.skin &&
|
|
80
|
-
player.name.includes(identitybot.name) &&
|
|
81
|
-
player.name !== identitybot.name
|
|
82
|
-
);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
setInterval(() => {
|
|
86
|
-
if (findbot2(botName, identitybot) && !sync) {
|
|
87
|
-
botClient.game.Say(botName+'%syncE');
|
|
88
|
-
} if (!findbot2(botName, identitybot)) {
|
|
89
|
-
sync = false;
|
|
90
|
-
}
|
|
91
|
-
}, 60000);
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
let x = 100;
|
|
95
|
-
let direction = -1;
|
|
96
|
-
const intervalMove = setInterval(() => {
|
|
97
|
-
x += direction * 10;
|
|
98
|
-
if (x <= -100) {
|
|
99
|
-
direction = 1;
|
|
100
|
-
} else if (x >= 100) {
|
|
101
|
-
direction = -1;
|
|
102
|
-
}
|
|
103
|
-
if (bot.isBotConnected(botName) && bot.isFreezeBot(botName)) {
|
|
104
|
-
if (botClient && botClient.movement) {
|
|
105
|
-
botClient.movement.FlagHookline(true);
|
|
106
|
-
setTimeout(() => {
|
|
107
|
-
botClient.movement.FlagHookline(false);
|
|
108
|
-
}, Math.random() * 50);
|
|
109
|
-
botClient.movement.SetAim(x, -100);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}, Math.random() * 100);
|
|
113
|
-
|
|
114
|
-
async function SayChat(message) {
|
|
115
|
-
botClient.game.Say(message);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
async function exit() {
|
|
119
|
-
console.log('Shutting down...');
|
|
120
|
-
console.log('disconnecting...');
|
|
121
|
-
await bot.disconnectAllBots();
|
|
122
|
-
console.log('Main stopped');
|
|
123
|
-
process.exit(0);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
process.on('SIGINT', () => {
|
|
127
|
-
exit();
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
module.exports.exit = exit;
|
|
131
|
-
module.exports.SayChat = SayChat;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
if (require.main === module) main();
|
|
135
|
-
|
|
136
|
-
module.exports.main = main;
|
|
137
|
-
|
|
138
|
-
// можете щитать ето примером, ето просто как тест
|
|
139
|
-
// тут нет коментариев но если хотите то сами поймите как работает
|
|
140
|
-
// если что то не понятно то спрашивайте ИИ может поможет, надеюсь...
|