Как защитить бота Telegram от спама

Возникла проблема с моим ботом телеграмм, один из его пользователей, каким то софтом решил его заспамить — получилось вполне успешно, бот лег. Как можно реализовать систему антиспама, чтобы при попытке отправить допустим больше одного сообщение в 5 секунд — приходило стоп-сообщение: Между сообщениями должна быть пауза 5 секунд! За продолжение спама Вы можете быть заблокированы. Если пользователь проигнорировал предупреждение и отправил допустим больше 5 сообщений без паузы, то его аккаунт, который я храню в базе данных приобретал статус — Заблокирован, а бот проверял статус пользователя и если он заблокирован, просто завершал работу через exit(), но это неважно, главное то, как мне хранить оставшееся время и прочее? Ничего в голову не приходит..

  • Вопрос задан более двух лет назад
  • 2281 просмотр

Комментировать
Решения вопроса 2
Меня невозможно остановить, если я смогу начать.

Для этого нужно в боте отслеживать user_id и timestamp последнего сообщения.

Защита групп от СПАМа, мата и приветствие новых пользователей


Можно завести в БД таблицу c 2-мя колонками: user_id (unique), last_message_time.
Когда от пользователя приходит новое сообщение, вы достаёте last_message_time для текущего user_id и смотрите сколько секунд прошло между последним сообщением и текущим временем.
Если прошло меньше 5 секунд, то шлёте предупреждение и считаете что произошло нарушение от user_id, если прошло больше 5 секунд, то считаем сообщение валидным и не забываем обновить last_message_time для user_id.

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

Ответ написан более двух лет назад
Нравится 4 4 комментария

mad_maximus

Можно завести в БД таблицу c 2-мя колонками: user_id (unique), last_message_time..

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

Еще по теме:  Каа вставить ссылку на Телеграм канал в истории в ВК

kafkiansky, мой ответ скорее про общий метод, как высчитать время.
Можно хранить ассоциативный массив вида [user_id => last_message_time] прямо в памяти бота или в memcached
Массив на 10тыс записей (активных пользователей) будет занимать 80Mb.

mad_maximus

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

Огромное спасибо за совет, щас постараюсь реализовать, начиналось всё с углубленного изучения API, честно, думал, что там есть какой либо метод для решения моей задачи, но оказалось всё немного проще) Ещё раз спасибо!

Dimastik86

(isset($brain))?: die;

Лучшие Боты в Телеграмме. Часть 2. Защита от спама в чате. Модераторы чатов в помощь для админов

можно тупо чисто на триггерах мускула.
вариант придумал только что, не претендую на истину!

На основной табл, куда сохраняются сообщения — перед добавлением, проверяет разницу времени с прошлым сообщением этого пользователя (определить по id).

При наступлении события — в доп таблицу(журнал) делаем запись: время-пользователь.

Тут же делаем проверку, на кол-во записей в журнале с выборкой по id и за определенное время — если записей больше чем N кол-во за последние, например 5 минут, то просто тупо срабатывает стоп и все! Как только кол-во снижается до допустимого, появляется возможность писать.

Это будет работать для всех пользователей, на уровне базы.
По поводу сообщений — надо смотреть, скорей всего эту ошибку можно отловить и вернуть ответом в чат, только зачем?! Лучше настроить так, чтобы обычный пользователь с ней вообще не сталкивался, а те другие, пусть развлекаются дальше )) Советую аудиокнигу (ответ на твой вопрос на 6:30)

Еще по теме:  Как создать рубрики в Телеграмм канале

Источник: qna.habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...