You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
# State Machine для управления вступлением бота в канал
2
+
3
+
## Обзор
4
+
5
+
В проекте используется gem `state_machines-activerecord` для управления процессом вступления бота в Telegram каналы. State machine обеспечивает строгий контроль над переходами между состояниями и предоставляет удобные методы для работы со статусами.
6
+
7
+
## Состояния
8
+
9
+
-**`not_joined`** - Бот еще не вступал в канал (начальное состояние)
10
+
-**`joining`** - Процесс вступления в канал выполняется
11
+
-**`joined`** - Бот успешно вступил в канал
12
+
-**`join_failed`** - Не удалось вступить в канал
13
+
14
+
## Переходы (Events)
15
+
16
+
### `start_joining`
17
+
-`not_joined` → `joining`
18
+
-`join_failed` → `joining` (повторная попытка)
19
+
-`joined` → `joining` (повторное вступление)
20
+
21
+
### `complete_join`
22
+
-`joining` → `joined`
23
+
24
+
### `fail_join`
25
+
-`joining` → `join_failed`
26
+
27
+
## Методы
28
+
29
+
### Основные методы
30
+
31
+
```ruby
32
+
# Начать процесс вступления
33
+
channel.start_joining!
34
+
# Возвращает true/false и логирует результат
35
+
36
+
# Отметить успешное вступление
37
+
channel.mark_as_joined!
38
+
# Автоматически устанавливает bot_join_at и очищает ошибки
39
+
40
+
# Отметить неудачное вступление
41
+
channel.mark_as_join_failed!("Ошибка: канал не найден")
42
+
# Сохраняет ошибку в bot_join_error
43
+
44
+
# Проверить статус
45
+
channel.not_joined?
46
+
channel.joining?
47
+
channel.joined?
48
+
channel.join_failed?
49
+
50
+
# Проверить может ли бот мониторить канал
51
+
channel.bot_can_monitor?
52
+
# true только если active? && joined?
53
+
```
54
+
55
+
### Guards (Защита от неверных переходов)
56
+
57
+
- Нельзя начать вступление в неактивный канал
58
+
- Только определенные переходы разрешены
59
+
60
+
### Callbacks
61
+
62
+
-**Перед началом вступления**: очищает предыдущие ошибки
0 commit comments