Центр пользователя  |  Ваши сообщения  |  FAQ
Форум поддержки phpBB » phpBB 3.0.x » Модификация phpBB 3.0.x » Моды каталога

Cleantalk Spam protect

Обсуждение и поддержка модов, размещённых в каталоге
Пожалуйста, помните, что существуют: Поиск, Правила форума
Возможно, ответ на Ваш вопрос уже имеется: Документация, Статьи, Накопленный опыт
Полезные материалы по этой теме: Инструкция по установке модов

Сообщение 07 апр 2013, 20:13

Мод обновлен до версии 3.6.15, изменения не критичные, обновляться по желанию. Список изменений следующий:

  • Исправлен баг с цифрой ’0′ (ноль) в начале SMS кода при регистрации на форуме.
  • Обновлен код модуля в соответствии с рекомендациями разработчиков форума phpBB.
Вложения
cleantalk_spam_protect_v_3.6.15.zip
Архив с модулем
(243.78 KiB) Скачиваний: 143
Аватар пользователя
shagimuratov
Активный участник
 
Сообщений: 92
Зарегистрирован:
12 май 2012, 09:51
Откуда:
Челябинск
Благодарил (а): 2 раз.
Поблагодарили: 4 раз.

Сообщение 22 апр 2013, 16:26

Предлагаю небольшую модернизацию.
В файле includes/ucp/ucp_profile.php вместо
Код: выделить все
                // Begin: cleantalk.ru moderation
               if (!sizeof($error) && $config['ct_enable'])
               {
                  $moderate = false;

                  $sql = 'SELECT g.group_name FROM ' . GROUPS_TABLE . ' g, ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . ' ug where
                                                        ug.user_id=u.user_id and ug.group_id=g.group_id and g.group_type = ' . GROUP_SPECIAL . ' and u.user_id = ' . (int) $user->data['user_id'];

                  $result    = $db->sql_query($sql);
                  while ($row    = $db->sql_fetchrow($result))
                  {
                     if ($row['group_name'] === 'NEWLY_REGISTERED' && $config['ct_moderate_newly_registered'])
                     {
                        $moderate = true;
                     }
                  }

                  if ($moderate && (!empty($data['website']) || !empty($data['location']) ||
                        !empty($data['occupation']) || !empty($data['interests'])))
                  {
                     if (!class_exists('Cleantalk'))
                     {
                        require $phpbb_root_path . 'includes/cleantalk.' . $phpEx;
                        require $phpbb_root_path . 'includes/cleantalk.class.' . $phpEx;
                     }
                     
                     if (function_exists('get_ct_checkjs'))
                     {
                        $ct_checkjs = get_ct_checkjs();
                     }
                     else
                     {
                        $ct_checkjs = null;
                     }
                     if (function_exists('get_sender_info'))
                     {
                        $sender_info = get_sender_info(true);
                     }
                     else
                     {
                        $sender_info = null;
                     }
                     
                     $submit_time = null;
                     if (isset($user->data['ct_submit_time']) && preg_match("/^\d+$/", $user->data['ct_submit_time']))
                     {
                        $submit_time = time() - $user->data['ct_submit_time'];
                     }

                     $message = $data['website'] . ' ' . $data['location'] . ' ' .
                           $data['occupation'] . ' ' . $data['interests'];
   
                     $ct_request = new CleantalkRequest();

                     $ct_request->sender_info    = $sender_info;
                     $ct_request->auth_key       = $config['ct_auth_key'];
                     $ct_request->message       = $message;
                     $ct_request->sender_email    = $user->data['user_email'];
                     $ct_request->sender_nickname = $user->data['username'];
                     $ct_request->agent          = 'ct-phpbb-' . preg_replace("/(\d)\.(\d)\.(\d)/", "$1$2$3", $config['ct_version']);
                     $ct_request->sender_ip       = ct_session_ip($user->data['session_ip']);
                     $ct_request->response_lang    = $config['ct_response_lang'];
                     $ct_request->submit_time    = $submit_time;
                     $ct_request->js_on          = $ct_checkjs;

                     $ct                = new Cleantalk();
                     $ct->work_url       = $config['ct_work_url'];
                     $ct->server_url       = $config['ct_server_url'];
                     $ct->server_ttl       = $config['ct_server_ttl'];
                     $ct->server_changed    = $config['ct_server_changed'];

                     $ct_result = $ct->isAllowMessage($ct_request);

                     if ($ct_result->allow == 0)
                     {
                        $error[] = $ct_result->comment;
                     }
                     if ($ct->server_change)
                     {
                        set_config('ct_work_url', $ct->work_url);
                        set_config('ct_server_ttl', $ct->server_ttl);
                        set_config('ct_server_changed', time());
                     }
                  }
               }
               // End: cleantalk.ru moderation
