Добрый день.
У меня есть Telegram бот, который выдает бонусы людям. Бонус выдается один раз в сутки. Для того, чтобы получить бонус, нужно нажать на кнопку (неважно, inline или обычную). И вот ушлые люди нажимают на кнопку десятки раз за несколько секунд и получают не один, а несколько бонусов в итоге.
Функция, которая обрабатывает нажатие, выглядит примерно так:
1. Проверить, когда начислялся бонус последний раз
2. Если больше дня назад, то начислить бонус и обновить дату получения
То есть всего 2-3 команды, ошибки в них быть не может, они банальны и я сто раз их проверил.
Если нажимать нормально, то есть хотя бы с паузой в несколько секунд (не долбя кнопку мыши), то функция работает правильно и начисляет только один раз, а в другие разы выводит ошибку (мол бонус уже был получен). А вот если нажать миллион раз (условно) за секунды, то начисление происходит несколько раз (как будто она не успевает обработаться).
Бот написан на PHP. Я думал над записью в базу даты последнего обращения к боту пользователя, но я боюсь, что оно тоже не сработает, как и функция начисления бонуса.
А так как Telegram посылает все запросы со своего API, то ограничить их через настройку сервера не получится.