Премодерация программно и хуки

Автор Idrassil, 06 июня 2025, 23:48:22

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Idrassil

Пишу небольшой мод, для отлова спамеров, суть - в сообщении есть ссылка, оно идет на премодерацию. Раньше делал такое правкой исходников SMF, сейчас же попробовал через хуки. И вот какая ситуация:

integrate_create_post  - хук добавления нового сообщения. В документации сказано что принимает 5 параметров (&$msgOptions, &$topicOptions, &$posterOptions, &$message_columns, &$message_parameters) . Передаются они по ссылке, но с этого толку мало, т.к. они не используются дальше, а копируются в message_parameters. Т.е. можно отредактировать msgOptions['body'], но в базу это не пойдет. Редактировать надо

$msg_param['4'] = 'modified'; - тело сообщения
$msg_param['12'] = 0; - премодерация

C integrate_modify_post ситуация еще хуже, т.к. ни 1 параметр не дает возможность перевести сообщение в премодерацию.



Bugo

В первом хуке проверяем $msgOptions['body'], если есть ссылка, пишем 0 в $message_parameters[14].

Во втором хуке тоже проверяем $msgOptions['body'], если есть ссылка, пишем 0 в $messages_columns['approved'].

Idrassil

Bugo, спасибо, все работает.

Еще такой момент. Часто люди постят сообщение с большим количеством пробелов в конце (не знаю, почему). Пробовал обрезать через трим
$msg_param['4'] = rtrim($msg_param['4']);
не работает. Оказалось, там не пробелы, а <br>. В итоге сделал так

$msg_param['4'] = preg_replace('/(<br>)+$/', '', $msg_param['4']);
Но не скажется ли это на быстродействии, регулярки ведь медленные.

Idrassil

Еще вопрос, а зачем хуки

integrate_post_JavascriptModify (&$post_errors, $row)
integrate_jsmodify_xml

Чем они отличаются от integrate_modify_post ?

В инете , кроме вашего же сайта, нет никакой инфы по ним. В коде видно, что вроде как они вызываются при быстрой правке сообщения.

Bugo

Все хуки нужны, чтобы добавлять какой-то свой код в разных областях SMF, без правки исходных файлов. Тут по смыслу похоже на какую-то обработку во время превью или чего-то подобного.

Можно поставить SMF Tracy Debugger и добавлять после интересующего хука bdump(параметры хука), чтобы видеть в отладочной панельке, где и когда отображаются эти параметры и что они содержат.

Также на сайте SMF в каталоге модификаций можно отсортировать все моды с типом Hooks only, скачать каждый и посмотреть, что он делает и с помощью каких-хуков работает.

Idrassil

Цитата: Bugo от 09 июня 2025, 03:50:03SMF Tracy Debugger
Попробую, но он  PHP 8.0+ , а у меня 7ой РНР. Разве что посмотреть что там от 8ой версии и отредактировать.

Еще вопрос - правильно понимаю, что хуки можно ставить только через моды? Т.е. нет какой-то панели в админке или еще что, где можно вручную добавить хук?


Bugo

В админке есть интерфейс, где можно просмотреть текущие зарегистрированные хуки, и удалить ненужные. А добавлять можно через уже установленные моды, если для тестов или разработки. К примеру, в упомянутом SMF Tracy Debugger в файле Integration.php можно регистрировать нужные хуки через PHP атрибуты.