obabot 0.1.0__tar.gz
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.
- obabot-0.1.0/.github/SECRETS_SETUP.md +100 -0
- obabot-0.1.0/.github/workflows/test.yml +234 -0
- obabot-0.1.0/.gitignore +55 -0
- obabot-0.1.0/BUSINESS_VALUE.md +218 -0
- obabot-0.1.0/INTERFACE_COVERAGE.md +244 -0
- obabot-0.1.0/LICENSE +29 -0
- obabot-0.1.0/PKG-INFO +356 -0
- obabot-0.1.0/README.md +340 -0
- obabot-0.1.0/examples/aiogram_migrated.py +253 -0
- obabot-0.1.0/examples/aiogram_original.py +199 -0
- obabot-0.1.0/examples/dual_platform.py +185 -0
- obabot-0.1.0/examples/max_only.py +137 -0
- obabot-0.1.0/examples/telegram_only.py +139 -0
- obabot-0.1.0/examples/test_mode_example.py +81 -0
- obabot-0.1.0/obabot/__init__.py +39 -0
- obabot-0.1.0/obabot/adapters/__init__.py +29 -0
- obabot-0.1.0/obabot/adapters/keyboard.py +342 -0
- obabot-0.1.0/obabot/adapters/max_callback.py +365 -0
- obabot-0.1.0/obabot/adapters/max_file.py +159 -0
- obabot-0.1.0/obabot/adapters/message.py +1114 -0
- obabot-0.1.0/obabot/adapters/telegram_callback.py +211 -0
- obabot-0.1.0/obabot/adapters/user.py +93 -0
- obabot-0.1.0/obabot/config.py +296 -0
- obabot-0.1.0/obabot/context.py +61 -0
- obabot-0.1.0/obabot/detection.py +168 -0
- obabot-0.1.0/obabot/factory.py +160 -0
- obabot-0.1.0/obabot/filters.py +123 -0
- obabot-0.1.0/obabot/fsm.py +126 -0
- obabot-0.1.0/obabot/mixins.py +70 -0
- obabot-0.1.0/obabot/platforms/__init__.py +8 -0
- obabot-0.1.0/obabot/platforms/base.py +85 -0
- obabot-0.1.0/obabot/platforms/lazy.py +94 -0
- obabot-0.1.0/obabot/platforms/max.py +632 -0
- obabot-0.1.0/obabot/platforms/telegram.py +127 -0
- obabot-0.1.0/obabot/proxy/__init__.py +8 -0
- obabot-0.1.0/obabot/proxy/bot.py +1179 -0
- obabot-0.1.0/obabot/proxy/dispatcher.py +607 -0
- obabot-0.1.0/obabot/proxy/router.py +525 -0
- obabot-0.1.0/obabot/types.py +79 -0
- obabot-0.1.0/obabot/utils/__init__.py +21 -0
- obabot-0.1.0/obabot/utils/safe_send.py +107 -0
- obabot-0.1.0/obabot/utils/text_format.py +151 -0
- obabot-0.1.0/pyproject.toml +28 -0
- obabot-0.1.0/pytest.ini +21 -0
- obabot-0.1.0/tests/README.md +81 -0
- obabot-0.1.0/tests/__init__.py +2 -0
- obabot-0.1.0/tests/conftest.py +82 -0
- obabot-0.1.0/tests/test_aiogram_comparison.py +186 -0
- obabot-0.1.0/tests/test_basic.py +173 -0
- obabot-0.1.0/tests/test_bot_methods.py +250 -0
- obabot-0.1.0/tests/test_compatibility.py +97 -0
- obabot-0.1.0/tests/test_detection.py +253 -0
- obabot-0.1.0/tests/test_dispatcher.py +815 -0
- obabot-0.1.0/tests/test_e2e_migration.py +2116 -0
- obabot-0.1.0/tests/test_handlers.py +306 -0
- obabot-0.1.0/tests/test_integration.py +53 -0
- obabot-0.1.0/tests/test_integration_real.py +412 -0
- obabot-0.1.0/tests/test_router_handlers.py +366 -0
- obabot-0.1.0/tests/test_test_mode.py +128 -0
- obabot-0.1.0/tests/test_text_format.py +148 -0
- obabot-0.1.0/tests/test_umaxbot.py +740 -0
- obabot-0.1.0/tests/test_unified_interface.py +728 -0
- obabot-0.1.0/tests/test_webhook_telegram.py +53 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Настройка секретов для тестов
|
|
2
|
+
|
|
3
|
+
Для запуска тестов в GitHub Actions необходимо добавить тестовые токены в секреты репозитория.
|
|
4
|
+
|
|
5
|
+
## Шаги настройки
|
|
6
|
+
|
|
7
|
+
1. Перейдите в настройки репозитория: **Settings** → **Secrets and variables** → **Actions**
|
|
8
|
+
|
|
9
|
+
2. Добавьте следующие секреты:
|
|
10
|
+
|
|
11
|
+
- **TG_TEST_TOKEN** - токен Telegram бота для тестирования
|
|
12
|
+
- **MAX_TEST_TOKEN** - токен Max бота для тестирования
|
|
13
|
+
|
|
14
|
+
3. Нажмите **New repository secret** для каждого токена
|
|
15
|
+
|
|
16
|
+
## Получение тестовых токенов
|
|
17
|
+
|
|
18
|
+
### Telegram
|
|
19
|
+
1. Создайте бота через [@BotFather](https://t.me/BotFather)
|
|
20
|
+
2. Получите токен командой `/newbot`
|
|
21
|
+
3. Используйте этот токен как `TG_TEST_TOKEN`
|
|
22
|
+
|
|
23
|
+
### Max
|
|
24
|
+
1. Перейдите на [developers.max.ru](https://developers.max.ru)
|
|
25
|
+
2. Создайте приложение и бота
|
|
26
|
+
3. Получите токен бота
|
|
27
|
+
4. Используйте этот токен как `MAX_TEST_TOKEN`
|
|
28
|
+
|
|
29
|
+
## Структура тестов в CI
|
|
30
|
+
|
|
31
|
+
GitHub Actions запускает тесты параллельно для максимальной скорости:
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
35
|
+
│ Unit Tests │
|
|
36
|
+
│ (Python 3.10, 3.13, 3.14 - параллельно) │
|
|
37
|
+
└─────────────────────┬───────────────────────────────────────┘
|
|
38
|
+
│
|
|
39
|
+
┌─────────────┴─────────────┐
|
|
40
|
+
│ │
|
|
41
|
+
▼ ▼
|
|
42
|
+
┌───────────────────┐ ┌───────────────────┐
|
|
43
|
+
│ E2E Telegram │ │ E2E Max │
|
|
44
|
+
│ (параллельно) │ │ (параллельно) │
|
|
45
|
+
└─────────┬─────────┘ └─────────┬─────────┘
|
|
46
|
+
│ │
|
|
47
|
+
└───────────┬─────────────┘
|
|
48
|
+
│
|
|
49
|
+
▼
|
|
50
|
+
┌─────────────────────┐
|
|
51
|
+
│ Integration Tests │
|
|
52
|
+
│ (требуют токены) │
|
|
53
|
+
└─────────────────────┘
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Jobs в CI
|
|
57
|
+
|
|
58
|
+
| Job | Описание | Зависимости |
|
|
59
|
+
|-----|----------|-------------|
|
|
60
|
+
| `unit-tests` | Быстрые unit тесты без внешних зависимостей | - |
|
|
61
|
+
| `e2e-telegram` | E2E тесты для Telegram | `unit-tests` |
|
|
62
|
+
| `e2e-max` | E2E тесты для Max | `unit-tests` |
|
|
63
|
+
| `compatibility` | Тесты совместимости с разными версиями aiogram | `unit-tests` |
|
|
64
|
+
| `integration` | Интеграционные тесты с реальными API | `e2e-telegram`, `e2e-max` |
|
|
65
|
+
|
|
66
|
+
## Тесты без токенов
|
|
67
|
+
|
|
68
|
+
Если токены не указаны:
|
|
69
|
+
- **Unit тесты** — выполняются полностью
|
|
70
|
+
- **E2E тесты** — выполняются с симулированными payload'ами
|
|
71
|
+
- **Integration тесты** — пропускаются (skip)
|
|
72
|
+
|
|
73
|
+
## Локальный запуск тестов
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
# Все тесты
|
|
77
|
+
pytest tests/ -v
|
|
78
|
+
|
|
79
|
+
# Только unit тесты
|
|
80
|
+
pytest tests/ -v --ignore=tests/test_e2e_migration.py --ignore=tests/test_integration.py
|
|
81
|
+
|
|
82
|
+
# Только E2E тесты для Telegram
|
|
83
|
+
pytest tests/test_e2e_migration.py -v -k "telegram"
|
|
84
|
+
|
|
85
|
+
# Только E2E тесты для Max
|
|
86
|
+
pytest tests/test_e2e_migration.py -v -k "max"
|
|
87
|
+
|
|
88
|
+
# Тесты для обеих платформ
|
|
89
|
+
pytest tests/test_e2e_migration.py -v -k "dual"
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Маркеры тестов
|
|
93
|
+
|
|
94
|
+
| Маркер | Описание |
|
|
95
|
+
|--------|----------|
|
|
96
|
+
| `@pytest.mark.e2e` | End-to-end тесты |
|
|
97
|
+
| `@pytest.mark.telegram` | Тесты для Telegram |
|
|
98
|
+
| `@pytest.mark.max` | Тесты для Max |
|
|
99
|
+
| `@pytest.mark.dual` | Тесты для обеих платформ |
|
|
100
|
+
| `@pytest.mark.integration` | Тесты с реальными API |
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
name: Tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ main ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ main ]
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
# Unit tests - all Python versions in parallel
|
|
12
|
+
unit-tests:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
strategy:
|
|
15
|
+
fail-fast: false
|
|
16
|
+
matrix:
|
|
17
|
+
python-version: ["3.10", "3.13", "3.14"]
|
|
18
|
+
|
|
19
|
+
name: Unit (Py ${{ matrix.python-version }})
|
|
20
|
+
|
|
21
|
+
steps:
|
|
22
|
+
- uses: actions/checkout@v4
|
|
23
|
+
|
|
24
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
25
|
+
uses: actions/setup-python@v5
|
|
26
|
+
with:
|
|
27
|
+
python-version: ${{ matrix.python-version }}
|
|
28
|
+
|
|
29
|
+
- name: Install dependencies
|
|
30
|
+
run: |
|
|
31
|
+
python -m pip install --upgrade pip
|
|
32
|
+
pip install --upgrade "typing_extensions>=4.8.0"
|
|
33
|
+
pip install pytest pytest-asyncio pytest-cov
|
|
34
|
+
pip install "aiogram>=3.0.0"
|
|
35
|
+
pip install -e ".[dev]"
|
|
36
|
+
pip install --upgrade --force-reinstall "typing_extensions>=4.8.0"
|
|
37
|
+
|
|
38
|
+
- name: Run unit tests
|
|
39
|
+
run: |
|
|
40
|
+
pytest tests/ -v \
|
|
41
|
+
--ignore=tests/test_e2e_migration.py \
|
|
42
|
+
--ignore=tests/test_integration.py \
|
|
43
|
+
--ignore=tests/test_integration_real.py \
|
|
44
|
+
--ignore=tests/test_webhook_telegram.py \
|
|
45
|
+
-m "not integration and not e2e"
|
|
46
|
+
|
|
47
|
+
# Test mode (no tokens, no network) — always runs in CI.
|
|
48
|
+
# We do NOT install aiogram-test-framework: that is for the user's project.
|
|
49
|
+
# Our tests only need: pytest, pytest-asyncio, aiogram, obabot (and umaxbot via obabot).
|
|
50
|
+
test-mode:
|
|
51
|
+
runs-on: ubuntu-latest
|
|
52
|
+
strategy:
|
|
53
|
+
fail-fast: false
|
|
54
|
+
matrix:
|
|
55
|
+
python-version: ["3.10", "3.13"]
|
|
56
|
+
|
|
57
|
+
name: Test mode (Py ${{ matrix.python-version }})
|
|
58
|
+
|
|
59
|
+
steps:
|
|
60
|
+
- uses: actions/checkout@v4
|
|
61
|
+
|
|
62
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
63
|
+
uses: actions/setup-python@v5
|
|
64
|
+
with:
|
|
65
|
+
python-version: ${{ matrix.python-version }}
|
|
66
|
+
|
|
67
|
+
- name: Install dependencies
|
|
68
|
+
run: |
|
|
69
|
+
python -m pip install --upgrade pip
|
|
70
|
+
pip install pytest pytest-asyncio
|
|
71
|
+
pip install "aiogram>=3.0.0"
|
|
72
|
+
pip install -e .
|
|
73
|
+
|
|
74
|
+
- name: Run test-mode tests
|
|
75
|
+
run: |
|
|
76
|
+
pytest tests/test_test_mode.py tests/test_basic.py -v -k "test_mode or test_create_bot_no_tokens"
|
|
77
|
+
|
|
78
|
+
# E2E tests for Telegram
|
|
79
|
+
e2e-telegram:
|
|
80
|
+
runs-on: ubuntu-latest
|
|
81
|
+
|
|
82
|
+
name: E2E Telegram
|
|
83
|
+
|
|
84
|
+
steps:
|
|
85
|
+
- uses: actions/checkout@v4
|
|
86
|
+
|
|
87
|
+
- name: Set up Python 3.13
|
|
88
|
+
uses: actions/setup-python@v5
|
|
89
|
+
with:
|
|
90
|
+
python-version: "3.13"
|
|
91
|
+
|
|
92
|
+
- name: Install dependencies
|
|
93
|
+
run: |
|
|
94
|
+
python -m pip install --upgrade pip
|
|
95
|
+
pip install --upgrade "typing_extensions>=4.8.0"
|
|
96
|
+
pip install pytest pytest-asyncio pytest-cov
|
|
97
|
+
pip install "aiogram>=3.0.0"
|
|
98
|
+
pip install -e ".[dev]"
|
|
99
|
+
pip install --upgrade --force-reinstall "typing_extensions>=4.8.0"
|
|
100
|
+
|
|
101
|
+
- name: Run E2E Telegram tests
|
|
102
|
+
env:
|
|
103
|
+
TG_TOKEN: ${{ secrets.TG_TEST_TOKEN }}
|
|
104
|
+
run: |
|
|
105
|
+
pytest tests/test_e2e_migration.py tests/test_webhook_telegram.py -v \
|
|
106
|
+
-k "telegram or Telegram or tg or dual" \
|
|
107
|
+
--cov=obabot --cov-report=xml
|
|
108
|
+
|
|
109
|
+
- name: Upload coverage
|
|
110
|
+
uses: codecov/codecov-action@v3
|
|
111
|
+
with:
|
|
112
|
+
file: ./coverage.xml
|
|
113
|
+
flags: e2e-telegram
|
|
114
|
+
|
|
115
|
+
# E2E tests for Max
|
|
116
|
+
e2e-max:
|
|
117
|
+
runs-on: ubuntu-latest
|
|
118
|
+
|
|
119
|
+
name: E2E Max
|
|
120
|
+
|
|
121
|
+
steps:
|
|
122
|
+
- uses: actions/checkout@v4
|
|
123
|
+
|
|
124
|
+
- name: Set up Python 3.13
|
|
125
|
+
uses: actions/setup-python@v5
|
|
126
|
+
with:
|
|
127
|
+
python-version: "3.13"
|
|
128
|
+
|
|
129
|
+
- name: Install dependencies
|
|
130
|
+
run: |
|
|
131
|
+
python -m pip install --upgrade pip
|
|
132
|
+
pip install --upgrade "typing_extensions>=4.8.0"
|
|
133
|
+
pip install pytest pytest-asyncio pytest-cov
|
|
134
|
+
pip install "aiogram>=3.0.0"
|
|
135
|
+
pip install -e ".[dev]"
|
|
136
|
+
pip install --upgrade --force-reinstall "typing_extensions>=4.8.0"
|
|
137
|
+
|
|
138
|
+
- name: Run E2E Max tests
|
|
139
|
+
env:
|
|
140
|
+
MAX_TOKEN: ${{ secrets.MAX_TEST_TOKEN }}
|
|
141
|
+
run: |
|
|
142
|
+
pytest tests/test_e2e_migration.py -v \
|
|
143
|
+
-k "max or Max" \
|
|
144
|
+
--cov=obabot --cov-report=xml
|
|
145
|
+
|
|
146
|
+
- name: Upload coverage
|
|
147
|
+
uses: codecov/codecov-action@v3
|
|
148
|
+
with:
|
|
149
|
+
file: ./coverage.xml
|
|
150
|
+
flags: e2e-max
|
|
151
|
+
|
|
152
|
+
# Compatibility tests - different aiogram versions
|
|
153
|
+
compatibility:
|
|
154
|
+
runs-on: ubuntu-latest
|
|
155
|
+
strategy:
|
|
156
|
+
fail-fast: false
|
|
157
|
+
matrix:
|
|
158
|
+
include:
|
|
159
|
+
- python-version: "3.10"
|
|
160
|
+
aiogram-version: "3.0.0"
|
|
161
|
+
test-name: "aiogram-3.0"
|
|
162
|
+
- python-version: "3.13"
|
|
163
|
+
aiogram-version: "3.24"
|
|
164
|
+
test-name: "aiogram-3.24"
|
|
165
|
+
- python-version: "3.14"
|
|
166
|
+
aiogram-version: ""
|
|
167
|
+
test-name: "aiogram-latest"
|
|
168
|
+
|
|
169
|
+
name: Compat ${{ matrix.test-name }}
|
|
170
|
+
|
|
171
|
+
steps:
|
|
172
|
+
- uses: actions/checkout@v4
|
|
173
|
+
|
|
174
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
175
|
+
uses: actions/setup-python@v5
|
|
176
|
+
with:
|
|
177
|
+
python-version: ${{ matrix.python-version }}
|
|
178
|
+
|
|
179
|
+
- name: Install dependencies
|
|
180
|
+
run: |
|
|
181
|
+
python -m pip install --upgrade pip
|
|
182
|
+
pip install --upgrade "typing_extensions>=4.8.0"
|
|
183
|
+
pip install pytest pytest-asyncio pytest-cov
|
|
184
|
+
|
|
185
|
+
if [ "${{ matrix.aiogram-version }}" != "" ]; then
|
|
186
|
+
pip install "aiogram==${{ matrix.aiogram-version }}"
|
|
187
|
+
else
|
|
188
|
+
pip install "aiogram>=3.0.0"
|
|
189
|
+
fi
|
|
190
|
+
|
|
191
|
+
pip install -e ".[dev]"
|
|
192
|
+
pip install --upgrade --force-reinstall "typing_extensions>=4.8.0"
|
|
193
|
+
|
|
194
|
+
- name: Run compatibility tests
|
|
195
|
+
run: |
|
|
196
|
+
pytest tests/test_compatibility.py tests/test_aiogram_comparison.py -v
|
|
197
|
+
|
|
198
|
+
# Integration tests - require real tokens
|
|
199
|
+
integration:
|
|
200
|
+
runs-on: ubuntu-latest
|
|
201
|
+
if: github.event_name == 'push' || github.event_name == 'workflow_dispatch'
|
|
202
|
+
|
|
203
|
+
name: Integration
|
|
204
|
+
|
|
205
|
+
steps:
|
|
206
|
+
- uses: actions/checkout@v4
|
|
207
|
+
|
|
208
|
+
- name: Set up Python 3.13
|
|
209
|
+
uses: actions/setup-python@v5
|
|
210
|
+
with:
|
|
211
|
+
python-version: "3.13"
|
|
212
|
+
|
|
213
|
+
- name: Install dependencies
|
|
214
|
+
run: |
|
|
215
|
+
python -m pip install --upgrade pip
|
|
216
|
+
pip install --upgrade "typing_extensions>=4.8.0"
|
|
217
|
+
pip install pytest pytest-asyncio pytest-cov
|
|
218
|
+
pip install "aiogram>=3.0.0"
|
|
219
|
+
pip install -e ".[dev]"
|
|
220
|
+
pip install --upgrade --force-reinstall "typing_extensions>=4.8.0"
|
|
221
|
+
|
|
222
|
+
- name: Run integration tests
|
|
223
|
+
env:
|
|
224
|
+
TG_TOKEN: ${{ secrets.TG_TEST_TOKEN }}
|
|
225
|
+
MAX_TOKEN: ${{ secrets.MAX_TEST_TOKEN }}
|
|
226
|
+
run: |
|
|
227
|
+
pytest tests/test_integration.py -v -m integration \
|
|
228
|
+
--cov=obabot --cov-report=xml
|
|
229
|
+
|
|
230
|
+
- name: Upload coverage
|
|
231
|
+
uses: codecov/codecov-action@v3
|
|
232
|
+
with:
|
|
233
|
+
file: ./coverage.xml
|
|
234
|
+
flags: integration
|
obabot-0.1.0/.gitignore
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
.Python
|
|
7
|
+
build/
|
|
8
|
+
develop-eggs/
|
|
9
|
+
dist/
|
|
10
|
+
downloads/
|
|
11
|
+
eggs/
|
|
12
|
+
.eggs/
|
|
13
|
+
lib/
|
|
14
|
+
lib64/
|
|
15
|
+
parts/
|
|
16
|
+
sdist/
|
|
17
|
+
var/
|
|
18
|
+
wheels/
|
|
19
|
+
*.egg-info/
|
|
20
|
+
.installed.cfg
|
|
21
|
+
*.egg
|
|
22
|
+
|
|
23
|
+
# Virtual environments
|
|
24
|
+
venv/
|
|
25
|
+
env/
|
|
26
|
+
ENV/
|
|
27
|
+
.venv
|
|
28
|
+
|
|
29
|
+
# IDE
|
|
30
|
+
.vscode/
|
|
31
|
+
.idea/
|
|
32
|
+
*.swp
|
|
33
|
+
*.swo
|
|
34
|
+
*~
|
|
35
|
+
|
|
36
|
+
# Testing
|
|
37
|
+
.pytest_cache/
|
|
38
|
+
.coverage
|
|
39
|
+
htmlcov/
|
|
40
|
+
.tox/
|
|
41
|
+
coverage.xml
|
|
42
|
+
*.cover
|
|
43
|
+
|
|
44
|
+
# Environment variables
|
|
45
|
+
.env
|
|
46
|
+
.env.local
|
|
47
|
+
|
|
48
|
+
# OS
|
|
49
|
+
.DS_Store
|
|
50
|
+
Thumbs.db
|
|
51
|
+
|
|
52
|
+
# Project specific
|
|
53
|
+
*.log
|
|
54
|
+
.cursor/
|
|
55
|
+
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
# Бизнес-ценность obabot
|
|
2
|
+
|
|
3
|
+
## Что видит новый пользователь
|
|
4
|
+
|
|
5
|
+
Когда разработчик открывает репозиторий obabot, он видит:
|
|
6
|
+
|
|
7
|
+
### 🎯 Главная ценность: "Пиши один раз — работай везде"
|
|
8
|
+
|
|
9
|
+
**Проблема, которую решает библиотека:**
|
|
10
|
+
|
|
11
|
+
Разработчики ботов сталкиваются с необходимостью поддерживать код для разных мессенджеров (Telegram, Max и др.). Это означает:
|
|
12
|
+
- Дублирование кода
|
|
13
|
+
- Двойная поддержка
|
|
14
|
+
- Сложность миграции между платформами
|
|
15
|
+
- Разные API и подходы
|
|
16
|
+
|
|
17
|
+
**Решение obabot:**
|
|
18
|
+
|
|
19
|
+
Один код → работает на Telegram, Max или обеих платформах одновременно.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Основные преимущества
|
|
24
|
+
|
|
25
|
+
### 1. ⚡ Экономия времени разработки
|
|
26
|
+
|
|
27
|
+
**Без obabot:**
|
|
28
|
+
```
|
|
29
|
+
Telegram бот: 1000 строк кода
|
|
30
|
+
Max бот: 1000 строк кода (почти идентичных)
|
|
31
|
+
Итого: 2000 строк, двойная поддержка
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**С obabot:**
|
|
35
|
+
```
|
|
36
|
+
Универсальный бот: 1000 строк кода
|
|
37
|
+
Итого: 1000 строк, одна поддержка
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Экономия: 50% кода и времени на поддержку**
|
|
41
|
+
|
|
42
|
+
### 2. 🔄 Простота миграции
|
|
43
|
+
|
|
44
|
+
**Сценарий:** Вы написали бота для Telegram, но нужно запустить его на Max.
|
|
45
|
+
|
|
46
|
+
**Без obabot:**
|
|
47
|
+
- Переписывать все хендлеры под API Max
|
|
48
|
+
- Изучать новую библиотеку (aiomax)
|
|
49
|
+
- Адаптировать FSM, клавиатуры, медиа
|
|
50
|
+
- Тестировать заново
|
|
51
|
+
- **Время: дни/недели работы**
|
|
52
|
+
|
|
53
|
+
**С obabot:**
|
|
54
|
+
- Меняете одну строку: `tg_token` → `max_token`
|
|
55
|
+
- Всё остальное работает автоматически
|
|
56
|
+
- **Время: 30 секунд**
|
|
57
|
+
|
|
58
|
+
### 3. 💰 Снижение затрат на поддержку
|
|
59
|
+
|
|
60
|
+
**Проблема:** Два кодабаза = двойные баги, двойные обновления, двойное тестирование
|
|
61
|
+
|
|
62
|
+
**Решение:** Один кодбаза = один багфикс исправляет обе платформы
|
|
63
|
+
|
|
64
|
+
**Пример:**
|
|
65
|
+
- Нашли баг в логике регистрации
|
|
66
|
+
- Исправили в одном месте
|
|
67
|
+
- Работает на Telegram и Max автоматически
|
|
68
|
+
|
|
69
|
+
### 4. 🚀 Быстрый старт на новых платформах
|
|
70
|
+
|
|
71
|
+
**Сценарий:** У вас есть успешный Telegram-бот, хотите запустить на Max.
|
|
72
|
+
|
|
73
|
+
**Без obabot:**
|
|
74
|
+
- Нужен разработчик, знающий aiomax
|
|
75
|
+
- Нужно время на изучение API
|
|
76
|
+
- Риск ошибок при портировании
|
|
77
|
+
- **Срок: 1-2 недели**
|
|
78
|
+
|
|
79
|
+
**С obabot:**
|
|
80
|
+
- Меняете токен
|
|
81
|
+
- Запускаете
|
|
82
|
+
- **Срок: 5 минут**
|
|
83
|
+
|
|
84
|
+
### 5. 🎛️ Гибкость: одна или обе платформы
|
|
85
|
+
|
|
86
|
+
**Вариант 1:** Только Telegram
|
|
87
|
+
```python
|
|
88
|
+
bot, dp, router = create_bot(tg_token="TOKEN")
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**Вариант 2:** Только Max
|
|
92
|
+
```python
|
|
93
|
+
bot, dp, router = create_bot(max_token="TOKEN")
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**Вариант 3:** Обе платформы одновременно
|
|
97
|
+
```python
|
|
98
|
+
bot, dp, router = create_bot(tg_token="TG", max_token="MAX")
|
|
99
|
+
# Один код обрабатывает сообщения с обеих платформ!
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Реальные сценарии использования
|
|
105
|
+
|
|
106
|
+
### Сценарий 1: Стартап с ограниченным бюджетом
|
|
107
|
+
|
|
108
|
+
**Ситуация:** Нужен бот для Telegram и Max, но бюджет на разработку ограничен.
|
|
109
|
+
|
|
110
|
+
**С obabot:**
|
|
111
|
+
- Написали один раз
|
|
112
|
+
- Запустили на обеих платформах
|
|
113
|
+
- Экономия: 50% бюджета на разработку
|
|
114
|
+
|
|
115
|
+
### Сценарий 2: Миграция с Telegram на Max
|
|
116
|
+
|
|
117
|
+
**Ситуация:** Решили перейти с Telegram на Max (или наоборот).
|
|
118
|
+
|
|
119
|
+
**Без obabot:**
|
|
120
|
+
- Переписывать весь код
|
|
121
|
+
- Риск потерять функциональность
|
|
122
|
+
- Долгий процесс миграции
|
|
123
|
+
|
|
124
|
+
**С obabot:**
|
|
125
|
+
- Меняете токен
|
|
126
|
+
- Всё работает
|
|
127
|
+
- Миграция за минуты
|
|
128
|
+
|
|
129
|
+
### Сценарий 3: Мультиплатформенный бот
|
|
130
|
+
|
|
131
|
+
**Ситуация:** Нужен бот, который работает и в Telegram, и в Max одновременно.
|
|
132
|
+
|
|
133
|
+
**Без obabot:**
|
|
134
|
+
- Два отдельных бота
|
|
135
|
+
- Дублирование логики
|
|
136
|
+
- Сложная синхронизация данных
|
|
137
|
+
|
|
138
|
+
**С obabot:**
|
|
139
|
+
- Один бот, одна логика
|
|
140
|
+
- Автоматическая обработка обеих платформ
|
|
141
|
+
- Простота поддержки
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Технические преимущества
|
|
146
|
+
|
|
147
|
+
### ✅ Совместимость с aiogram
|
|
148
|
+
|
|
149
|
+
Если вы уже знаете aiogram — вы уже знаете obabot. API идентичен.
|
|
150
|
+
|
|
151
|
+
### ✅ Минимальные изменения при миграции
|
|
152
|
+
|
|
153
|
+
```python
|
|
154
|
+
# Было (aiogram):
|
|
155
|
+
from aiogram import Bot, Dispatcher, Router
|
|
156
|
+
bot = Bot(token="...")
|
|
157
|
+
dp = Dispatcher()
|
|
158
|
+
router = Router()
|
|
159
|
+
|
|
160
|
+
# Стало (obabot):
|
|
161
|
+
from obabot import create_bot
|
|
162
|
+
bot, dp, router = create_bot(tg_token="...")
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
**Изменения: 2 строки импорта + 1 строка инициализации**
|
|
166
|
+
|
|
167
|
+
### ✅ Нативная производительность для Telegram
|
|
168
|
+
|
|
169
|
+
Telegram работает напрямую через aiogram — без накладных расходов.
|
|
170
|
+
|
|
171
|
+
### ✅ Прозрачная адаптация для Max
|
|
172
|
+
|
|
173
|
+
Max автоматически адаптируется под API aiogram — вы не замечаете разницы.
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## Итоговая ценность
|
|
178
|
+
|
|
179
|
+
### Для разработчика:
|
|
180
|
+
- ⏱️ **Экономия времени:** пишете код один раз
|
|
181
|
+
- 🧠 **Меньше когнитивной нагрузки:** один API вместо двух
|
|
182
|
+
- 🐛 **Меньше багов:** один кодбаза = меньше мест для ошибок
|
|
183
|
+
|
|
184
|
+
### Для бизнеса:
|
|
185
|
+
- 💵 **Экономия денег:** меньше разработки = меньше затрат
|
|
186
|
+
- ⚡ **Быстрее на рынок:** запуск на новой платформе за минуты
|
|
187
|
+
- 🔒 **Меньше рисков:** миграция между платформами безболезненна
|
|
188
|
+
- 📈 **Масштабируемость:** легко добавить третью платформу в будущем
|
|
189
|
+
|
|
190
|
+
### Для проекта:
|
|
191
|
+
- 📦 **Один кодбаза:** проще поддерживать
|
|
192
|
+
- 🧪 **Одно тестирование:** тесты покрывают обе платформы
|
|
193
|
+
- 📝 **Одна документация:** не нужно дублировать
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Кому подходит obabot?
|
|
198
|
+
|
|
199
|
+
✅ **Разработчикам ботов на aiogram** — минимальная миграция
|
|
200
|
+
✅ **Стартапам** — экономия бюджета на разработку
|
|
201
|
+
✅ **Компаниям с мультиплатформенными ботами** — упрощение поддержки
|
|
202
|
+
✅ **Проектам, планирующим миграцию** — снижение рисков
|
|
203
|
+
✅ **Командам с ограниченными ресурсами** — максимум результата при минимуме кода
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## ROI (Return on Investment)
|
|
208
|
+
|
|
209
|
+
**Инвестиция:** Изучение obabot (30 минут) + миграция (1 час)
|
|
210
|
+
|
|
211
|
+
**Возврат:**
|
|
212
|
+
- Экономия 50% времени на разработку для второй платформы
|
|
213
|
+
- Экономия 50% времени на поддержку
|
|
214
|
+
- Возможность быстрого запуска на новых платформах
|
|
215
|
+
- Снижение рисков при миграции
|
|
216
|
+
|
|
217
|
+
**Вывод:** Инвестиция окупается уже при первом использовании.
|
|
218
|
+
|