О боте
Добавьте бота в группу, которую хотите подписать на телеграм канал(ы) после чего используйте команду /sub (если в группе есть несколько тем, то эту команду стоит использовать в той теме, куда хотелось бы получать пересланные сообщения)
Бот будет пересылать (если это возможно) новые посты из телеграм канала во все группы, которые на него подписаны. Также бот будет пересылать посты из канала, при их редактировании (за исключением некоторых случаев).
Система на самом деле чуть сложнее, чем бот, просто подписывающийся на телеграм каналы, потому что боты не могут подписываться на них.
Для этого отдельно от бота создаётся фетчер, который подписывается на нужные каналы, пересылает посты из них боту, а бот уже пересылает их группам-подписчикам.
Фетчер представляется собой обычный аккаунт телеграм, управление которым отдаётся программе, а не человеку.
При увеличении количества пользователей бота, скорее всего обойтись одним фетчером не получиться (у телеграм аккаунтов ограничение в 500 подписок на каналы). Поэтому система позволяет очень легко добавлять новые фетчеры, для этого надо просто создать новый телеграм аккаунт и запустить программу фетчера, введя в ней данные от нового аккаунта.
Фетчер вполне себе можно использовать как отдельный проект, так как он позволяет сохранять посты из телеграм каналов в их оригинальном виде (если отредактировать оригинальное сообщение, то его пересланная версия не измменится).
Фетчеры перенаправляют посты из каналов боту с помощью пересылки их в личные сообщения боту, поэтому бот должен уметь отличать обычного человека, которые решил переслать ему пост в лс от фетчера.
Для этого у бота база данных, в которую фетчеры добавляются при их запуске.
Бот коммуницирует с фетчерами с помощью протокола http
Коммуникация работает в обе стороны:
- Фетчеры отправляются боту запрос на регистрацию в базе данных фетчеров при запуске
- Бот отправляет фетчерам запросы на подписку/отписку от канала.
- Бот не умеет подписываться за приватные каналы
- Бот пересылает сообщения из каналов с запретом на пересылку в таком формате:
Новое сообщение в канале @Имя канала: https://t.me/channel/id (ссылка на сообщение)
- Бот игнорирует редактирование постов, на которых есть кнопки, так как скорее всего это кнопка для участия в розыгрыше, которая скорее всего отображает количество участников, а значит при каждом новом участнике в розыгрыше это будет новый апдейт редактирования, что очень много.
- Бот считает за редактирование только редактирование текста поста (изменение фото или что-то другое игнорируется).
- Клонировать репозиторий и перейти в папку терраформа
git clone https://github.com/bu1izhnik/subbot && cd subbot/terraform - Создать там файл
secrets.auto.tfvarsсо следующим содержимымbot_token=<api токен вашего бота> bot_username=<юз вашего бота> - В папке
envsсоздайте.envфайлы для всех ваших фетчеров в форматеfetcher-x.env(про названия файлов и их содержимое более подробно описано в шаблонеenvs/fetcher-99.env) - Измените переменную
fetcher_replicasвvariables.tfна нужное вам количество фетчеров. - При необходимости измените значения
bot_image,fetcher_imageиgoose_imageвvariables.tf. Изначальные значения предназначены дляlinux + amd64, если сменить теги с:latestна:armто будет связкаlinux + arm64. Если оба предыдущих варианта не подходят, то можно собрать самостоятельно с помощью докера:Dockerfileдляsubbotлежит в./bot, дляsubfetcherв./fetcher, дляsubgooseв./bot/db(пути указаны относительно корня репозитория; в докерфайлах бота и фетчера нужно будет поменять аргументыTARGETOSиTARGETARCH) terraform initterraform apply(если на этом шаге вылезут ошибки о созданииnamespace'овто просто выполните команду повторно)