Брат, как я тебя понимаю!
Сам искал подобное несколько раз и безрезультатно

А потом нашел

Случайно запись хрен знает какого года

, такой вот код :
function check_russian($t) {
$ru=array('а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ь','ы','ъ','э','ю','я','А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ь','Ы','Ъ','Э','Ю','Я');
for($i=0;$i<count($ru);$i++) {
if(strpos($t,$ru[$i])!==false) {
return true;
}
}
return false;
}
if(isset($_POST['subject']) && check_russian($_POST['subject'])===false) {
$_POST['subject']='';
$context['post_error']['no_subject'] = true;
}
if(isset($_POST['message']) && check_russian($_POST['message'])===false) {
$_POST['message']='';
$context['post_error']['no_message'] = true;
}Ставить его в начале файла
Sources/Post.php после строки:
die('Hacking attempt...');
Код этот проверяет наличие русских символов в названии темы и в тексте сообщения.
Если в тексте нет ни одной русской буквы (что и характерно для иностранных ботов), то выдается ошибка, что поле пустое.
Код работает как при создании новой темы, так и при добавлении ответа в старую тему.
ПС. Автор кода предупредил, что у него старая версия SMF (думаю 2.0.х), а в новых версиях форума надо проверить упоминание в файле Sources/Post.php переменных $_POST['subject'], $_POST['message'], $context['post_error']['no_subject'], $context['post_error']['no_message'].
Фишка в том, что у меня
новейший форум да еще и линейки 2.1.х 
И переменные все в файле Sources/Post.php присутствуют, кроме последней.
Но код работает на ура, до сих пор, что очень удвиительно. И главное, никаких ошибок в жарнале нет! Что еще более удивительно! 