использовать
Код: выделить все
               // Begin: cleantalk.ru moderation
               if (!sizeof($error) && $config['ct_enable'] && $config['ct_moderate_newly_registered']
                  && (!empty($data['website']) || !empty($data['location']) ||!empty($data['occupation']) || !empty($data['interests'])))
               {
                  $message = $data['website'] . ' ' . $data['location'] . ' ' . $data['occupation'] . ' ' . $data['interests'];

                  ct_profile_moderate($message, $error);
               }
               // End: cleantalk.ru moderation
вместо
Код: выделить все
                  // Begin: cleantalk.ru moderation
                  if (!sizeof($error) && $submit && $config['ct_enable'])
                  {
                     $moderate = false;

                     $sql = 'SELECT g.group_name FROM ' . GROUPS_TABLE . ' g, ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . ' ug where
                                                   ug.user_id=u.user_id and ug.group_id=g.group_id and g.group_type = ' . GROUP_SPECIAL . ' and u.user_id = ' . (int) $user->data['user_id'];

                     $result    = $db->sql_query($sql);
                     while ($row    = $db->sql_fetchrow($result))
                     {
                        if ($row['group_name'] === 'NEWLY_REGISTERED' && $config['ct_moderate_newly_registered'])
                        {
                           $moderate = true;
                        }
                     }

                     if (!class_exists('Cleantalk'))
                     {
                        require $phpbb_root_path . 'includes/cleantalk.' . $phpEx;
                        require $phpbb_root_path . 'includes/cleantalk.class.' . $phpEx;
                     }
                     if ($moderate)
                     {
                        if (function_exists('get_ct_checkjs'))
                        {
                           $ct_checkjs = get_ct_checkjs();
                        }
                        else
                        {
                           $ct_checkjs = null;
                        }

                        $message = (string) $message_parser->message;

                        if (function_exists('get_sender_info'))
                        {
                           $sender_info = get_sender_info(true);
                        }
                        else
                        {
                           $sender_info = null;
                        }
                        
                        $submit_time = null;
                        if (isset($user->data['ct_submit_time']) && preg_match("/^\d+$/", $user->data['ct_submit_time']))
                        {
                           $submit_time = time() - $user->data['ct_submit_time'];
                        }

                        $ct_request = new CleantalkRequest();

                        $ct_request->sender_info    = $sender_info;
                        $ct_request->auth_key       = $config['ct_auth_key'];
                        $ct_request->message       = $message;
                        $ct_request->sender_email    = $user->data['user_email'];
                        $ct_request->sender_nickname = $user->data['username'];
                        $ct_request->agent          = 'ct-phpbb-' . preg_replace("/(\d)\.(\d)\.(\d)/", "$1$2$3", $config['ct_version']);
                        $ct_request->sender_ip       = ct_session_ip($user->data['session_ip']);
                        $ct_request->response_lang    = $config['ct_response_lang'];
                        $ct_request->submit_time    = $submit_time;
                        $ct_request->js_on          = $ct_checkjs;

                        $ct                = new Cleantalk();
                        $ct->work_url       = $config['ct_work_url'];
                        $ct->server_url       = $config['ct_server_url'];
                        $ct->server_ttl       = $config['ct_server_ttl'];
                        $ct->server_changed    = $config['ct_server_changed'];

                        $ct_result = $ct->isAllowMessage($ct_request);

                        if ($ct_result->allow == 0)
                        {
                           $error[] = $ct_result->comment;
                        }
                        if ($ct->server_change)
                        {
                           set_config('ct_work_url', $ct->work_url);
                           set_config('ct_server_ttl', $ct->server_ttl);
                           set_config('ct_server_changed', time());
                        }
                     }
                  }
                  // End: cleantalk.ru moderation
использовать
Код: выделить все
                  // Begin: cleantalk.ru moderation
                  if (!sizeof($error) && $submit && $config['ct_enable'] && $config['ct_moderate_newly_registered'])
                  {
                     ct_profile_moderate($message_parser->message, $error);
                  }
                  // End: cleantalk.ru moderation
