фильтр чата для hlstatsx

Сообщения
4
Реакции
2
Помогите найти мануал по установке фильтр чата статистики, а то весь чат засоряется "!rs" и прочей ненужной информацией!
 

TolikCorp

Участник
Сообщения
874
Реакции
334
Он про то, что игрок пишет !rs , а это в бд заносится
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
именно про это)
раньше стояла но после переустановки hlstatsx пропала. В интернете не могу нарыть.

А если попробовать переделать плагин !rs?
Что бы не отображалось в чате !rs а было написано что некий игрок сбросил счет.
P.S. нарыл уже?
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
переделать плагин !rs?
Что бы не отображалось в чате !rs
В моём "сбрасывателе счёта" давно убран показ коротких команд в чате. Длинные запретить куда сложнее из-за особенностей плагина.
написано что некий игрок сбросил счет
У меня - только самому игроку) Недавно думал, а надо ли добавлять для всех...
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
В моём "сбрасывателе счёта" давно убран показ коротких команд в чате. Длинные запретить куда сложнее из-за особенностей плагина.

У меня - только самому игроку) Недавно думал, а надо ли добавлять для всех...

За rs спасибо, но ведь nominate/rtv/hlx etc. пишутся в лог чата.
Это лечение только одного из симптомов, так что :this:
 
Сообщения
4
Реакции
2
За rs спасибо, но ведь nominate/rtv/hlx etc. пишутся в лог чата.
Это лечение только одного из симптомов, так что :this:

нет, не нарыл...
В интернете была информация добавления фильтра, но не могу найти его. Где "здесь" добавляется пункт chat filter, открыв его пишешь слова, которые не будут отображаться в чате.
 

Вложения

  • 111.jpg
    111.jpg
    52.3 КБ · Просмотры: 115

tiger_by

Гл. Админ SourceGames.RU
Сообщения
631
Реакции
278
Мне кажется надо править перловый скрипт, который парсит логи. hlstatx.pl
 
Сообщения
4
Реакции
2
Нашел в одном форуме, но увы закрыт. PS. спасибо поисковику mail.ru :D
Часто чат засирается словами !bank, top, rank, !ztele, shopmenu и т.д. и этих фраз бывает по пол-страницы а то и больше.
Для более комфортного чтения сделал фильтр чата HLstatsX
В админке в разделе фильтра задаются сообщения, которые не надо отображать:
Установка:
Распакуйте файл tools_chatfilter.php в папку /pages/admintasks
Откройте файл /pages/admin.php и добавьте после строки
Код:
// Tools
строку
Код:
$admintasks['tools_chatfilter'] = new AdminTask('HLstatsX: Chat filter', 80, 'tool', 'Chat filter');
Откройте файлы /pages/chat.php и /pages/chathistory.php и ПЕРЕД кодом
Код:
$result = $db->query
("
SELECT
hlstats_Events_Chat.eventTime,
IF(hlstats_Events_Chat.message_mode=2, CONCAT('(Team) ', hlstats_Events_Chat.message), hlstats_Events_Chat.message) AS message,
hlstats_Servers.name AS serverName,
hlstats_Events_Chat.map
добавьте код
Код:
$chatfilter='1';
$db->query("SELECT value FROM `hlstats_AddonsOptions` WHERE keyname='chatfilter_words'");
$rowdata = $db->fetch_array();
if ($rowdata['value']!='') {
$a=explode("\n",$rowdata['value']);
foreach ($a as $v) {
if (trim($v)!='') $chatfilter.=" AND hlstats_Events_Chat.message!='".trim($v)."'";
}
}
Далее найдите в этих файлах строку
Код:
$whereclause $whereclause2
и замените её на
Код:
$whereclause $whereclause2 AND $chatfilter
Дерзайте ребята =)
 

Вложения

  • tools_chatfilter.zip
    1,007 байт · Просмотры: 54
