@2byte/tgbot-framework 1.0.5 → 1.0.7

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.
Files changed (58) hide show
  1. package/README.md +300 -300
  2. package/bin/2byte-cli.ts +97 -97
  3. package/package.json +54 -54
  4. package/src/cli/CreateBotCommand.ts +181 -181
  5. package/src/cli/GenerateCommand.ts +195 -195
  6. package/src/cli/InitCommand.ts +107 -107
  7. package/src/cli/TgAccountManager.ts +50 -50
  8. package/src/console/migrate.ts +82 -82
  9. package/src/core/ApiService.ts +20 -20
  10. package/src/core/ApiServiceManager.ts +63 -63
  11. package/src/core/App.ts +1157 -1143
  12. package/src/core/BotArtisan.ts +79 -79
  13. package/src/core/BotMigration.ts +30 -30
  14. package/src/core/BotSeeder.ts +66 -66
  15. package/src/core/Model.ts +84 -84
  16. package/src/core/utils.ts +2 -2
  17. package/src/illumination/Artisan.ts +149 -149
  18. package/src/illumination/InlineKeyboard.ts +61 -61
  19. package/src/illumination/Message2Byte.ts +255 -255
  20. package/src/illumination/Message2ByteLiveProgressive.ts +278 -278
  21. package/src/illumination/Message2bytePool.ts +107 -107
  22. package/src/illumination/Migration.ts +186 -186
  23. package/src/illumination/RunSectionRoute.ts +85 -85
  24. package/src/illumination/Section.ts +410 -410
  25. package/src/illumination/SectionComponent.ts +64 -64
  26. package/src/illumination/Telegraf2byteContext.ts +32 -32
  27. package/src/index.ts +42 -42
  28. package/src/libs/TelegramAccountControl.ts +1140 -1140
  29. package/src/libs/TgSender.ts +53 -53
  30. package/src/models/Model.ts +67 -67
  31. package/src/models/Proxy.ts +217 -217
  32. package/src/models/TgAccount.ts +362 -362
  33. package/src/models/index.ts +2 -2
  34. package/src/types.ts +191 -191
  35. package/src/user/UserModel.ts +297 -297
  36. package/src/user/UserStore.ts +119 -119
  37. package/src/workflow/services/MassSendApiService.ts +80 -80
  38. package/templates/bot/.env.example +34 -23
  39. package/templates/bot/artisan.ts +8 -8
  40. package/templates/bot/bot.ts +82 -82
  41. package/templates/bot/database/dbConnector.ts +4 -4
  42. package/templates/bot/database/migrate.ts +9 -9
  43. package/templates/bot/database/migrations/001_create_users.sql +18 -18
  44. package/templates/bot/database/migrations/007_proxy.sql +27 -27
  45. package/templates/bot/database/migrations/008_tg_accounts.sql +32 -32
  46. package/templates/bot/database/seed.ts +14 -14
  47. package/templates/bot/docs/CLI_SERVICES.md +536 -536
  48. package/templates/bot/docs/INPUT_SYSTEM.md +211 -211
  49. package/templates/bot/docs/SERVICE_EXAMPLES.md +384 -384
  50. package/templates/bot/docs/TASK_SYSTEM.md +156 -156
  51. package/templates/bot/models/Model.ts +7 -7
  52. package/templates/bot/models/index.ts +1 -1
  53. package/templates/bot/package.json +30 -30
  54. package/templates/bot/sectionList.ts +9 -9
  55. package/templates/bot/sections/ExampleInputSection.ts +85 -85
  56. package/templates/bot/sections/ExampleLiveTaskerSection.ts +60 -60
  57. package/templates/bot/sections/HomeSection.ts +63 -63
  58. package/templates/bot/workflow/services/ExampleService.ts +23 -23
