Feedback Bot
Предыстория
Когда-то давно в Telegram все пересланные сообщения содержали информацию об авторе, в частности, ID. Благодаря этому можно было легко делать ботов для обратной связи, когда юзер пишет боту, а автор бота через него отвечает. К сожалению, в марте 2019 года всё изменилось и пересланные сообщения от некоторых людей потеряли информацию об отправителях.
Для решения этой проблемы разработчики ботов стали сохранять ID авторов сообщений на стороне бота, а затем провязывать эти айдишники, но я лично считаю такой подход избыточным, т.к. такие данные, по сути, должны храниться вечно (мало ли, на какое сообщение вы решите ответить). В результате появился этот бот. Из плюсов: элементарно контейнеризируется, поскольку хранит всё в оперативной памяти (например, списки блокировок). Из минусов: поддерживает только те сообщения от пользователей, где можно добавлять подпись или редактировать текст, не поддерживает возможность сделать "ответ" (reply) на сообщение (в теории, решаемо) и не позволяет корректно реагировать на редактирование сообщений. Лично меня устраивает такой расклад.
Принцип работы
Сообщения от пользователей копируются методом copyMessage в чат к админу (или админам) с добавлением ID пользователя в виде хэштега, например, #id1234567, к тексту или подписи к медиафайлу. Когда администратор отвечает на сообщение, этот хэштег извлекается, парсится и используется в качестве получателя.
Как переписку видит пользователь:
В свою очередь, администратор видит так (и может пользоваться расширенным набором команд):
Установка
Системные требования:
- Python 3.9 и выше (не нужно при запуске с Docker);
- Linux (должно работать на Windows, но могут быть сложности с установкой);
- Systemd (для запуска через systemd);
- Docker (для запуска с Docker). Старые версии Docker требуют отдельно docker-compose.
Просто потестировать (не рекомендуется)
- Клонируйте репозиторий;
- Перейдите (
cd
) в склонированный каталог и создайте виртуальное окружение Python (Virtual environment, venv); - Активируйте venv и установите все зависимости из
requirements.txt
; - Скопируйте
env_example
под именем.env
(с точкой в начале), откройте его и заполните переменные; - Внутри активированного venv:
python -m bot
.
Systemd
- Выполните шаги 1-4 из раздела "просто потестировать" выше;
- Скопируйте
feedback-bot.example.service
вfeedback-bot.service
, откройте и отредактируйте переменныеWorkingDirectory
иExecStart
; - Скопируйте (или создайте симлинк) файла службы в каталог
/etc/systemd/system/
; - Активируйте сервис и запустите его:
sudo systemctl enable feedback-bot --now
; - Проверьте, что сервис запустился:
systemctcl status feedback-bot
(можно без root-прав).
Docker + Docker Compose
- Возьмите файл
docker-compose.example.yml
из репозитория и переименуйте какdocker-compose.yml
; - Возьмите файл
env_example
там же, переименуйте как.env
(с точкой в начале), откройте и заполните переменные; - Запустите бота:
docker compose up -d
(илиdocker-compose up -d
на старых версиях Docker); - Проверьте, что контейнер поднялся:
docker compose ps
Локализация
Если вы хотите изменить тексты в боте, ознакомьтесь с информацией в Wiki. В настоящий момент поддерживается только изменение текстов сообщений, но не описаний в меню команд
Папку bot/locales
в случае с развертыванием бота в Docker можно переопределить, подсунув её снаружи как volume.