и перед
Код: выделить все
?>
добавить
Код: выделить все
// Begin: cleantalk.ru moderation
function ct_profile_moderate($message, &$error)
{
   global $db, $phpbb_root_path, $phpEx, $user;

   $sql = 'SELECT IF(g.group_name IS NULL, 0, 1) as moderate
         FROM ' . USERS_TABLE . ' u
            JOIN ' . USER_GROUP_TABLE . ' ug ON (ug.user_id=u.user_id)
            JOIN ' . GROUPS_TABLE . " g ON (ug.group_id=g.group_id)
         WHERE g.group_name = 'NEWLY_REGISTERED' AND u.user_id = " . (int) $user->data['user_id'];

   $result = $db->sql_query($sql);
   $moderate = (int) $db->sql_fetchfield('moderate');
   $db->sql_freeresult($result);

   if(!$moderate)
   {
      return ;
   }
   require_once($phpbb_root_path . 'includes/cleantalk.' . $phpEx);
   require_once($phpbb_root_path . 'includes/cleantalk.class.' . $phpEx);

   $submit_time = null;
   if (isset($user->data['ct_submit_time']) && preg_match("/^\d+$/", $user->data['ct_submit_time']))
   {
      $submit_time = time() - $user->data['ct_submit_time'];
   }

   $ct_request = new CleantalkRequest();

   $ct_request->sender_info    = get_sender_info(true);
   $ct_request->auth_key       = $config['ct_auth_key'];
   $ct_request->message       = (string) $message;
   $ct_request->sender_email    = $user->data['user_email'];
   $ct_request->sender_nickname = $user->data['username'];
   $ct_request->agent          = 'ct-phpbb-' . preg_replace("/(\d)\.(\d)\.(\d)/", "$1$2$3", $config['ct_version']);
   $ct_request->sender_ip       = ct_session_ip($user->data['session_ip']);
   $ct_request->response_lang    = $config['ct_response_lang'];
   $ct_request->submit_time    = $submit_time;
   $ct_request->js_on          = get_ct_checkjs();

   $ct                = new Cleantalk();
   $ct->work_url       = $config['ct_work_url'];
   $ct->server_url       = $config['ct_server_url'];
   $ct->server_ttl       = $config['ct_server_ttl'];
   $ct->server_changed    = $config['ct_server_changed'];

   $ct_result = $ct->isAllowMessage($ct_request);

   if ($ct_result->allow == 0)
   {
      $error[] = $ct_result->comment;
   }
   if ($ct->server_change)
   {
      set_config('ct_work_url', $ct->work_url);
      set_config('ct_server_ttl', $ct->server_ttl);
      set_config('ct_server_changed', time());
   }
}
// End: cleantalk.ru moderation

эффект тот же, а кода и лишних действий в двое меньше :) .
Аватар пользователя
serjan
Разработчик модов
 
Сообщений: 480
Зарегистрирован:
12 янв 2009, 19:18
Благодарил (а): 0 раз.
Поблагодарили: 4 раз.

Сообщение 22 апр 2013, 18:06

Согласен, сделаем оптимизацию в следующей версии, функцию ct_profile_moderate() вынесем в includes/cleantalk.php.
Аватар пользователя
shagimuratov
Активный участник
 
Сообщений: 92
Зарегистрирован:
12 май 2012, 09:51
Откуда:
Челябинск
Благодарил (а): 2 раз.
Поблагодарили: 4 раз.

Сообщение 22 апр 2013, 21:46

shagimuratov писал(а):функцию ct_profile_moderate() вынесем в includes/cleantalk.php.
В этом нет смысла т.к. она используется только в includes/ucp/ucp_profile.php.

Еще я изучал функцию get_ct_checkjs(), но так и не понял смысла выделять ситуаци:
Код: выделить все
   null - JS html code not inserted into phpBB templates
   0 - JS disabled at the client browser
, ведь в текущей версии мода проверка вставляется через хук и ситуация с возвратом функцией get_ct_checkjs() значения null фактически невзоможна. Поправьте меня если я не прав.
Аватар пользователя
serjan
Разработчик модов
 
Сообщений: 480
Зарегистрирован:
12 янв 2009, 19:18
Благодарил (а): 0 раз.
Поблагодарили: 4 раз.

Сообщение 23 апр 2013, 05:44

serjan писал(а):
shagimuratov писал(а):функцию ct_profile_moderate() вынесем в includes/cleantalk.php.
В этом нет смысла т.к. она используется только в includes/ucp/ucp_profile.php.


Функция в отдельном файле проще в сопровождении, к примеру при ручном обновлении модуля, если в новой версии будут правки в ct_profile_moderate(), то достаточно будет скопировать новый includes/cleantalk.php в файлы форума. Если же фукнцию оставить в includes/ucp/ucp_profile.php, то потребуется ручная правка этого файла.

