karboai 1.3.0 → 1.5.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.RU.md ADDED
@@ -0,0 +1,414 @@
1
+ # KarboAI — Русская документация
2
+
3
+ [🇬🇧 English documentation](./README.md)
4
+
5
+ Библиотека для создания ботов в приложении [KarboAI](https://karboai.com).
6
+
7
+ ## Содержание
8
+
9
+ - [Установка](#установка)
10
+ - [Быстрый старт](#быстрый-старт)
11
+ - [Преимущества](#преимущества)
12
+ - [Класс KarboAI](#класс-karboai)
13
+ - [Конструктор](#конструктор)
14
+ - [Геттеры](#геттеры)
15
+ - [Публичные методы](#публичные-методы)
16
+ - [me()](#me)
17
+ - [text()](#text)
18
+ - [image()](#image)
19
+ - [upload()](#upload)
20
+ - [message()](#message)
21
+ - [members()](#members)
22
+ - [user()](#user)
23
+ - [leave()](#leave)
24
+ - [kick()](#kick)
25
+ - [attach()](#attach)
26
+ - [bind()](#bind)
27
+ - [Класс Router](#класс-router)
28
+ - [Конструктор](#конструктор-router)
29
+ - [Геттеры](#геттеры-router)
30
+ - [Методы](#методы-router)
31
+ - [pre()](#pre)
32
+ - [on()](#on)
33
+ - [command()](#command)
34
+ - [Схемы](#схемы)
35
+ - [Логирование](#логирование)
36
+
37
+ ## Установка
38
+
39
+ ```bash
40
+ npm install karboai
41
+ ```
42
+
43
+ ## Быстрый старт
44
+
45
+ ```typescript
46
+ import { KarboAI, Router } from 'karboai';
47
+
48
+ const karbo = new KarboAI({
49
+ token: 'ваш-токен-бота',
50
+ id: 'ваш-id-бота',
51
+ enableLogging: true,
52
+ });
53
+
54
+ const router = new Router();
55
+
56
+ router.command('/start', async ({ karbo, message }) => {
57
+ await karbo.text(message.chatId, 'Привет! Добро пожаловать в KarboAI бот.');
58
+ });
59
+
60
+ router.on('message', async ({ karbo, message }) => {
61
+ await karbo.text(message.chatId, `Вы сказали: ${message.content}`);
62
+ });
63
+
64
+ karbo.bind(router);
65
+ karbo.attach();
66
+ ```
67
+
68
+ ## Преимущества
69
+
70
+ - **Типизация** — Полная поддержка TypeScript с валидацией Zod-схемами всех ответов API
71
+ - **WebSocket** — Обработка сообщений в реальном времени через socket.io-client
72
+ - **Система роутеров** — Модульная архитектура с поддержкой роутеров и промежуточного ПО
73
+ - **Middleware** — Конвейер промежуточного ПО для фильтрации и обработки событий
74
+ - **Команды** — Встроенный парсер команд с поиском по префиксу
75
+ - **Логирование** — Опциональное структурированное логирование через pino
76
+ - **Обработка ошибок** — Исчерпывающие типы ошибок для всех HTTP-статусов
77
+ - **Загрузка файлов** — Поддержка multipart/form-data для загрузки изображений
78
+ - **Чистый API** — Интуитивные имена методов в camelCase
79
+
80
+ ## Класс KarboAI
81
+
82
+ Основной класс для взаимодействия с API KarboAI.
83
+
84
+ ### Конструктор
85
+
86
+ ```typescript
87
+ new KarboAI(config: KarboConfig)
88
+ ```
89
+
90
+ **Параметры:**
91
+ - `config.token` — Токен аутентификации бота
92
+ - `config.id` — ID бота
93
+ - `config.enableLogging?` — Включить логирование (по умолчанию: `false`)
94
+
95
+ **Пример:**
96
+ ```typescript
97
+ const karbo = new KarboAI({
98
+ token: 'ваш-токен-бота',
99
+ id: 'ваш-id-бота',
100
+ enableLogging: true,
101
+ });
102
+ ```
103
+
104
+ ### Геттеры
105
+
106
+ #### `id`
107
+
108
+ Возвращает ID бота из конфигурации.
109
+
110
+ ```typescript
111
+ console.log(karbo.id); // 'ваш-id-бота'
112
+ ```
113
+
114
+ ### Публичные методы
115
+
116
+ #### `me()`
117
+
118
+ Возвращает информацию о боте.
119
+
120
+ **Возвращает:** `Promise<MeResponse>` — Объект с полями `botId`, `name`, `status`
121
+
122
+ **Пример:**
123
+ ```typescript
124
+ const botInfo = await karbo.me();
125
+ console.log(botInfo.name, botInfo.status);
126
+ ```
127
+
128
+ #### `text(chatId, content, replyMessageId?)`
129
+
130
+ Отправляет текстовое сообщение в чат.
131
+
132
+ **Параметры:**
133
+ - `chatId` — ID целевого чата
134
+ - `content` — Текст сообщения
135
+ - `replyMessageId?` — Опциональный ID сообщения для ответа
136
+
137
+ **Возвращает:** `Promise<MessageResponse>` — Объект с `messageId` и `createdAt`
138
+
139
+ **Пример:**
140
+ ```typescript
141
+ await karbo.text('chat-123', 'Привет, мир!');
142
+ await karbo.text('chat-123', 'Отвечаю на сообщение', 'msg-456');
143
+ ```
144
+
145
+ #### `image(chatId, images, replyMessageId?)`
146
+
147
+ Отправляет изображения в чат.
148
+
149
+ **Параметры:**
150
+ - `chatId` — ID целевого чата
151
+ - `images` — Массив URL-адресов изображений
152
+ - `replyMessageId?` — Опциональный ID сообщения для ответа
153
+
154
+ **Возвращает:** `Promise<MessageResponse>` — Объект с `messageId` и `createdAt`
155
+
156
+ **Пример:**
157
+ ```typescript
158
+ await karbo.image('chat-123', ['https://example.com/img1.jpg', 'https://example.com/img2.jpg']);
159
+ ```
160
+
161
+ #### `upload(path)`
162
+
163
+ Загружает файл изображения и возвращает его URL.
164
+
165
+ **Параметры:**
166
+ - `path` — Путь к файлу на диске
167
+
168
+ **Возвращает:** `Promise<string>` — URL загруженного изображения
169
+
170
+ **Пример:**
171
+ ```typescript
172
+ const imageUrl = await karbo.upload('/путь/к/изображению.png');
173
+ await karbo.image('chat-123', [imageUrl]);
174
+ ```
175
+
176
+ #### `message(chatId, messageId)`
177
+
178
+ Получает конкретное сообщение из чата.
179
+
180
+ **Параметры:**
181
+ - `chatId` — ID чата
182
+ - `messageId` — ID сообщения
183
+
184
+ **Возвращает:** `Promise<Message>` — Объект сообщения
185
+
186
+ **Пример:**
187
+ ```typescript
188
+ const msg = await karbo.message('chat-123', 'msg-456');
189
+ console.log(msg.content, msg.author);
190
+ ```
191
+
192
+ #### `members(chatId, limit?, offset?)`
193
+
194
+ Получает участников чата.
195
+
196
+ **Параметры:**
197
+ - `chatId` — ID чата
198
+ - `limit?` — Количество участников (по умолчанию: `100`)
199
+ - `offset?` — Смещение для пагинации (по умолчанию: `0`)
200
+
201
+ **Возвращает:** `Promise<MembersResponse>` — Объект с массивом `items` типа `User`
202
+
203
+ **Пример:**
204
+ ```typescript
205
+ const members = await karbo.members('chat-123', 50, 0);
206
+ console.log(members.items);
207
+ ```
208
+
209
+ #### `user(userId)`
210
+
211
+ Получает информацию о пользователе.
212
+
213
+ **Параметры:**
214
+ - `userId` — ID пользователя
215
+
216
+ **Возвращает:** `Promise<User>` — Объект пользователя
217
+
218
+ **Пример:**
219
+ ```typescript
220
+ const user = await karbo.user('user-123');
221
+ console.log(user);
222
+ ```
223
+
224
+ #### `leave(chatId)`
225
+
226
+ Заставляет бота покинуть чат.
227
+
228
+ **Параметры:**
229
+ - `chatId` — ID чата
230
+
231
+ **Возвращает:** `Promise<boolean>` — Статус успешности
232
+
233
+ **Пример:**
234
+ ```typescript
235
+ const success = await karbo.leave('chat-123');
236
+ ```
237
+
238
+ #### `kick(chatId, userId)`
239
+
240
+ Выгоняет пользователя из чата.
241
+
242
+ **Параметры:**
243
+ - `chatId` — ID чата
244
+ - `userId` — ID пользователя для выгона
245
+
246
+ **Возвращает:** `Promise<boolean>` — Статус успешности
247
+
248
+ **Пример:**
249
+ ```typescript
250
+ const success = await karbo.kick('chat-123', 'user-456');
251
+ ```
252
+
253
+ #### `attach(callback?)`
254
+
255
+ Подключается к WebSocket KarboAI и начинает прослушивать события.
256
+
257
+ **Параметры:**
258
+ - `callback?` — Асинхронная функция, вызываемая после успешного подключения
259
+
260
+ **Пример:**
261
+ ```typescript
262
+ karbo.attach(async () => {
263
+ console.log('Бот теперь онлайн и слушает сообщения');
264
+ });
265
+ ```
266
+
267
+ #### `bind(...routers)`
268
+
269
+ Привязывает один или несколько роутеров к диспетчеру.
270
+
271
+ **Параметры:**
272
+ - `...routers` — Rest-параметр с экземплярами `Router`
273
+
274
+ **Пример:**
275
+ ```typescript
276
+ const mainRouter = new Router('main');
277
+ const adminRouter = new Router('admin');
278
+
279
+ mainRouter.command('/start', async ({ karbo, message }) => {
280
+ await karbo.text(message.chatId, 'Привет!');
281
+ });
282
+
283
+ adminRouter.command('/ban', async ({ karbo, message }) => {
284
+ // логика администратора
285
+ });
286
+
287
+ karbo.bind(mainRouter, adminRouter);
288
+ ```
289
+
290
+ ## Класс Router
291
+
292
+ Класс для организации обработчиков событий в модульные единицы.
293
+
294
+ ### Конструктор
295
+
296
+ ```typescript
297
+ new Router(name?: string)
298
+ ```
299
+
300
+ **Параметры:**
301
+ - `name?` — Имя роутера (генерируется автоматически, если не указано)
302
+
303
+ **Пример:**
304
+ ```typescript
305
+ const router = new Router('my-router');
306
+ ```
307
+
308
+ ### Геттеры
309
+
310
+ #### `name`
311
+
312
+ Возвращает имя роутера.
313
+
314
+ ```typescript
315
+ console.log(router.name); // 'my-router'
316
+ ```
317
+
318
+ #### `listeners`
319
+
320
+ Возвращает `Map` всех зарегистрированных обработчиков событий.
321
+
322
+ ```typescript
323
+ console.log(router.listeners); // Map<SocketEvent, Set<Listener>>
324
+ ```
325
+
326
+ ### Методы
327
+
328
+ #### `pre(middleware)`
329
+
330
+ Добавляет промежуточное ПО, выполняемое до вызова callback'ов событий.
331
+
332
+ **Параметры:**
333
+ - `middleware` — Функция, принимающая `KarboContext` и возвращающая `Promise<boolean>`
334
+
335
+ **Пример:**
336
+ ```typescript
337
+ router.pre(async ({ message }) => {
338
+ // Обрабатывать только сообщения с содержимым
339
+ return message.content.length > 0;
340
+ });
341
+ ```
342
+
343
+ #### `on(event, callback)`
344
+
345
+ Регистрирует обработчик события.
346
+
347
+ **Параметры:**
348
+ - `event` — Тип события (`'message'` | `'join'`)
349
+ - `callback` — Асинхронная функция, принимающая `KarboContext`
350
+
351
+ **Пример:**
352
+ ```typescript
353
+ router.on('message', async ({ karbo, message }) => {
354
+ console.log(`Новое сообщение в ${message.chatId}: ${message.content}`);
355
+ await karbo.text(message.chatId, 'Понял!');
356
+ });
357
+
358
+ router.on('join', async ({ karbo, message }) => {
359
+ await karbo.text(message.chatId, `Добро пожаловать, ${message.author.userId}!`);
360
+ });
361
+ ```
362
+
363
+ #### `command(startsWith, callback)`
364
+
365
+ Регистрирует обработчик команд, срабатывающий когда содержимое сообщения начинается с указанной строки.
366
+
367
+ **Параметры:**
368
+ - `startsWith` — Префикс команды для сопоставления
369
+ - `callback` — Асинхронная функция, принимающая `KarboContext`
370
+
371
+ **Пример:**
372
+ ```typescript
373
+ router.command('/help', async ({ karbo, message }) => {
374
+ await karbo.text(message.chatId, 'Доступные команды: /start, /help');
375
+ });
376
+
377
+ router.command('/start', async ({ karbo, message }) => {
378
+ await karbo.text(message.chatId, 'Добро пожаловать!');
379
+ });
380
+ ```
381
+
382
+ ## Схемы
383
+
384
+ Библиотека экспортирует несколько TypeScript-типов и Zod-схем:
385
+
386
+ - `KarboConfig` — Конфигурация для класса KarboAI
387
+ - `SendMessageConfig` — Конфигурация для отправки сообщений
388
+ - `Message` — Структура объекта сообщения
389
+ - `User`, `Author`, `Member` — Типы, связанные с пользователями
390
+ - `KarboContext` — Контекст, передаваемый в callback'и событий
391
+
392
+ ```typescript
393
+ import { KarboConfig, Message, KarboContext, User } from 'karboai';
394
+ ```
395
+
396
+ ## Логирование
397
+
398
+ Включите структурированное логирование, установив `enableLogging: true` в конфигурации:
399
+
400
+ ```typescript
401
+ const karbo = new KarboAI({
402
+ token: 'ваш-токен',
403
+ id: 'ваш-id',
404
+ enableLogging: true,
405
+ });
406
+ ```
407
+
408
+ Логи включают HTTP-запросы, коды статусов и входящие события.
409
+
410
+ ---
411
+
412
+ **Лицензия:** MIT
413
+ **Автор:** celt_is_god
414
+ **Репозиторий:** [github.com/thatcelt/KarboAI](https://github.com/thatcelt/KarboAI)