@@ -1,211 +1,211 @@
1
- # Улучшенная система ввода пользователя
2
-
3
- ## Обзор
4
-
5
- Система ввода была значительно улучшена для поддержки:
6
- - Возможности отмены ввода пользователем
7
- - Настраиваемых опций отмены при создании запроса
8
- - Сохранения состояния ожидания при неверном вводе
9
- - Расширенной валидации, включая файлы
10
- - Гибкой системы валидации для различных типов ботов
11
-
12
- ## Основные возможности
13
-
14
- ### 1. Настройка отмены ввода
15
-
16
- При создании запроса на ввод можно настроить возможность отмены:
17
-
18
- ```typescript
19
- // Разрешить отмену (по умолчанию)
20
- .requestInput("phone", {
21
- validator: "phone",
22
- allowCancel: true, // по умолчанию true
23
- cancelButtonText: "Отмена", // текст кнопки
24
- cancelAction: "home.index[cancel_wait=1]", // действие при отмене
25
- })
26
-
27
- // Запретить отмену (обязательный ввод)
28
- .requestInputWithAwait("password", {
29
- allowCancel: false, // отмена запрещена
30
- errorMessage: "Пароль обязателен для ввода"
31
- })
32
- ```
33
-
34
- ### 2. Сохранение состояния при ошибках
35
-
36
- При неверном вводе пользователь остается в режиме ожидания:
37
-
38
- ```typescript
39
- .requestInput("code", {
40
- validator: "code",
41
- errorMessage: "Неверный формат кода. Введите 5-6 цифр",
42
- allowCancel: true
43
- })
44
- ```
45
-
46
- Система будет:
47
- - Показывать сообщение об ошибке
48
- - Увеличивать счетчик попыток
49
- - Сохранять состояние ожидания
50
- - Позволять отмену только если `allowCancel: true`
51
-
52
- ### 3. Валидация файлов
53
-
54
- Поддержка загрузки и валидации файлов:
55
-
56
- ```typescript
57
- .requestInput("uploadedFile", {
58
- validator: "file",
59
- errorMessage: "Неподдерживаемый формат файла",
60
- fileValidation: {
61
- allowedTypes: ['image/jpeg', 'image/png', 'application/pdf'],
62
- maxSize: 10 * 1024 * 1024, // 10 МБ
63
- minSize: 1024, // 1 КБ
64
- },
65
- allowCancel: true
66
- })
67
- ```
68
-
69
- ### 4. Кастомная валидация
70
-
71
- Поддержка асинхронных валидаторов:
72
-
73
- ```typescript
74
- .requestInput("customData", {
75
- validator: async (value) => {
76
- // Асинхронная проверка
77
- const isValid = await checkInDatabase(value);
78
- return isValid;
79
- },
80
- errorMessage: "Данные не прошли проверку"
81
- })
82
- ```
83
-
84
- ## Типы валидаторов
85
-
86
- ### Встроенные валидаторы:
87
- - `"number"` - числовые значения
88
- - `"phone"` - российские номера телефонов (79xxxxxxxxx)
89
- - `"code"` - коды подтверждения (5-6 цифр)
90
- - `"file"` - файлы (с дополнительными опциями)
91
-
92
- ### Кастомные валидаторы:
93
- ```typescript
94
- // Синхронный валидатор
95
- validator: (value: string) => value.length > 5
96
-
97
- // Асинхронный валидатор
98
- validator: async (value: string) => {
99
- const result = await apiCall(value);
100
- return result.isValid;
101
- }
102
- ```
103
-
104
- ## Примеры использования
105
-
106
- ### Базовый ввод с отменой
107
- ```typescript
108
- async startRegistration() {
109
- await this.message("Введите ваш номер телефона:")
110
- .requestInput("phone", {
111
- validator: "phone",
112
- errorMessage: "Неверный формат. Используйте: 79000000000",
113
- allowCancel: true,
114
- cancelButtonText: "Отмена",
115
- cancelAction: "home.index[cancel_wait=1]",
116
- runSection: new RunSectionRoute().section("home").method("processPhone")
117
- })
118
- .send();
119
- }
120
- ```
121
-
122
- ### Обязательный ввод без отмены
123
- ```typescript
124
- async requestPassword() {
125
- return await this.message("Введите пароль:")
126
- .requestInputWithAwait("password", {
127
- errorMessage: "Пароль не может быть пустым",
128
- allowCancel: false // отмена запрещена
129
- });
130
- }
131
- ```
132
-
133
- ### Загрузка файлов с валидацией
134
- ```typescript
135
- async uploadDocument() {
136
- await this.message("Отправьте документ (PDF, до 5 МБ):")
137
- .requestInput("document", {
138
- validator: "file",
139
- fileValidation: {
140
- allowedTypes: ['application/pdf'],
141
- maxSize: 5 * 1024 * 1024,
142
- minSize: 1024
143
- },
144
- errorMessage: "Только PDF файлы до 5 МБ",
145
- allowCancel: true,
146
- runSection: new RunSectionRoute().section("home").method("processDocument")
147
- })
148
- .send();
149
- }
150
- ```
151
-
152
- ### Кастомная валидация с API
153
- ```typescript
154
- async requestUsername() {
155
- await this.message("Введите желаемое имя пользователя:")
156
- .requestInput("username", {
157
- validator: async (username: string) => {
158
- // Проверяем доступность имени через API
159
- const response = await fetch(`/api/check-username/${username}`);
160
- const data = await response.json();
161
- return data.available;
162
- },
163
- errorMessage: "Это имя уже занято. Попробуйте другое.",
164
- allowCancel: true,
165
- runSection: new RunSectionRoute().section("user").method("processUsername")
166
- })
167
- .send();
168
- }
169
- ```
170
-
171
- ## Обработка отмены
172
-
173
- Отмена обрабатывается автоматически через параметр `cancel_wait`:
174
-
175
- ```typescript
176
- // В конструкторе Section автоматически вызывается:
177
- this.cancelUserWaitingReply();
178
-
179
- // Который проверяет параметр cancel_wait и очищает состояние ожидания
180
- ```
181
-
182
- ## Миграция с старой системы
183
-
184
- ### Было:
185
- ```typescript
186
- .requestInput("phone", {
187
- validator: "phone",
188
- errorMessage: "Неверный номер"
189
- })
190
- ```
191
-
192
- ### Стало:
193
- ```typescript
194
- .requestInput("phone", {
195
- validator: "phone",
196
- errorMessage: "Неверный номер",
197
- allowCancel: true, // новый параметр
198
- cancelButtonText: "Отмена", // настройка текста кнопки
199
- cancelAction: "home.index[cancel_wait=1]" // действие при отмене
200
- })
201
- ```
202
-
203
- Старый код будет работать с настройками по умолчанию (отмена разрешена).
204
-
205
- ## Лучшие практики
206
-
207
- 1. **Всегда предоставляйте возможность отмены** для необязательных действий
208
- 2. **Используйте понятные сообщения об ошибках** с указанием формата
209
- 3. **Ограничивайте размеры файлов** для предотвращения злоупотреблений
210
- 4. **Используйте асинхронную валидацию** для проверок через API
211
- 5. **Тестируйте различные сценарии** включая отмену и повторные попытки
1
+ # Улучшенная система ввода пользователя
2
+
3
+ ## Обзор
4
+
5
+ Система ввода была значительно улучшена для поддержки:
6
+ - Возможности отмены ввода пользователем
7
+ - Настраиваемых опций отмены при создании запроса
8
+ - Сохранения состояния ожидания при неверном вводе
9
+ - Расширенной валидации, включая файлы
10
+ - Гибкой системы валидации для различных типов ботов
11
+
12
+ ## Основные возможности
13
+
14
+ ### 1. Настройка отмены ввода
15
+
16
+ При создании запроса на ввод можно настроить возможность отмены:
17
+
18
+ ```typescript
19
+ // Разрешить отмену (по умолчанию)
20
+ .requestInput("phone", {
21
+ validator: "phone",
22
+ allowCancel: true, // по умолчанию true
23
+ cancelButtonText: "Отмена", // текст кнопки
24
+ cancelAction: "home.index[cancel_wait=1]", // действие при отмене
25
+ })
26
+
27
+ // Запретить отмену (обязательный ввод)
28
+ .requestInputWithAwait("password", {
29
+ allowCancel: false, // отмена запрещена
30
+ errorMessage: "Пароль обязателен для ввода"
31
+ })
32
+ ```
33
+
34
+ ### 2. Сохранение состояния при ошибках
35
+
36
+ При неверном вводе пользователь остается в режиме ожидания:
37
+
38
+ ```typescript
39
+ .requestInput("code", {
40
+ validator: "code",
41
+ errorMessage: "Неверный формат кода. Введите 5-6 цифр",
42
+ allowCancel: true
43
+ })
44
+ ```
45
+
46
+ Система будет:
47
+ - Показывать сообщение об ошибке
48
+ - Увеличивать счетчик попыток
49
+ - Сохранять состояние ожидания
50
+ - Позволять отмену только если `allowCancel: true`
51
+
52
+ ### 3. Валидация файлов
53
+
54
+ Поддержка загрузки и валидации файлов:
55
+
56
+ ```typescript
57
+ .requestInput("uploadedFile", {
58
+ validator: "file",
59
+ errorMessage: "Неподдерживаемый формат файла",
60
+ fileValidation: {
61
+ allowedTypes: ['image/jpeg', 'image/png', 'application/pdf'],
62
+ maxSize: 10 * 1024 * 1024, // 10 МБ
63
+ minSize: 1024, // 1 КБ
64
+ },
65
+ allowCancel: true
66
+ })
67
+ ```
68
+
69
+ ### 4. Кастомная валидация
70
+
71
+ Поддержка асинхронных валидаторов:
72
+
73
+ ```typescript
74
+ .requestInput("customData", {
75
+ validator: async (value) => {
76
+ // Асинхронная проверка
77
+ const isValid = await checkInDatabase(value);
78
+ return isValid;
79
+ },
80
+ errorMessage: "Данные не прошли проверку"
81
+ })
82
+ ```
83
+
84
+ ## Типы валидаторов
85
+
86
+ ### Встроенные валидаторы:
87
+ - `"number"` - числовые значения
88
+ - `"phone"` - российские номера телефонов (79xxxxxxxxx)
89
+ - `"code"` - коды подтверждения (5-6 цифр)
90
+ - `"file"` - файлы (с дополнительными опциями)
91
+
92
+ ### Кастомные валидаторы:
93
+ ```typescript
94
+ // Синхронный валидатор
95
+ validator: (value: string) => value.length > 5
96
+
97
+ // Асинхронный валидатор
98
+ validator: async (value: string) => {
99
+ const result = await apiCall(value);
100
+ return result.isValid;
101
+ }
102
+ ```
103
+
104
+ ## Примеры использования
105
+
106
+ ### Базовый ввод с отменой
107
+ ```typescript
108
+ async startRegistration() {
109
+ await this.message("Введите ваш номер телефона:")
110
+ .requestInput("phone", {
111
+ validator: "phone",
112
+ errorMessage: "Неверный формат. Используйте: 79000000000",
113
+ allowCancel: true,
114
+ cancelButtonText: "Отмена",
115
+ cancelAction: "home.index[cancel_wait=1]",
116
+ runSection: new RunSectionRoute().section("home").method("processPhone")
117
+ })
118
+ .send();
119
+ }
120
+ ```
121
+
122
+ ### Обязательный ввод без отмены
123
+ ```typescript
124
+ async requestPassword() {
125
+ return await this.message("Введите пароль:")
126
+ .requestInputWithAwait("password", {
127
+ errorMessage: "Пароль не может быть пустым",
128
+ allowCancel: false // отмена запрещена
129
+ });
130
+ }
131
+ ```
132
+
133
+ ### Загрузка файлов с валидацией
134
+ ```typescript
135
+ async uploadDocument() {
136
+ await this.message("Отправьте документ (PDF, до 5 МБ):")
137
+ .requestInput("document", {
138
+ validator: "file",
139
+ fileValidation: {
140
+ allowedTypes: ['application/pdf'],
141
+ maxSize: 5 * 1024 * 1024,
142
+ minSize: 1024
143
+ },
144
+ errorMessage: "Только PDF файлы до 5 МБ",
145
+ allowCancel: true,
146
+ runSection: new RunSectionRoute().section("home").method("processDocument")
147
+ })
148
+ .send();
149
+ }
150
+ ```
151
+
152
+ ### Кастомная валидация с API
153
+ ```typescript
154
+ async requestUsername() {
155
+ await this.message("Введите желаемое имя пользователя:")
156
+ .requestInput("username", {
157
+ validator: async (username: string) => {
158
+ // Проверяем доступность имени через API
159
+ const response = await fetch(`/api/check-username/${username}`);
160
+ const data = await response.json();
161
+ return data.available;
162
+ },
163
+ errorMessage: "Это имя уже занято. Попробуйте другое.",
164
+ allowCancel: true,
165
+ runSection: new RunSectionRoute().section("user").method("processUsername")
166
+ })
167
+ .send();
168
+ }
169
+ ```
170
+
171
+ ## Обработка отмены
172
+
173
+ Отмена обрабатывается автоматически через параметр `cancel_wait`:
174
+
175
+ ```typescript
176
+ // В конструкторе Section автоматически вызывается:
177
+ this.cancelUserWaitingReply();
178
+
179
+ // Который проверяет параметр cancel_wait и очищает состояние ожидания
180
+ ```
181
+
182
+ ## Миграция с старой системы
183
+
184
+ ### Было:
185
+ ```typescript
186
+ .requestInput("phone", {
187
+ validator: "phone",
188
+ errorMessage: "Неверный номер"
189
+ })
190
+ ```
191
+
192
+ ### Стало:
193
+ ```typescript
194
+ .requestInput("phone", {
195
+ validator: "phone",
196
+ errorMessage: "Неверный номер",
197
+ allowCancel: true, // новый параметр
198
+ cancelButtonText: "Отмена", // настройка текста кнопки
199
+ cancelAction: "home.index[cancel_wait=1]" // действие при отмене
200
+ })
201
+ ```
202
+
203
+ Старый код будет работать с настройками по умолчанию (отмена разрешена).
204
+
205
+ ## Лучшие практики
206
+
207
+ 1. **Всегда предоставляйте возможность отмены** для необязательных действий
208
+ 2. **Используйте понятные сообщения об ошибках** с указанием формата
209
+ 3. **Ограничивайте размеры файлов** для предотвращения злоупотреблений
210
+ 4. **Используйте асинхронную валидацию** для проверок через API
211
+ 5. **Тестируйте различные сценарии** включая отмену и повторные попытки