Материал из Tkabber Wiki
Идея взята из отложенного протокола JEP-0159 Spim blocking но там предлагают реализовать на серверах а тут в Ткаббере. Первый вариант конечно лучше, но протокол то отложен, когда активируют и активируют ли вообще неизвестно.
Суть протокола -- фильтровать все входящие сообщения и презенсы по следующим правилам:
- если from есть в ростере, то пропускать.
- если from есть в списке jid-ов на которые недавно уходили сообщения (последняя три дня к примеру), то пропускать.
- возможен еще конфигурируемый фильтр по серверу. К примеру для всех серверов кроме icq.jabber.ru тоже пропускать.
- для всех остальных соообщение/презенс сохранить, а в ответ выслать случайную текстовую капчу, которую можно взять из файлика и ждать ответ некоторое время. Если ответ пришел и он верен -- показать сохраненное сообщение, иначе через некоторое время сохраненное сообщение удалить а JID забыть.
Список JID-ов, на которые отсылались сообщения, список JID-ов которым были высланы капчи, ответы на эти капчи и сами сохраненные сообщения можно хранить на сервере в jabber:x:private (JEP-0049) при этом периодически (можно не по таймеру, а во время очередного обновления данных) удалять записи с истекшим сроком годности.
Еще надо предусмотреть:
- зацикливание, когда на $from висит бот, который будет в ответ на каждую капчу высылать своё сообщения, например, список доступных команд.
- сообщения от jid-ов из чата. Они не в ростере и им сообщения не высылались, но высылать им капчи нельзя. Надо как-то тоже обработать.