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