Еще я изучал функцию get_ct_checkjs(), но так и не понял смысла выделять ситуаци:
КОД: ВЫДЕЛИТЬ ВСЕ
null - JS html code not inserted into phpBB templates
0 - JS disabled at the client browser
, ведь в текущей версии мода проверка вставляется через хук и ситуация с возвратом функцией get_ct_checkjs() значения null фактически невзоможна. Поправьте меня если я не прав.


Могут быть случай когда хук не отработал, например файл с хуком не скопирован в директорию includes/hooks. В таких ситуациях наилучшим выходом будет проигнорировать проверку, дабы не допустить фильтрацию живого пользователя.
Аватар пользователя
shagimuratov
Активный участник
 
Сообщений: 92
Зарегистрирован:
12 май 2012, 09:51
Откуда:
Челябинск
Благодарил (а): 2 раз.
Поблагодарили: 4 раз.

Сообщение 08 май 2013, 16:32

Довольно таки нужный мод для форума,а то эти спамеры задолбали,сил нет.
торент1 http://xn--80aeqbnaqhbbq.xn--p1ai
phpBB3 портал http://artis62.ru
rety
Пользователь
 
Сообщений: 10
Зарегистрирован:
08 май 2013, 16:09
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение 11 июн 2013, 10:24

Модуль обновлен, улучшения в новой версии:
  • Акаунт нового пользователя будет отправлен на ручную активацию администрации форума с оповещением по email, если не доступен сервер автоматической модерации, либо приостановлен доступ к сервису. Напоминаем, что в предыдущих версиях модуля, в подобных ситуациях акаунт пользователя регистрировался на форуме, что могло привести к массовой регистрации ботов.
  • В связи с не востребованностью, удалена защита от спама в профилях пользователей форума.
  • Сделана оптимизация PHP кода в базовом классе и хуке.

Исправления в модуле:
  • Исправлен баг с зацикливанием функции ct_error_mail();
  • Исправлен баг с подключением шаблона ucp_sms_check.html.

Напоминаю, что перед обновлением необходимо сделать бекап базы данных и файлов форума! Обновить модуль можно через Автомод, предварительно удалив предыдущую версию.
Вложения
лог фильтрации ботов.jpg
Лог фильтрации ботов
cleantalk_spam_protect_v_3.7.16.zip
Архив с модулем
(244.31 KiB) Скачиваний: 145
Аватар пользователя
shagimuratov
Активный участник
 
Сообщений: 92
Зарегистрирован:
12 май 2012, 09:51
Откуда:
Челябинск
Благодарил (а): 2 раз.
Поблагодарили: 4 раз.

Сообщение 18 июн 2013, 00:29

Cleantalk ставлю через AutoMOD затем вручную загружаю файлы на хостинг, AutoMOD видит Cleantalk в установленных модификациях, но настроить Cleantalk я не могу т.к. он не появился как новая вкладка вот образец того что должно было выйти https://cleantalk.org/install/phpbb3#access_key (5 рисунок) , а у меня этой вкладки последней нет. Как это исправить? Может я что то не так на хостинг закинул? Загружал заменяя старые файлы новыми(которые он выдал в архиве при установке) вот по такому пути /public_html/store/mods/cleantalk_spam_protect_v_3.7.16/root т.к. AutoMOD все грузит в папку /public_html/store/mods/ . Где моя ошибка?
LIZARD
Пользователь
 
Сообщений: 11
Зарегистрирован:
31 май 2013, 12:38
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение 18 июн 2013, 04:59

Lizard, настройки мода находятся в меню:

Цент администирования -> Модули -> CleanTalk.

Нашли модуль по этому адресу?

Прошу прощения за неправильный скриншот, на прошлой неделе обновили мод, а про скриншот забыли. Сейчас исправим.
Аватар пользователя
shagimuratov
Активный участник
 
Сообщений: 92
Зарегистрирован:
12 май 2012, 09:51
Откуда:
Челябинск
Благодарил (а): 2 раз.
Поблагодарили: 4 раз.

Сообщение 18 июн 2013, 10:36

shagimuratov писал(а):Lizard, настройки мода находятся в меню:

Цент администирования -> Модули -> CleanTalk.

Нашли модуль по этому адресу?

Прошу прощения за неправильный скриншот, на прошлой неделе обновили мод, а про скриншот забыли. Сейчас исправим.

В том то и дело что по такому адресу я не могу найти ничего, самой вкладки модов у меня нет, вот скриншот
Изображение
LIZARD
Пользователь
 
Сообщений: 11
Зарегистрирован:
31 май 2013, 12:38
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.


Вернуться в Моды каталога

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Форум поддержки phpBB
2008 - 2017 © BB3x.ru - русская поддержка форума phpBB3
Создано на основе phpBB® Forum Software © phpBB Group
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама