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

Тема в разделе "HLstatsX:CE", создана пользователем Александр Тимофеев, 2 авг 2014.

  1. Александр Тимофеев

    Александр Тимофеев

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

    PASHTET

    Сообщения:
    213
    Симпатии:
    16
    !rs разве к hlstats относится?
     
  3. TolikCorp

    TolikCorp

    Сообщения:
    855
    Симпатии:
    271
    Он про то, что игрок пишет !rs , а это в бд заносится
     
  4. Александр Тимофеев

    Александр Тимофеев

    Сообщения:
    4
    Симпатии:
    2
    именно про это)
    раньше стояла но после переустановки hlstatsx пропала. В интернете не могу нарыть.
     
  5. Danyas

    Danyas Спасибо, браток © yand3xmail Модератор

    Сообщения:
    1.719
    Симпатии:
    460
    А если попробовать переделать плагин !rs?
    Что бы не отображалось в чате !rs а было написано что некий игрок сбросил счет.
    P.S. нарыл уже?
     
  6. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.541
    Симпатии:
    1.984
    В моём "сбрасывателе счёта" давно убран показ коротких команд в чате. Длинные запретить куда сложнее из-за особенностей плагина.
    У меня - только самому игроку) Недавно думал, а надо ли добавлять для всех...
     
    Danyas нравится это.
  7. Danyas

    Danyas Спасибо, браток © yand3xmail Модератор

    Сообщения:
    1.719
    Симпатии:
    460
    За rs спасибо, но ведь nominate/rtv/hlx etc. пишутся в лог чата.
    Это лечение только одного из симптомов, так что :this:
     
  8. Александр Тимофеев

    Александр Тимофеев

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

    Вложения:

    • 111.jpg
      111.jpg
      Размер файла:
      59,6 КБ
      Просмотров:
      79
  9. tiger_by

    tiger_by Гл. Админ SourceGames.RU

    Сообщения:
    629
    Симпатии:
    279
    Мне кажется надо править перловый скрипт, который парсит логи. hlstatx.pl
     
  10. Александр Тимофеев

    Александр Тимофеев

    Сообщения:
    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
    Дерзайте ребята =)
     

    Вложения:

    Последнее редактирование: 12 авг 2014
    Danyas и MihailM нравится это.
  11. Danyas

    Danyas Спасибо, браток © yand3xmail Модератор

    Сообщения:
    1.719
    Симпатии:
    460
    После установки ссылка на чат начала показывать белый экран, но пункт в меню добавился.
    Наверное не правильно поставил, завтра попробую вникнуть и переставить
     
  12. MihailM

    MihailM убежал :)

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

     
  13. Danyas

    Danyas Спасибо, браток © yand3xmail Модератор

    Сообщения:
    1.719
    Симпатии:
    460
    Сделал всё, прилагаю мои копии файлов+лист комманд
    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() < 1error("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;
                "
    truefalse);
    /*
                    $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$numitems95);
            
    ?><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 ([email protected])
    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 ([email protected])
    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 ([email protected])

    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_name08) . '...';
        }
        else
        {
            
    $pl_shortname $pl_name;
        }
        
    $pl_name htmlspecialchars($pl_nameENT_COMPAT);
        
    $pl_shortname htmlspecialchars($pl_shortnameENT_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$numitems95);
        }
    ?><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>
     
  14. MihailM

    MihailM убежал :)

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

    Вложения:

    Последнее редактирование: 7 сен 2014
    Danyas нравится это.
  15. Danyas

    Danyas Спасибо, браток © yand3xmail Модератор

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

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

    Добавлено через 33 минуты
    исправил, но разницы не заметил)
     
    Последнее редактирование: 27 авг 2014
  16. Alexander Lyalin

    Alexander Lyalin

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

    MihailM убежал :)

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