Когда-то давно в Telegram все пересланные сообщения содержали информацию об авторе, в частности, ID. Благодаря этому можно было легко делать ботов для обратной связи, когда юзер пишет боту, а автор бота через него отвечает. К сожалению, в марте 2019 года всё изменилось и пересланные сообщения от некоторых людей потеряли информацию об отправителях.
Для решения этой проблемы разработчики ботов стали сохранять ID авторов сообщений на стороне бота, а затем провязывать эти айдишники, но я лично считаю такой подход избыточным, т.к. такие данные, по сути, должны храниться вечно (мало ли, на какое сообщение вы решите ответить). В результате появился этот бот. Из плюсов: элементарно контейнеризируется, поскольку хранит всё в оперативной памяти (например, списки блокировок). Из минусов: поддерживает только те сообщения от пользователей, где можно добавлять подпись или редактировать текст, не поддерживает возможность сделать "ответ" (reply) на сообщение (в теории, решаемо) и не позволяет корректно реагировать на редактирование сообщений. Лично меня устраивает такой расклад.
Сообщения от пользователей копируются методом copyMessage в чат к админу (или админам) с добавлением ID пользователя в виде хэштега, например, #id1234567, к тексту или подписи к медиафайлу. Когда администратор отвечает на сообщение, этот хэштег извлекается, парсится и используется в качестве получателя.
Весь бот представлен в виде модуля, поэтому запускается как python -m bot
, и легко запихивается в Systemd и Docker.
Желающие взять готовый Docker-образ могут проследовать сюда.
В наличии сборки для архитектур amd64 и ARM64.
Все настройки берутся из переменных окружения в качестве примера лежит файл env_dist
, из которого можно получить
полноценный .env
. Как уже понятно, установка заточена под Docker, однако нет никаких проблем с запуском через Systemd.
Переменная ADMIN_CHAT_ID
должна быть числом, равным идентификатору либо лички с админом, либо группы
(желательно, супергруппы), все участники которой будут считаться равноправными администраторами бота.