TGViewer
День синьора День синьора @seniorday · 142 subscribers
Post #21 201
Сложности разработки бота для подсчета охватов

(начало тут)

Итак, что же могло пойти не так, ведь задача: открыть курсор и ввести промпт "напиши мне бота, который считает охваты телеграм каналов. На вход получает пачку ссылок, а на выходе дает статистику по охватам"
(ну как-то так).

Оказалось, что не так может пойти почти всё, с самого начала.
1️⃣ Мне пришлось разобраться, что у телеграма существуют 2 уровня API.
Первый уровень: Bot API - это команды, которые может выполнять сам бот от своего имени. Например. написать сообщение пользователю, который его активировал.
Второй уровень: MTProto API. Это команды, которые можно выполнять от имени обычного пользователя. Существует этот MTProto главным образом для того, чтобы можно было создавать свои клиентские приложения типа Telegram, но со своими функциями.
Так вот, охваты нельзя считать через Bot API. А это значит, что для подсчета охватов нужно взять реального пользователя и от его имени заходить в каналы и смотреть охваты. Кстати, в приватные каналы надо физически вступить, чтобы увидеть охваты.

2️⃣ Оказывается (вы не поверите!), у Телеграма есть флуд фильтры и он не очень любит, чтобы какой-то юзер постоянно вступал в какие-то каналы и совершал странные действия, не похожие на реальный пользовательский опыт. Поэтому очень быстро я стал получать сообщения "Flood wait until XXX (3s)", "Flood wait until XXX (254s)". И пока время не истечет, пользователь заблокирован (а значит, и бот тоже).

3️⃣ Первый подход к решению проблемы с Flood Wait - это снизить нагрузку на API Telegram. Снизить количество запросов. Вступать в каналы и не выходить из них (потому что через запрос на вступление проще всего получить этот флуд вэйт). Кэшировать каналы. Запоминать пригласительные ссылки (потому что второй по степени риска запрос - это получение id канала из пригласительной ссылки). Короче, я стал сохранять в БД все что можно. Но тут оказалось, что один человек не может вступить более чем в 500 каналов. А значит, при приближении к лимиту нужно выходить из других каналов, которые меньше используются. А значит, надо вести еще и статистику использования каналов (ну, чтобы не выйти из того, который опять пришлют через 5 минут).

После пункта 3 бот в целом был более-менее рабочий, но совершенно не масштабируемый. Больше 20 пользователей в день он не переваривал, начинали сыпаться flood wait ошибки и приходилось ждать 10-20-30 минут, чтобы увидеть ответ.

Получилась уже огромная простыня, так что я в другом посте напишу, как я его масштабировал и что из этого вышло

День синьора
  • ❤ 1
  • 👍 1
  • 👏 1
  • 🐳 1
More from @seniorday
  1. Sep 20, 2026Кааайф. Сегодня я впервые в жизни получил доход за свой SaaS продукт. Речь, конечно же, о…
  2. Sep 15, 202637. Ну что, Иисуса пережил, пришла очередь пережить Пушкина :) Вообще у меня длинный списо…
  3. Sep 8, 2026Когда-то у меня был ютуб канал. Но я его забросил примерно через 6 месяцев. До этого выпус…
  4. Sep 6, 2026Чем хороша офисная работа? Можно долго спорить, что лучше - офис, или фриланс, или удаленк…
  5. Sep 1, 2026День синьора pinned «Впервые здесь? Вот самые интересные посты канала: 1. Обо мне. 2. Как…
  6. Sep 1, 2026Впервые здесь? Вот самые интересные посты канала: 1. Обо мне. 2. Как меня уволили из банка…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →