{"id":2175,"url":"\/distributions\/2175\/click?bit=1&hash=803b6e1bcbd9dfc4ba9456fda887a878c80d24df8d3a575913b14876e18923a5","title":"TJ \u0437\u0430\u043a\u0440\u043e\u0435\u0442\u0441\u044f 10 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f \u2014\u00a0\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0430\u043d\u043e\u043d\u0441 \u0441 \u0434\u0435\u0442\u0430\u043b\u044f\u043c\u0438","buttonText":"\u0427\u0438\u0442\u0430\u0442\u044c","imageUuid":"d1d355d8-93a3-5140-aeae-14b03046b760","isPaidAndBannersEnabled":false}
Разработка
Спартак

Бот для сайтов Комитета

Цепочка событий, которая меня привела к написанию бота такова:

  • Я делал сайт для жены и там использовалось зеркало для t.me c рекламой
  • Я искал opensource решения, чтобы поднять на поддомене зеркало без рекламы
  • Решения нашел, но все не подходили под цели, эта вещь должна была быть очень простой и подниматься в докере
  • Я написал свой редирект и выложил его в opensource
  • Листая твиттер, вк и сайты комитета очень часто видел прямые ссылки на каналы t.me и приходилось либо искать по никнейму, либо делать лишние действия с переходом на свое зеркало
  • Решил написать бота

Если интересна статья про само зеркало, могу написать. Исходный код тут:

Код бота я тоже выкладываю в открытый доступ для ознакомления. Ничего сложного или особенного в нем нет. Код писался под развертывание в Docker Swarm, но спокойно может быть запущен и без докера.

Работает очень просто, я подписываю 3 ссылки на каждый сайт Комитета как вебхук на новые комментарии notion.so/dd8bf6f5c1fd430286530644d4c362df, каждый комментарий обрабатываю на наличие ссылки на t.me, заменяю на зеркало и шлю реплай notion.so/93726b07e3034231af3d0d031d74d70d

//проверка наличии ссылки с помощью регулярки /t\.me\/([a-zA-Z0-9\/_]+)/gm

Работает все через встроенный в NodeJS http.createServer без "лишних библиотек" (конечно можно заменить axios на встроенный fetch и написать свой обработчик POST тела), но и в таком виде докер образ весит смешные 28МБ

Управление Docker Swarm у меня происходит через очень удобный Swarmpit. Вот готовый ямл, в админке само собой просто заполняются поля. Режим репликации очень удобный, но в случае сайтов комитета достаточно было бы и 1й реплики на слабом дроплете из DO, комментарии падают не часто.

version: '3.3' services: comitet-tgrm-bot: image: assorium/comitet-tgrm-bot:latest environment: PORT: '3019' DTF_KEY: 'secret' TJ_KEY: 'secret' TOKEN: 'secret' VC_KEY: 'secret' networks: - global_nginx logging: driver: json-file deploy: replicas: 2 labels: swarmpit.service.deployment.autoredeploy: 'true' networks: global_nginx: external: true

Сеть global_nginx подключена к глобальному сервису nginx, который слушает 80 и 443 порт и распределяет трафик между всеми приложениями. Вот конфиг конкретно этого приложения

server { listen 80; charset UTF-8; server_name [website]; access_log off; location / { proxy_pass http://comitet-tgrm-bot:3019; proxy_set_header Host $host; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-NginX-Proxy true; } }

С чем пришлось столкнуться. Само собой дебажить вебхуки занятие непростое, либо нужно делать себе прокси на локальную машину, либо выкладывать в прод и просто смотреть, что приходит. Я выбрал второй путь и никаких особых проблем не испытал с АПИ комитета.

Проблема была в получении API ключа, т.к. видимо новые аккаунты его получить не могут. Также аккаунт на VC.ru уже 2 раза улетел в бан за спам. И тут я уже не знаю что делать, т.к. бот вроде как полезный, но он не разбирает, на чей комментарий отвечает. Собственно улетел в бан он явно за ответ на комментарий спамера. Следить за ботом и писать в поддержку я не вижу особо смысла, если сайт считает, что им боты не нужны, то ок. Тогда не очень понятно зачем API =)

Сейчас скучные дни, поэтому если есть идеи, можно написать еще каких-нибудь ботов. У меня была идеа сделать реддитовского !remindme бота, но у комитета нет API для личных сообщений

А теперь статистика. На 13:00 МСК когда я писал статью:

​15
Комментариев в минуту на сайтах комитета
61%
Процент комментариев DTF.ru

P.S. Бота заблокировали и на сайте Tjournal. Думаю на DTF тоже скоро забанят. Печально

0
10 комментариев
Написать комментарий...
OneTwo

О, приколный бот. Хоть и просто, но оч полезно. Пользуюсь Touch VPN для таких случаев как плагином в браузере, за 5 секунд включил, по ссылке перешел и выключил.
У API есть ограничение вроде, мол можно слать не чаще 3-ех запросов в секунду. Может пару раз это было нарушено, и по этому в бан улетел?

Ответить
Развернуть ветку
OneTwo

Или то что шлешь реплаи абсолютно на все комменты с содержанием ссылки на телегу. Можно просто в комменте дергать бота, и он бы обрабатывал только те ссылки, где бот упомянается

Ответить
Развернуть ветку
Спартак
Автор

Да, я думал об именно упоминаниях, но в таком случае пользователи должны знать о наличии такого бота. Ссылки на t.me не так часто постят. На всех сайтах комитета максимум раза 3 в день. Думаю бан просто от публикации ссылок прилетел. 
Причем первый бан был вообще за публикацию статьи в личном блоге бота с описанием, что это за бот.
Если побанят на других сайтах, то наверное перепишу его на упоминания, если они вообще тут есть

Ответить
Развернуть ветку
Спартак
Автор

Собственно демонстрация его работы. 
t.me/durov

Ответить
Развернуть ветку

Комментарий удален модератором

Развернуть ветку
Pavel Osadchuk
дебажить вебхуки

попробуйте https://ngrok.com/
и дебажить вебхуки станет очень просто

Ответить
Развернуть ветку
Спартак
Автор

Ну также они и пастбин предлагают использовать. Проблеме не в самих данных, документация очень хорошая, а в том, в каком виде они приходят и как парсить тело запроса. Я старался не использовать нагромождение пакетов, чтобы это поменьше весило. Поэтому просто вылил приемщик, который логировал все, что приходит и дописал его в паре следующих коммитов

P.S. Прости, не перешел по ссылки, думал это просто приемник запросов. Ну да, я такой вариант имел ввиду, но тот что я юзал раньше был посложнее. Спасибо, добавил в закладки

Ответить
Развернуть ветку
#realfiddy

Так это ты тут лазил что у нас сбои были?)

Ответить
Развернуть ветку
Спартак
Автор

какие сбои?

Ответить
Развернуть ветку
Паша Красников

Чувак считает очень остроумным, если он будет говорить так, как будто работает в Комитете.
Весна - пора обострений различных болезней (в том числе и психических)

Ответить
Развернуть ветку
Спартак
Автор

Может тоже на самоизоляции сидит. Я хоть и работаю в основном на удаленке, но 2 недели сидеть дома ужасно тяжело )

Ответить
Развернуть ветку

Комментарий удален модератором

Развернуть ветку
Читать все 10 комментариев
null