mirror of
https://github.com/artemium428/428th-exchange-bot.git
synced 2026-09-15 16:56:20 +00:00
72 lines
4.3 KiB
Markdown
72 lines
4.3 KiB
Markdown
# 428th Exchange Bot
|
||
|
||
Telegram-бот — прослойка между клиентом и менеджером.
|
||
|
||
Клиент пишет боту в личку. Менеджер отвечает в супергруппе с **Topics**: у каждого клиента своя тема. Клиент получает ответы от имени бота.
|
||
|
||
## Требования
|
||
|
||
- Python 3.9+
|
||
- Бот от [@BotFather](https://t.me/BotFather)
|
||
- Супергруппа с включёнными темами (Topics)
|
||
|
||
## Быстрый старт
|
||
|
||
```bash
|
||
python3 -m venv .venv
|
||
source .venv/bin/activate
|
||
pip install -r requirements.txt
|
||
cp .env.example .env
|
||
# отредактируйте .env
|
||
python -m bot
|
||
```
|
||
|
||
## Настройка Telegram
|
||
|
||
1. Создайте бота у @BotFather и скопируйте token в `BOT_TOKEN`.
|
||
2. Создайте супергруппу, включите **Topics** (настройки группы → Topics).
|
||
3. Добавьте бота в группу и сделайте **администратором** с правами:
|
||
- Manage topics
|
||
- Post messages
|
||
- Delete messages (нужно для `/del`)
|
||
4. Узнайте `chat_id` группы и пропишите в `MANAGER_GROUP_ID` (обычно отрицательный, вида `-100…`).
|
||
- Запустите бота, добавьте его в группу — в лог напишется id чата.
|
||
- Либо перешлите любое сообщение из группы боту [@userinfobot](https://t.me/userinfobot) / аналогу.
|
||
5. Напишите боту `/start` с тестового аккаунта и отправьте сообщение — в группе появится новая тема.
|
||
|
||
## Переменные окружения
|
||
|
||
| Переменная | Описание |
|
||
|---|---|
|
||
| `BOT_TOKEN` | Token бота |
|
||
| `MANAGER_GROUP_ID` | Id супергруппы с Topics |
|
||
| `DATABASE_PATH` | Путь к SQLite (по умолчанию `data/bot.db`) |
|
||
| `WELCOME_TEXT_RU` / `WELCOME_TEXT_UK` | Опционально: приветствие для языка |
|
||
| `ACK_TEXT_RU` / `ACK_TEXT_UK` | Опционально: текст после сообщения клиента |
|
||
| `COOLDOWN_TEXT_RU` / `COOLDOWN_TEXT_UK` | Опционально: ответ при кулдауне |
|
||
| `WELCOME_TEXT` / `ACK_TEXT` / `COOLDOWN_TEXT` | Legacy: только для RU (UK не перезаписывается) |
|
||
| `CLIENT_COOLDOWN_SECONDS` | Кулдаун клиента в секундах (по умолчанию `5`) |
|
||
|
||
## Как это работает
|
||
|
||
1. Клиент: `/start` → выбор языка (RU/UK) → приветствие, запись в SQLite.
|
||
2. Клиент пишет сообщение → бот создаёт тему (если ещё нет) и копирует сообщение менеджерам → «Спасибо, подождите ответ».
|
||
3. Менеджер пишет в теме клиента → бот копирует содержимое клиенту в личку от своего имени.
|
||
4. Правки сообщений синхронизируются в обе стороны (текст и подписи).
|
||
5. Реакции синхронизируются в обе стороны.
|
||
6. Удаление: ответьте на сообщение командой `/del` — копия удалится и у клиента, и у менеджера.
|
||
7. Язык можно сменить командой `/lang`. Список услуг — кнопка под приветствием.
|
||
|
||
Сообщения бота в теме (копии от клиента) обратно клиенту не уходят.
|
||
|
||
## Запуск
|
||
|
||
```bash
|
||
source .venv/bin/activate
|
||
python -m bot
|
||
```
|
||
|
||
Данные клиентов хранятся в SQLite (`telegram_id` ↔ `topic_id`).
|
||
Рядом с `bot.db` могут появляться файлы `-wal` / `-shm` (режим WAL) — их тоже не нужно коммитить (`data/` в `.gitignore`).
|
||
|
||
При старте бот проверяет `MANAGER_GROUP_ID`: супергруппа с Topics, бот — админ с правами Manage topics и Delete messages. При ошибке процесс завершится с понятным текстом в логе и stderr.
|