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

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Для этого нужно в боте отслеживать 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 комментария
  • Как защитить бота Telegram от спама?

    Dimastik86
    @Dimastik86
    (isset($brain))?: die;
    можно тупо чисто на триггерах мускула...
    вариант придумал только что, не претендую на истину!

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

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

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

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