Когда-то давно в 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.
- Выполните шаги 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-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.

