Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

User Topics\Posts limit

Здесь авторы постили бета-версии своих модификаций для phpBB 2.0.x. Внимание! Не устанавливайте бета-версии модов на работающие форумы!
Codeblight
phpBB 1.0.0
Сообщения: 7
Стаж: 18 лет

User Topics\Posts limit

Сообщение Codeblight »

На форуме у меня деверсанты завелись 8-) каждый день регается 2-3 человека, которые ничего не пишут и не входят в свой профиль. Перед этим была пара очень недовольных людей, которые, как мне кажется (параноик!) могут нагадить. Предидущий форум (другого владельца) был зафлужен этими недовольными... У меня запрещены посты\топики от гостей, но если человек зарегистрирует около 30 логинов, а потом выйдет ночью (часика в 3, когда все спят) и пустит флудер часа на 3-4 них ... то получится (при интервале в 15 секунд) следующее:
60\15 = 4 сообщ. мин.
60*4 = 240 сообщ. в час.
240*4 = 960 сообщ. от 1 логина за 4 часа
960*30 = 28800 сообщ. за ночь :)

Вот такие цифИрки. Решил оградиться от этого и ночью написал небольшой мод для ограничения числа новых топиков и постов за 24 часа пользователем.
Что это даст? Если ограничить за 24 часа скажем 50 сообщений и 5 новых тем (на моем форуме редко 1 человек создает чаще 2-3 тем в день) то при флуде с 30 аккаунтов получим примерно:
50*30 = 1500 сообщений, что значительно меньше *-) Естественно стоит учесть время флуда - там еще около 300 сообщ (если флудить 4 часа). Возможно изобрел велосипед :) но нужного мода не нашел вчера...
Собственно теперь вопрос - гляньте, сильно будет он тормозить\глюкать форум? я в пхп не шарю, я больше по с++ но думаю они похожи :) Напишите, если ошибки найдете. Я мод поставил, он вроде работает *-)

Собственно код мода:

Код: Выделить всё

##########################################################################
## MOD Title:		Topics\posts Limit
## MOD Author: 		Codeblight (codeblight@mail.ru)
## MOD Description:	Adds Topics\posts per day limits for registred user
## MOD Version:		1.0.0
##
## Installation Level:	Easy
## Installation Time:	5 Minutes
##	
##
## Files To Edit:	5
##			posting.php
##			admin/admin_board.php
##			templates/subSilver/admin/board_config_body.tpl
##			language/lang_english/lang_main.php
##			language/lang_english/lang_admin.php
##
## Included Files:	none
##
## License: http://opensource.org/licenses/gpl-license.php GNU General Public License v2
##
##########################################################################

##########################################################################
## Installation/Author Notes:
## First always backup the files that you're going to edit.
##
## This mod adds a new column to your 'users' table.  If you are not happy
## making changes to your SQL database this mod is not for you!
##
## Tested on phpBB 2.0.19 with subSilver and my own template
##########################################################################

##########################################################################
## MOD History:
##
##  28.03.2006 - Version 1.0.0 First Release
##########################################################################

##########################################################################
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD
##########################################################################

##########################################################################
#
#-----[ SQL ]--------------------------------------------------------------------------------
#

INSERT INTO phpbb_config (config_name, config_value) VALUES ('posts_per_day_limit', '50');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('topics_per_day_limit', '10');

#
#-----[ OPEN ]-------------------------------------------------------------------------------
#

language/lang_english/lang_admin.php

#
#-----[ FIND ]-------------------------------------------------------------------------------
#

$lang['Flood_Interval'] = 'Flood Interval';
$lang['Flood_Interval_explain'] = 'Number of seconds a user must wait between posts'; 

#
#-----[ AFTER, ADD ]-------------------------------------------------------------------------
#

$lang['MaxPostsPerDay'] = 'Maximum posts per day';
$lang['MaxPostsPerDayComment'] = 'Maximum posts per day limit for one user (0 - unlimited). This feature don\'t work with guest users.';
$lang['MaxTopicsPerDay'] = 'Maximum new topics per day';
$lang['MaxTopicsPerDayComment'] = 'Maximum new topics per day limit for one user (0 - unlimited). This feature don\'t work with guest users.';

#
#-----[ OPEN ]-------------------------------------------------------------------------------
#

language/lang_english/lang_main.php

#
#-----[ FIND ]-------------------------------------------------------------------------------
#

?>

#
#-----[ BEFORE, ADD ]-------------------------------------------------------------------------
#

$lang['PostsPerDayExceeded'] = 'Your daily limit of %d messages was exceeded, please try again later.';
$lang['TopicsPerDayExceeded'] = 'Your daily limit of %d new topics was exceeded, please try again later.';

#
#-----[ OPEN ]-------------------------------------------------------------------------------
#

language/lang_russian/lang_admin.php

#
#-----[ FIND ]-------------------------------------------------------------------------------
#

$lang['Flood_Interval'] = 'Задержка «флуда»';
$lang['Flood_Interval_explain'] = 'Время (в секундах), которое должно пройти между двумя сообщениями пользователя.';

#
#-----[ AFTER, ADD ]-------------------------------------------------------------------------
#

$lang['MaxPostsPerDay'] = 'Максимум сообщений в день';
$lang['MaxPostsPerDayComment'] = 'Ограничение на число сообщений в день на одного пользователя (0 - не ограничено). Эта опция не работает с гостями.';
$lang['MaxTopicsPerDay'] = 'Максимум новых тем в день';
$lang['MaxTopicsPerDayComment'] = 'Ограничение на число новых тем в день на одного пользователя (0 - не ограничено). Эта опция не работает с гостями.';

#
#-----[ OPEN ]--------------------------------------------------------------------------------
#