Последнее редактирование:

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Нашел в одном форуме, но увы закрыт. PS. спасибо поисковику mail.ru :D
Часто чат засирается словами !bank, top, rank, !ztele, shopmenu и т.д. и этих фраз бывает по пол-страницы а то и больше.
Для более комфортного чтения сделал фильтр чата HLstatsX
В админке в разделе фильтра задаются сообщения, которые не надо отображать:
Установка:
Распакуйте файл tools_chatfilter.php в папку /pages/admintasks
Откройте файл /pages/admin.php и добавьте после строки
Код:
// Tools
строку
Код:
$admintasks['tools_chatfilter'] = new AdminTask('HLstatsX: Chat filter', 80, 'tool', 'Chat filter');
Откройте файлы /pages/chat.php и /pages/chathistory.php и ПЕРЕД кодом
Код:
$result = $db->query
("
SELECT
hlstats_Events_Chat.eventTime,
IF(hlstats_Events_Chat.message_mode=2, CONCAT('(Team) ', hlstats_Events_Chat.message), hlstats_Events_Chat.message) AS message,
hlstats_Servers.name AS serverName,
hlstats_Events_Chat.map
добавьте код
Код:
$chatfilter='1';
$db->query("SELECT value FROM `hlstats_AddonsOptions` WHERE keyname='chatfilter_words'");
$rowdata = $db->fetch_array();
if ($rowdata['value']!='') {
$a=explode("\n",$rowdata['value']);
foreach ($a as $v) {
if (trim($v)!='') $chatfilter.=" AND hlstats_Events_Chat.message!='".trim($v)."'";
}
}
Далее найдите в этих файлах строку
Код:
$whereclause $whereclause2


и замените её на
Код:
$whereclause $whereclause2 AND $chatfilter
Дерзайте ребята =)

После установки ссылка на чат начала показывать белый экран, но пункт в меню добавился.
Наверное не правильно поставил, завтра попробую вникнуть и переставить
 
M

MihailM

Danyas, в /pages/chathistory.php только одна переменная $whereclause
возможно замена в этом файле будет так : $whereclause AND $chatfilter
в /pages/chat.php без изменений , как в инструкции версия HLstatsX 1.6.19

 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Сделал всё, прилагаю мои копии файлов+лист комманд
rtv
nominate
!rs
voteban
votemap
ff
nextmap
!кы
rpgmenu
!shop
!market
!medic
!rtv
/rs
!resetscore
votemute
votekick
кфтл
кем
!кем
!rd
!voteban
!votebam
!sr
!admin
!admins
!knifemenu
top
!kmenu
!kfmenu
!res
!nominate
nominate
hlx
!sp
!spec
Файлы
PHP:
<?php
	if ( !defined('IN_HLSTATS') )
	{
		die('Do not access this file directly.');
	}