language/lang_russian/lang_main.php

#
#-----[ FIND ]--------------------------------------------------------------------------------
#

?>

#
#-----[ BEFORE, ADD ]--------------------------------------------------------------------------
#

$lang['PostsPerDayExceeded'] = 'Ваш лимит из %d сообщений в день был исчерпан, пожалуйста попробуйте позже.';
$lang['TopicsPerDayExceeded'] = 'Ваш лимит из %d новых тем в день был исчерпан, пожалуйста попробуйте позже.';

#
#-----[ OPEN ]---------------------------------------------------------------------------------
#

admin/admin_board.php

#
#-----[ FIND ]---------------------------------------------------------------------------------
#

"L_FLOOD_INTERVAL" => $lang['Flood_Interval'],
"L_FLOOD_INTERVAL_EXPLAIN" => $lang['Flood_Interval_explain'], 

#
#-----[ AFTER, ADD ]---------------------------------------------------------------------------
#

"L_MAX_POSTS_PER_DAY" => $lang['MaxPostsPerDay'], 
"L_MAX_POSTS_PER_DAY_COMMENT" => $lang['MaxPostsPerDayComment'], 
"L_MAX_TOPICS_PER_DAY" => $lang['MaxTopicsPerDay'], 
"L_MAX_TOPICS_PER_DAY_COMMENT" => $lang['MaxTopicsPerDayComment'], 

#
#-----[ FIND ]---------------------------------------------------------------------------------
#

"FLOOD_INTERVAL" => $new['flood_interval'],

#
#-----[ AFTER, ADD ]---------------------------------------------------------------------------
#

"POST_PER_DAY_LIMIT" => $new['posts_per_day_limit'],
"TOPIC_PER_DAY_LIMIT" => $new['topics_per_day_limit'],

#
#-----[ OPEN ]---------------------------------------------------------------------------------
#

templates/subSilver/admin/board_config_body.tpl

#
#-----[ FIND ]---------------------------------------------------------------------------------
#

<tr>
	<td class="row1">{L_FLOOD_INTERVAL} <br /><span class="gensmall">{L_FLOOD_INTERVAL_EXPLAIN}</span></td>
	<td class="row2"><input class="post" type="text" size="3" maxlength="4" name="flood_interval" value="{FLOOD_INTERVAL}" /></td>
</tr>

#
#-----[ AFTER, ADD ]---------------------------------------------------------------------------
#

<tr>
	<td class="row1">{L_MAX_POSTS_PER_DAY} <br /><span class="gensmall">{L_MAX_POSTS_PER_DAY_COMMENT}</span></td>
	<td class="row2"><input class="post" type="text" size="3" maxlength="4" name="posts_per_day_limit" value="{POST_PER_DAY_LIMIT}" /></td>
</tr>
<tr>
	<td class="row1">{L_MAX_TOPICS_PER_DAY} <br /><span class="gensmall">{L_MAX_TOPICS_PER_DAY_COMMENT}</span></td>
	<td class="row2"><input class="post" type="text" size="3" maxlength="4" name="topics_per_day_limit" value="{TOPIC_PER_DAY_LIMIT}" /></td>
</tr>

#
#-----[ OPEN ]----------------------------------------------------------------------------------
#

posting.php

#
#-----[ FIND ]----------------------------------------------------------------------------------
#

if ( $mode == 'editpost' || $mode == 'delete' || $mode == 'poll_delete' )

#
#-----[ BEFORE, ADD ]---------------------------------------------------------------------------
#

	if (!$userdata['session_admin'])
	{
		$poster_id = $userdata['user_id'];
		$current_time = time();

		switch ( $mode )
		{
		case 'reply':
			// проверка на число новых постов
			$sql = "SELECT " . $current_time . " - post_time FROM " . POSTS_TABLE . " WHERE poster_id = " . $poster_id . " AND " . $current_time . " - post_time < 86400";
			if (!$result = $db->sql_query($sql))
			{
				message_die(GENERAL_ERROR, 'Could not obtain forums information', '', __LINE__, __FILE__, $sql);
			}

			if ($db->sql_numfields($result))
			{
				$rowcount = $db->sql_numrows($result);
				if ($rowcount > 0)
				{
					$posts_lim = intval($board_config['posts_per_day_limit']);
					if ($posts_lim > 0)
					{
						if ($posts_lim <= $rowcount)
						{
							message_die(GENERAL_MESSAGE, sprintf($lang['PostsPerDayExceeded'], $board_config['posts_per_day_limit'])); 
						}
					}
				}
			}
			$db->sql_freeresult($result);
			break;

        	case 'newtopic':
			// проверка на число топиков
			$sql = "SELECT " . $current_time . " - topic_time FROM " . TOPICS_TABLE . " WHERE topic_poster = " . $poster_id . " AND " . $current_time . " - topic_time < 86400";

			if (!$result = $db->sql_query($sql))
			{
				message_die(GENERAL_ERROR, 'Could not obtain forums information', '', __LINE__, __FILE__, $sql);
			}
			if ($db->sql_numfields($result))
			{
				$rowcount = $db->sql_numrows($result);
				if ($rowcount > 0)
				{
					$topics_lim = intval($board_config['topics_per_day_limit']);
					if ($topics_lim > 0)
					{
						if ($topics_lim <= $rowcount)
						{
							message_die(GENERAL_MESSAGE, sprintf($lang['TopicsPerDayExceeded'], $board_config['topics_per_day_limit'])); 
						}
					}
				}
			}
			$db->sql_freeresult($result);
			break;
		}
	}


#
#-----[ SAVE/CLOSE ALL FILES ]-----------------------------------------------------------------------
#
# EoM

Вернуться в «Бета-версии модов для phpBB 2.0.x»