// Global Server Chat History
	$showserver=0;
	if (isset($_GET['server_id']))
	{
		$showserver = valid_request(strval($_GET['server_id']), true);
	}
	if ($showserver == 0)
	{
		$whereclause = "hlstats_Servers.game='$game'";
	}
	else
	{
		$whereclause = "hlstats_Servers.game='$game' AND hlstats_Events_Chat.serverId=$showserver";
	}
	$db->query
	("
		SELECT
			hlstats_Games.name
		FROM
			hlstats_Games
		WHERE
			hlstats_Games.code = '$game'
	");
	if ($db->num_rows() < 1) error("No such game '$game'.");
	list($gamename) = $db->fetch_row();
	$db->free_result();
	pageHeader
	(
		array ($gamename, 'Статистика чата серверов'),
		array ($gamename=>"%s?game=$game", 'Чат сервера'=>'')
	);
	flush();
	$servername = "(All Servers)";
	
	if ($showserver != 0)
	{
		$result=$db->fetch_array
		(
			$db->query
			("
				SELECT
					hlstats_Servers.name
				FROM
					hlstats_Servers
				WHERE
					hlstats_Servers.serverId = ".$db->escape($showserver)."
			")
		);
		$servername = "(" . $result['name'] . ")";
	}
?>

<div class="block">
	<?php printSectionTitle("$gamename $servername Лог чата за последние ".$g_options['DeleteDays'].' дней'); ?>
	<div class="subblock">
		<div style="float:left;">
			<span>
			<form method="get" action="<?php echo $g_options['scripturl']; ?>" style="margin:0px;padding:0px;">
				<input type="hidden" name="mode" value="chat" />
				<input type="hidden" name="game" value="<?php echo $game; ?>" />
				<strong>•</strong> Показать чат с
				<?php
/*
					$result = $db->query
					("
						SELECT
							DISTINCT hlstats_Events_Chat.serverId,
							hlstats_Servers.name
						FROM
							hlstats_Events_Chat
						INNER JOIN
							hlstats_Servers
						ON
							hlstats_Events_Chat.serverId = hlstats_Servers.serverId
							AND hlstats_Servers.game='$game'
						ORDER BY
							hlstats_Servers.sortorder,
							hlstats_Servers.name,
							hlstats_Events_Chat.serverId ASC
						LIMIT
							0,
							50
					");
*/

					$result = $db->query
					("
						SELECT
							hlstats_Servers.serverId,
							hlstats_Servers.name
						FROM
							hlstats_Servers
						WHERE
							hlstats_Servers.game='$game'
						ORDER BY
							hlstats_Servers.sortorder,
							hlstats_Servers.name,
							hlstats_Servers.serverId ASC
						LIMIT
							0,
							50
					");

					echo '<select name="server_id"><option value="0">Все сервера</option>';
					$dates = array ();
					$serverids = array();
					while ($rowdata = $db->fetch_array())
					{
						$serverids[] = $rowdata['serverId'];
						$dates[] = $rowdata; 
						if ($showserver == $rowdata['serverId'])
							echo '<option value="'.$rowdata['serverId'].'" selected>'.$rowdata['name'].'</option>';
						else
							echo '<option value="'.$rowdata['serverId'].'">'.$rowdata['name'].'</option>';
					}
					echo '</select>';
					$filter=isset($_REQUEST['filter'])?$_REQUEST['filter']:"";
				?>
				Фильтровать: <input type="text" name="filter" value="<?php echo htmlentities($filter); ?>" /> 
				<input type="submit" value="View" class="smallsubmit" />
			</form>
			</span>
		</div>
	</div>
	<div style="clear:both;padding-top:20px;"></div>
		<?php
			if ($showserver == 0)
			{
				$table = new Table(
					array
					(
						new TableColumn
						(
							'eventTime',
							'Дата',
							'width=16'
						),
						new TableColumn
						(
							'lastName',
							'Игрок',
							'width=17&sort=no&flag=1&link=' . urlencode('mode=playerinfo&amp;player=%k')
						),
						new TableColumn
						(
							'message',
							'Сообщение',
							'width=34&sort=no&embedlink=yes'
						),
						new TableColumn
						(
							'serverName',
							'Сервер',
							'width=23&sort=no'
						),
						new TableColumn
						(
							'map',
							'Карта',
							'width=10&sort=no'
						)
					),
					'playerId',
					'eventTime',
					'lastName',
					false,
					50,
					"page",
					"sort",
					"sortorder"
				);
			}
			else
			{
				$table = new Table(
					array
					(
						new TableColumn
						(
							'eventTime',
							'Дата',
							'width=16'
						),
						new TableColumn
						(
							'lastName',
							'Игрок',
							'width=24&sort=no&flag=1&link=' . urlencode('mode=playerinfo&amp;player=%k')
						),
						new TableColumn
						(
							'message',
							'Сообщение',
							'width=44&sort=no&embedlink=yes'
						),
						new TableColumn
						(
							'map',
							'Карта',
							'width=16&sort=no'
						)
					),
					'playerId',
					'eventTime',
					'lastName',
					false,
					50,
					"page",
					"sort",
					"sortorder"
				);
			}
			$whereclause2='';
			if(!empty($filter))
			{
				$whereclause2="AND MATCH (hlstats_Events_Chat.message) AGAINST ('" . $db->escape($filter) . "' in BOOLEAN MODE)";
			}
			$surl = $g_options['scripturl'];
	$chatfilter='1';
	$db->query("SELECT value FROM `hlstats_AddonsOptions` WHERE keyname='chatfilter_words'");
	$rowdata = $db->fetch_array();
	if ($rowdata['value']!='') {
	$a=explode("\n",$rowdata['value']);
	foreach ($a as $v) {
	if (trim($v)!='') $chatfilter.=" AND hlstats_Events_Chat.message!='".trim($v)."'";
	}
	}
			$result = $db->query
			("
				SELECT SQL_NO_CACHE 
					hlstats_Events_Chat.eventTime,
					unhex(replace(hex(hlstats_Players.lastName), 'E280AE', '')) as lastName,
					IF(hlstats_Events_Chat.message_mode=2, CONCAT('(Team) ', hlstats_Events_Chat.message), IF(hlstats_Events_Chat.message_mode=3, CONCAT('(Squad) ', hlstats_Events_Chat.message), hlstats_Events_Chat.message)) AS message,
					hlstats_Servers.name AS serverName,
					hlstats_Events_Chat.playerId,
					hlstats_Players.flag,
					hlstats_Events_Chat.map
					
				FROM
					hlstats_Events_Chat
				INNER JOIN
					hlstats_Players
				ON
					hlstats_Players.playerId = hlstats_Events_Chat.playerId
				INNER JOIN 
					hlstats_Servers
				ON
					hlstats_Servers.serverId = hlstats_Events_Chat.serverId
				WHERE
					$whereclause $whereclause2 AND $chatfilter
				ORDER BY
					hlstats_Events_Chat.id $table->sortorder
				LIMIT
					$table->startitem,
					$table->numperpage;
			", true, false);
/*
    			$whereclause = "hlstats_Events_Chat.serverId ";

			if($showserver == 0) {
				$whereclause .= "in (".implode($serverids,',').")";
			} else {
				$whereclause .= "= $showserver";
			}
*/

			$db->query
			("
				SELECT
		 			count(*)
				FROM
					hlstats_Events_Chat
				INNER JOIN
					hlstats_Players
				ON
					hlstats_Players.playerId = hlstats_Events_Chat.playerId
				INNER JOIN 
					hlstats_Servers
				ON
					hlstats_Servers.serverId = hlstats_Events_Chat.serverId
				WHERE
					$whereclause $whereclause2 AND $chatfilter
			");
			if ($db->num_rows() < 1) $numitems = 0;
			else 
			{
				list($numitems) = $db->fetch_row();
			}
			$db->free_result();	

			$table->draw($result, $numitems, 95);
		?><br /><br />
	<div class="subblock">
		<div style="float:right;">
			Перейти к: <a href="<?php echo $g_options["scripturl"] . "?game=$game"; ?>"><?php echo $gamename; ?></a>
		</div>
	</div>
</div>
PHP:
<?php
/*
HLstatsX Community Edition - Real-time player and clan rankings and statistics
Copyleft (L) 2008-20XX Nicholas Hastings (nshastings@gmail.com)
http://www.hlxcommunity.com

HLstatsX Community Edition is a continuation of 
ELstatsNEO - Real-time player and clan rankings and statistics
Copyleft (L) 2008-20XX Malte Bayer (steam@neo-soft.org)
http://ovrsized.neo-soft.org/

ELstatsNEO is an very improved & enhanced - so called Ultra-Humongus Edition of HLstatsX
HLstatsX - Real-time player and clan rankings and statistics for Half-Life 2
http://www.hlstatsx.com/
Copyright (C) 2005-2007 Tobias Oetzel (Tobi@hlstatsx.com)

HLstatsX is an enhanced version of HLstats made by Simon Garner
HLstats - Real-time player and clan rankings and statistics for Half-Life
http://sourceforge.net/projects/hlstats/
Copyright (C) 2001  Simon Garner
            
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

For support and installation notes visit http://www.hlxcommunity.com
*/

	if ( !defined('IN_HLSTATS') )
	{
		die('Do not access this file directly.');
	}
// Player Chat History
	$player = valid_request(intval($_GET['player']), 1)
		or error('No player ID specified.');
	$db->query
	("
		SELECT
			unhex(replace(hex(hlstats_Players.lastName), 'E280AE', '')) as lastName,
			hlstats_Players.game
		FROM
			hlstats_Players
		WHERE
			hlstats_Players.playerId = $player
	");
	if ($db->num_rows() != 1)
	{
		error("No such player '$player'.");
	}
	$playerdata = $db->fetch_array();
	$pl_name = $playerdata['lastName'];
	if (strlen($pl_name) > 10)
	{
		$pl_shortname = substr($pl_name, 0, 8) . '...';
	}
	else
	{
		$pl_shortname = $pl_name;
	}
	$pl_name = htmlspecialchars($pl_name, ENT_COMPAT);
	$pl_shortname = htmlspecialchars($pl_shortname, ENT_COMPAT);
	$game = $playerdata['game'];
	$db->query
	("
		SELECT
			hlstats_Games.name
		FROM
			hlstats_Games
		WHERE
			hlstats_Games.code = '$game'
	");
	if ($db->num_rows() != 1)
	{
		$gamename = ucfirst($game);
	}
	else
	{
		list($gamename) = $db->fetch_row();
	}
	pageHeader
	(
		array ($gamename, 'История Чата', $pl_name),
		array
		(
			$gamename=>$g_options['scripturl'] . "?game=$game",
			'Player Rankings'=>$g_options['scripturl'] . "?mode=players&game=$game",
			'Player Details'=>$g_options['scripturl'] . "?mode=playerinfo&player=$player",
			'Chat History'=>''
		),
		$playername
	);
	flush();
	$table = new Table
	(
		array
		(
			new TableColumn
			(
				'eventTime',
				'Дата',
				'width=16'
			),

			new TableColumn
			(
				'message',
				'Сообщение',
				'width=44&sort=no&append=.&embedlink=yes'
			),
			new TableColumn
			(
				'serverName',
				'Сервер',
				'width=24'
			),
			new TableColumn
			(
				'map',
				'Карта',
				'width=16'
			)
		),
		'eventTime',
		'eventTime',
		'serverName',
		false,
		50,
		'page',
		'sort',
		'sortorder'
	);
	$surl = $g_options['scripturl'];
	
	$whereclause="hlstats_Events_Chat.playerId = $player ";
	$filter=isset($_REQUEST['filter'])?$_REQUEST['filter']:"";
	if(!empty($filter))
	{
				$whereclause.="AND MATCH (hlstats_Events_Chat.message) AGAINST ('" . $db->escape($filter) . "' in BOOLEAN MODE)";
	}
	$chatfilter='1';
	$db->query("SELECT value FROM `hlstats_AddonsOptions` WHERE keyname='chatfilter_words'");
	$rowdata = $db->fetch_array();
	if ($rowdata['value']!='') {
	$a=explode("\n",$rowdata['value']);
	foreach ($a as $v) {
	if (trim($v)!='') $chatfilter.=" AND hlstats_Events_Chat.message!='".trim($v)."'";
	$result = $db->query
	("
		SELECT
			hlstats_Events_Chat.eventTime,
			IF(hlstats_Events_Chat.message_mode=2, CONCAT('(Team) ', hlstats_Events_Chat.message), IF(hlstats_Events_Chat.message_mode=3, CONCAT('(Squad) ', hlstats_Events_Chat.message), hlstats_Events_Chat.message)) AS message,
			hlstats_Servers.name AS serverName,
			hlstats_Events_Chat.map
		FROM
			hlstats_Events_Chat
		LEFT JOIN 
			hlstats_Servers
		ON
			hlstats_Events_Chat.serverId = hlstats_Servers.serverId
		WHERE
			$whereclause AND $chatfilter
		ORDER BY
			$table->sort $table->sortorder,
			$table->sort2 $table->sortorder
		LIMIT
			$table->startitem,
			$table->numperpage
	");
	
	$resultCount = $db->query
	("
		SELECT
			COUNT(*)
		FROM
			hlstats_Events_Chat
		LEFT JOIN 
			hlstats_Servers
		ON
			hlstats_Events_Chat.serverId = hlstats_Servers.serverId
		WHERE
			$whereclause
	");
			
	list($numitems) = $db->fetch_row($resultCount);
	
?>
<div class="block">
<?php
	printSectionTitle('История чата игрока (За последние '.$g_options['DeleteDays'].' дней)');
?>
	<div class="subblock">
		<div style="float:left;">
			<span>
			<form method="get" action="<?php echo $g_options['scripturl']; ?>" style="margin:0px;padding:0px;">
				<input type="hidden" name="mode" value="chathistory" />
				<input type="hidden" name="player" value="<?php echo $player; ?>" />
				<strong>•</strong>
				Фильтр: <input type="text" name="filter" value="<?php echo htmlentities($filter); ?>" /> 
				<input type="submit" value="View" class="smallsubmit" />
			</form>
			</span>
		</div>
	</div>
	<div style="clear: both; padding-top: 20px;"></div>
<?php
	if ($numitems > 0)
	{
		$table->draw($result, $numitems, 95);
	}
?><br /><br />
	<div class="subblock">
		<div style="float:right;">
			Перейти к: <a href="<?php echo $g_options['scripturl'] . "?mode=playerinfo&amp;player=$player"; ?>"><?php echo $pl_name; ?> Статистика</a>
		</div>
	</div>
</div>
 
M

MihailM

Danyas,в chathistory.php забыл добавить 2 скобки "}}", строка 156-157 ..
и в 197 строчке забыл добавить "AND $chatfilter" . А остальное отписал в ЛС ..
Добавил во вложение уже переделанные файлы для HLstatsX 1.6.19 анг.
Работоспособность проверял на пустом HLstatsX 1.6.19 английской версии .
В меню все есть , слова добавляются и сохраняются .
 

Вложения

  • HLstatsX_1_6_19_eng_chatfilter.rar
    10 КБ · Просмотры: 52
Последнее редактирование модератором:

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Danyas,в chathistory.php забыл добавить 2 скобки "}}", строка 156-157 ..
и в 197 строчке забыл добавить "AND $chatfilter" . А остальное отписал в ЛС ..
Добавил во вложение уже переделанные файлы для HLstatsX 1.6.19 анг.
Работоспособность проверял на пустом HLstatsX 1.6.19 английской версии .
В меню все есть , слова добавляются и сохраняются .

Не логично ведь, ибо даже с этими ошибками всё работает :)
Вот пруф

Добавлено через 1 минуту
Сейчас ошибки исправлю что ли

Добавлено через 33 минуты
исправил, но разницы не заметил)
 
Последнее редактирование:

Alexander Lyalin

Участник
Сообщения
3
Реакции
1
Сам код рабочий, но в tools_chafilter.php нет указателя на интерпретатор вместо <? и ?> нужно <?php и php?>, тогда точно будет работать
 
M

MihailM

Alexander Lyalin, Спасибо , поправил код в tools_chatfilter.php. Архив в post #15 поправил и перезалил.
 
Последнее редактирование модератором:

Andy_Clashbit

🏅RPG-шник🏅
Сообщения
70
Реакции
13
Всё сделал по инструкции, меню фильтра появилось.
Но функции свои не выполняет.
1. ввожу команды, которые нужно блочить, идет сохранение, пишет Сохранено, но команды в том окне ввода не сохраняются.
2. в чате как показывались не нужные сообщения, так и показываются.

Сервер css v91
HLstatsX Community Edition 1.6.19-9С
Сервер статистики, и сам сервер перезагружал.

Что может быть? может кто то подсказать?
 
Последнее редактирование:
Сверху Снизу