Викторина для чата 1.0

добавляет небольшую развлекаловку для пользователей чата

  1. dredd
    Совместимость:
    проверялся на совместимость
    Изменения в БД:
    требуются
    Дополнительные требования:
    чат от _Xz_
    Автор:
    dredd
    Общественное достояние:
    нет
    Каждый час задаётся вопрос в чат, пользователи отвечают на вопрос викторины, если ответ верный, то перед тем, как будет задан новый вопрос, пользователи получат уведомление о правильном ответе и вознаграждение в размере n-ого количества сидбонусов (настраивается через админку).

    если хотите отблагодарить автора:
    Yandex.Money

    P.S. Надеюсь, ничего не забыл, вопросики я думаю вы поняли как добавлять, пользуемся:)
    Инструкция по установке:
    --выполнить запросы (ВНИМАНИЕ! если установлен аддон /me то первый запрос выполнять не нужно)
    Код:
    ALTER TABLE `bb_chat` ADD `type` tinyint(1) DEFAULT '0';
    
    INSERT INTO `bb_config` (`config_name`, `config_value`) VALUES
    ('quiz', '1'),
    ('quiz_reward', '100');
    
    INSERT INTO `bb_cron` (`cron_id`, `cron_active`, `cron_title`, `cron_script`, `schedule`, `run_day`, `run_time`, `run_order`, `last_run`, `next_run`, `run_interval`, `log_enabled`, `log_file`, `log_sql_queries`, `disable_board`, `run_counter`) VALUES
    ('', 1, 'Викторина для чата', 'chat_quiz.php', 'hourly', '', '00:00:00', 255, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '00:00:00', 0, '', 0, 0, 0);
    
    --открыть admin_board.php и найти
    PHP:
    'SEED_BONUS_USER_REGDATE' => $new['seed_bonus_user_regdate'],
    --после вставить
    PHP:
    'QUIZ'                    => $new['quiz'],
    'QUIZ_REWARD'             => $new['quiz_reward'],
    --admin_board.tpl найти
    HTML:
    <tr class="row3 med"><td colspan="2"></td></tr>
    
    --заменить на
    HTML:
    <tr class="row3 med"><td class="bold tCenter" colspan="2">Настройки викторины в чате</td></tr>
    <tr>
        <td><h4>Включить викторину?</h4></td>
        <td>
            <label><input type="radio" name="quiz" value="1" <!-- IF QUIZ -->checked="checked"<!-- ENDIF --> />{L_YES}</label>&nbsp;&nbsp;
            <label><input type="radio" name="quiz" value="0" <!-- IF not QUIZ -->checked="checked"<!-- ENDIF --> />{L_NO}</label>
        </td>
    </tr>
    <tr>
        <td><h4>Вознаграждение за правильный ответ</h4></td>
        <td><input class="post" type="text" size="25" maxlength="100" name="quiz_reward" value="{QUIZ_REWARD}" /></td>
    </tr>
    <tr class="row3 med"><td colspan="2"></td></tr>
    
    --открыть chat.php

    если установлен аддон /me то просто найдите
    PHP:
    case 'me':
                
    $txt $username.' '.$command[0][2];

                return 
    $txt;

                break;
    --замените на

    PHP:
    case 'me':
                
    $txt $username.' '.$command[0][2];

                return [
    'type' => 1,'txt' => $txt];

                break;

            case 
    'a':
                
    $txt $username.' отвечает на вопрос викторины: '.$command[0][2];

                return [
    'type' => 2'txt' => $txt];
                break;
    --найти

    PHP:
    $commands commands_to_text($message$userdata['user_id']);
    if(
    $commands)
    {
        
    $text_html $commands;
        
    $query "INSERT INTO bb_chat (user_id, time, text, text_html, ip, type) VALUES ('{$userdata['user_id']}', '"TIMENOW ."', '"DB()->escape($message) ."', '"DB()->escape($text_html) ."', '"USER_IP ."', '1')";
    }
    else
    {
        
    $text_html bbcode2html(prepare_message($message));
        
    $text_html preg_replace_callback("/\[n\](.*?)\[\/n\]/siu"'parse_username'$text_html);
        
    $query "INSERT INTO bb_chat (user_id, time, text, text_html, ip) VALUES ('{$userdata['user_id']}', '"TIMENOW ."', '"DB()->escape($message) ."', '"DB()->escape($text_html) ."', '"USER_IP ."')";
    }

    DB()->query($query);
    --заменить

    PHP:
    $commands commands_to_text($message$userdata['user_id']);
    if(!empty(
    $commands['txt']))
    {
            
    $text_html $commands['txt'];
            
    $query "INSERT INTO bb_chat (user_id, time, text, text_html, ip, type) VALUES ('{$userdata['user_id']}', '"TIMENOW ."', '".DB()->escape($message)."', '"DB()->escape($text_html) ."', '"USER_IP ."', '"$commands['type'] ."')";
    }
    else
    {
        
    $text_html bbcode2html(prepare_message($message));
        
    $text_html preg_replace_callback("/\[n\](.*?)\[\/n\]/siu"'parse_username'$text_html);
        
    $query "INSERT INTO bb_chat (user_id, time, text, text_html, ip) VALUES ('{$userdata['user_id']}', '"TIMENOW ."', '"DB()->escape($message) ."', '"DB()->escape($text_html) ."', '"USER_IP ."')";
    }

    DB()->query($query);
    --найти
    PHP:
    $commands commands_to_text($text$row['user_id']);
    if (
    $commands) {
        
    $text_html $commands;
    } else {
        
    $text_html bbcode2html(prepare_message($text));
        
    $text_html preg_replace_callback("/\[n\](.*?)\[\/n\]/siu"'parse_username'$text_html);
    }
    --заменить

    PHP:
    $commands commands_to_text($text$row['user_id']);
    if (
    $commands['txt']) {
        
    $text_html $commands['txt'];
    } else {
        
    $text_html bbcode2html(prepare_message($text));
        
    $text_html preg_replace_callback("/\[n\](.*?)\[\/n\]/siu"'parse_username'$text_html);
    }
    ЕСЛИ НЕ УСТАНОВЛЕН АДДОН /me, то выполните следующие действия:

    открываем index.php и находим:
    PHP:
    foreach($sql as $row)
    {
     
        
    $message '<div class="row1 chat-comment" id="pp_'$row['id'] .'"><div style="min-height: 32px;">';
        
    $message .= ($row['user_id'] == GUEST_UID) ? '' '<a href="'PROFILE_URL $row['user_id'] .'">';
        
    $message .= str_replace('<img''<img align="left" height="32" width="32" style="padding-right: 3px;"'get_avatar($row['user_id'], $row['avatar_ext_id'], !bf($row['user_opt'], 'user_opt''dis_avatar')));
        
    $message .= ($row['user_id'] == GUEST_UID) ? '' '</a>';
        if(
    IS_AM)
        {
            
    $message .= '<input onclick="set_hid_chbox('$row['id'] .');" class="floatR chat-post" type="checkbox" value="'$row['id'] .'" />';
            
    $message .= '<span onclick="edit_comment('$row['id'] .'); return false;" class="txtb floatR">[p]</span>';
        }
        
    $title_ip = (IS_ADMIN) ? decode_ip($row['ip']) : 'Ник в чат';
        
    $message .= '<a href="#" class="bold" title="'$title_ip .'" onclick="add_nick(\'[n]'$row['username'] .'[/n]\'); return false;">'str_replace('title="''data="'profile_url(array('username' => $row['username'], 'user_rank' => $row['user_rank']))) .'</a><div class="small">'bb_date($row['time']) .'</div></div>';
        
    $message .= '<div class="spacer_2"></div><span style="font-size: 11px;">'$row['text_html'] .'</span></div>';
        
    $message .= (IS_AM) ? '<span id="pe_'$row['id'] .'"></span>' '';

        
    $template->assign_block_vars('chat', array(
            
    'TEXT'        => $message,
        ));
    }
    заменяем на:
    PHP:
    foreach($sql as $row)
        {
            if(
    $row['type'] == 1)
            {
                
    $message '<div class="row1 chat-comment" id="pp_'$row['id'] .'"><div style="min-height: 32px; font-size: 11px;">';
                
    $message .= bb_date($row['time']);
                if(
    IS_AM)
                {
                    
    $message .= '<input onclick="set_hid_chbox('$row['id'] .');" class="floatR chat-post" type="checkbox" value="'$row['id'] .'" />';
                    
    $message .= '<span onclick="edit_comment('$row['id'] .'); return false;" class="txtb floatR">[p]</span>';
                }
                
    $message .= '</div>';
                
    $message .= '<span style="font-size: 11px;">'$row['text_html'] .'</span></div>';
                
    $message .= (IS_AM) ? '<span id="pe_'$row['id'] .'"></span>' '';
            }
            else
            {
                
    $message '<div class="row1 chat-comment" id="pp_'$row['id'] .'"><div style="min-height: 32px;">';
                
    $message .= ($row['user_id'] == GUEST_UID) ? '' '<a href="'PROFILE_URL $row['user_id'] .'">';
                
    $message .= str_replace('<img''<img align="left" height="32" width="32" style="padding-right: 3px;"'get_avatar($row['user_id'], $row['avatar_ext_id'], !bf($row['user_opt'], 'user_opt''dis_avatar')));
                
    $message .= ($row['user_id'] == GUEST_UID) ? '' '</a>';
                if(
    IS_AM)
                {
                    
    $message .= '<input onclick="set_hid_chbox('$row['id'] .');" class="floatR chat-post" type="checkbox" value="'$row['id'] .'" />';
                    
    $message .= '<span onclick="edit_comment('$row['id'] .'); return false;" class="txtb floatR">[p]</span>';
                }
                
    $title_ip = (IS_ADMIN) ? decode_ip($row['ip']) : 'Ник в чат';
                
    $message .= '<a href="#" class="bold" title="'$title_ip .'" onclick="add_nick(\'[n]'$row['username'] .'[/n]\'); return false;">'str_replace('title="''data="'profile_url(array('username' => $row['username'], 'user_rank' => $row['user_rank']))) .'</a><div class="small">'bb_date($row['time']) .'</div></div>';
                
    $message .= '<div class="spacer_2"></div><span style="font-size: 11px;">'$row['text_html'] .'</span></div>';
                
    $message .= (IS_AM) ? '<span id="pe_'$row['id'] .'"></span>' '';
            }

            
    $template->assign_block_vars('chat', array(
                
    'TEXT'        => $message,
            ));
        }
        
    открываем chat.php и находим:
    PHP:
    function parse_username($username)
    {
        
    $username $username[1];
        
    $row DB()->fetch_row("SELECT user_id, user_rank FROM "BB_USERS ." WHERE username = '"DB()->escape($username) ."'");
        if(
    $row$username '<a href="'PROFILE_URL $row['user_id'] .'">'$username .'</a>';
        return 
    $username;
    }
    после вставляем:
    PHP:
    function commands_to_text($message$user_id)
    {
        
    $username $txt '';

        
    $row DB()->fetch_row("SELECT username, user_rank, user_id FROM "BB_USERS ." WHERE user_id = '"DB()->escape($user_id) ."'");
        if(
    $row$username '<a href="'PROFILE_URL $row['user_id'] .'">'$row['username'].'</a>';

        
    preg_match_all('#\/(.*?) ([\S].*)#'$message$commandPREG_SET_ORDER);

        switch(@
    $command[0][1])
        {
            case 
    'me':
                
    $txt $username.' '.$command[0][2];

                return [
    'type' => 1,'txt' => $txt];

                break;

            case 
    'a':
                
    $txt $username.' отвечает на вопрос викторины: '.$command[0][2];

                return [
    'type' => 2'txt' => $txt];
                break;

            default:
                return 
    false;

        }

    }
    --находим:
    PHP:
    foreach($sql as $row)
    {
        if((
    $row['id'] > $id) && ($row['id'] <= $max_id))
        {
         
            
    $message .= '<div class="row1 chat-comment" id="pp_'$row['id'] .'"><div style="min-height: 32px;">';
            
    $message .= ($row['user_id'] == GUEST_UID) ? '' '<a href="'make_url(PROFILE_URL $row['user_id']) .'">';
            
    $message .= str_replace('<img''<img align="left" height="32" width="32" style="padding-right: 3px;"'get_avatar($row['user_id'], $row['avatar_ext_id'], !bf($row['user_opt'], 'user_opt''dis_avatar')));
            
    $message .= ($row['user_id'] == GUEST_UID) ? '' '</a>';
            if(
    IS_AM)
            {
                
    $message .= '<input onclick="set_hid_chbox('$row['id'] .');" class="floatR chat-post" type="checkbox" value="'$row['id'] .'" />';
                
    $message .= '<span onclick="edit_comment('$row['id'] .'); return false;" class="txtb floatR">[p]</span>';
            }
            
    $title_ip = (IS_ADMIN) ? decode_ip($row['ip']) : 'Ник в чат';
            
    $message .= '<a href="#" class="bold" title="'$title_ip .'" onclick="add_nick(\'[n]'$row['username'] .'[/n]\'); return false;">'str_replace('title="''data="'profile_url(array('username' => $row['username'], 'user_rank' => $row['user_rank']))) .'</a><div class="small">'bb_date($row['time']) .'</div></div>';
            
    $message .= '<div class="spacer_2"></div><span style="font-size: 11px;">'$row['text_html'] .'</span></div>';
            
    $message .= (IS_AM) ? '<span id="pe_'$row['id'] .'"></span>' '';
        }
    }
    --заменяем на:
    PHP:
    foreach($sql as $row)
    {
        if((
    $row['id'] > $id) && ($row['id'] <= $max_id))
        {
            if(
    $row['type'] == 1)
            {
                
    $message .= '<div class="row1 chat-comment" id="pp_'$row['id'] .'"><div style="min-height: 32px; font-size: 11px;">';
                
    $message .= bb_date($row['time']);
                if(
    IS_AM)
                {
                    
    $message .= '<input onclick="set_hid_chbox('$row['id'] .');" class="floatR chat-post" type="checkbox" value="'$row['id'] .'" />';
                    
    $message .= '<span onclick="edit_comment('$row['id'] .'); return false;" class="txtb floatR">[p]</span>';
                }
                
    $message .= '</div>';
                
    $message .= '<span style="font-size: 11px;">'$row['text_html'] .'</span></div>';
                
    $message .= (IS_AM) ? '<span id="pe_'$row['id'] .'"></span>' '';
            }
            else
            {
                
    $message .= '<div class="row1 chat-comment" id="pp_'$row['id'] .'"><div style="min-height: 32px;">';
                
    $message .= ($row['user_id'] == GUEST_UID) ? '' '<a href="'make_url(PROFILE_URL $row['user_id']) .'">';
                
    $message .= str_replace('<img''<img align="left" height="32" width="32" style="padding-right: 3px;"'get_avatar($row['user_id'], $row['avatar_ext_id'], !bf($row['user_opt'], 'user_opt''dis_avatar')));
                
    $message .= ($row['user_id'] == GUEST_UID) ? '' '</a>';
                if(
    IS_AM)
                {
                    
    $message .= '<input onclick="set_hid_chbox('$row['id'] .');" class="floatR chat-post" type="checkbox" value="'$row['id'] .'" />';
                    
    $message .= '<span onclick="edit_comment('$row['id'] .'); return false;" class="txtb floatR">[p]</span>';
                }
                
    $title_ip = (IS_ADMIN) ? decode_ip($row['ip']) : 'Ник в чат';
                
    $message .= '<a href="#" class="bold" title="'$title_ip .'" onclick="add_nick(\'[n]'$row['username'] .'[/n]\'); return false;">'str_replace('title="''data="'profile_url(array('username' => $row['username'], 'user_rank' => $row['user_rank']))) .'</a><div class="small">'bb_date($row['time']) .'</div></div>';
                
    $message .= '<div class="spacer_2"></div><span style="font-size: 11px;">'$row['text_html'] .'</span></div>';
               
    $message .= (IS_AM) ? '<span id="pe_'$row['id'] .'"></span>' '';
            }
        }
    }
    --находим:
    PHP:
    $text_html bbcode2html(bbcode_chat(prepare_message($message)));
    $text_html preg_replace_callback("/\[n\](.*?)\[\/n\]/siu"'parse_username'$text_html);

    DB()->query("INSERT INTO bb_chat (user_id, time, text, text_html, ip) VALUES ('{$userdata['user_id']}', '"TIMENOW ."', '"DB()->escape($message) ."', '"DB()->escape($text_html) ."', '"USER_IP ."')");
    --заменяем на:
    PHP:
    $commands commands_to_text($message$userdata['user_id']);
    if(!empty(
    $commands['txt']))
    {
        
    $text_html $commands['txt'];
        
    $query "INSERT INTO bb_chat (user_id, time, text, text_html, ip, type) VALUES ('{$userdata['user_id']}', '"TIMENOW ."', '"DB()->escape($message) ."', '"DB()->escape($text_html) ."', '"USER_IP ."', '"$commands['type'] ."')";
    }
    else
    {
        
    $text_html bbcode2html(prepare_message($message));
        
    $text_html preg_replace_callback("/\[n\](.*?)\[\/n\]/siu"'parse_username'$text_html);
        
    $query "INSERT INTO bb_chat (user_id, time, text, text_html, ip) VALUES ('{$userdata['user_id']}', '"TIMENOW ."', '"DB()->escape($message) ."', '"DB()->escape($text_html) ."', '"USER_IP ."')";
    }

    DB()->query($query);
    --находим:
    PHP:
    if(mb_strlen($text) > 2)
        {
            
    $text_html bbcode2html(bbcode_chat(prepare_message($text)));
            
    $text_html preg_replace_callback("/\[n\](.*?)\[\/n\]/siu"'parse_username'$text_html);
    --заменяем на:
    PHP:
    if (mb_strlen($text) > 2) {
        
    $commands commands_to_text($text$row['user_id']);
           if (
    $commands['txt']) {
                
    $text_html $commands['txt'];
            } else {
                
    $text_html bbcode2html(prepare_message($text));
                
    $text_html preg_replace_callback("/\[n\](.*?)\[\/n\]/siu"'parse_username'$text_html);
            }
    --находим:
    PHP:
    else $this->ajax_die('Слишком короткое сообщение.');

    $message '<div style="min-height: 32px;">';
    $message .= ($row['user_id'] == GUEST_UID) ? '' '<a href="'make_url(PROFILE_URL $row['user_id']) .'">';
    $message .= str_replace('<img''<img align="left" height="32" width="32" style="padding-right: 3px;"'get_avatar($row['user_id'], $row['avatar_ext_id'], !bf($row['user_opt'], 'user_opt''dis_avatar')));
    $message .= ($row['user_id'] == GUEST_UID) ? '' '</a>';
    if(
    IS_AM)
    {
        
    $message .= '<input onclick="set_hid_chbox('$row['id'] .');" class="floatR chat-post" type="checkbox" value="'$row['id'] .'" />';
        
    $message .= '<span onclick="edit_comment('$row['id'] .'); return false;" class="txtb floatR">[p]</span>';
    }
    $title_ip = (IS_ADMIN) ? decode_ip($row['ip']) : 'Ник в чат';
    $message .= '<a href="#" class="bold" title="'$title_ip .'" onclick="add_nick(\'[n]'$row['username'] .'[/n]\'); return false;">'str_replace('title="''data="'profile_url(array('username' => $row['username'], 'user_rank' => $row['user_rank']))) .'</a><div class="small">'bb_date($row['time']) .'</div></div>';
    $message .= '<div class="spacer_2"></div><span style="font-size: 11px;">'$text_html .'</span>';
    --заменяем на:
    PHP:
    else $this->ajax_die('Слишком короткое сообщение.');

    if (
    $row['type'] == 1)
    {
        
    $message '<div style="min-height: 32px; font-size: 11px;">';
        
    $message .= bb_date($row['time']);
        if(
    IS_AM)
        {
            
    $message .= '<input onclick="set_hid_chbox('$row['id'] .');" class="floatR chat-post" type="checkbox" value="'$row['id'] .'" />';
            
    $message .= '<span onclick="edit_comment('$row['id'] .'); return false;" class="txtb floatR">[p]</span>';
        }
        
    $message .= '</div>';
        
    $message .= '<span style="font-size: 11px;">'$text_html .'</span></div>';
    }
    else
        {
            
    $message '<div style="min-height: 32px;">';
            
    $message .= ($row['user_id'] == GUEST_UID) ? '' '<a href="'make_url(PROFILE_URL $row['user_id']) .'">';
            
    $message .= str_replace('<img''<img align="left" height="32" width="32" style="padding-right: 3px;"'get_avatar($row['user_id'], $row['avatar_ext_id'], !bf($row['user_opt'], 'user_opt''dis_avatar')));
            
    $message .= ($row['user_id'] == GUEST_UID) ? '' '</a>';
            if(
    IS_AM)
            {
                
    $message .= '<input onclick="set_hid_chbox('$row['id'] .');" class="floatR chat-post" type="checkbox" value="'$row['id'] .'" />';
                
    $message .= '<span onclick="edit_comment('$row['id'] .'); return false;" class="txtb floatR">[p]</span>';
            }
            
    $title_ip = (IS_ADMIN) ? decode_ip($row['ip']) : 'Ник в чат';
            
    $message .= '<a href="#" class="bold" title="'$title_ip .'" onclick="add_nick(\'[n]'$row['username'] .'[/n]\'); return false;">'str_replace('title="''data="'profile_url(array('username' => $row['username'], 'user_rank' => $row['user_rank']))) .'</a><div class="small">'bb_date($row['time']) .'</div></div>';
            
    $message .= '<div class="spacer_2"></div><span style="font-size: 11px;">'$text_html .'</span>';
        }
     
    --открыть main.php и в конец добавить
    PHP:
    $lang['QUIZ'] = [
        
    => ['q'=>'Сколько граней у куба?''a'=>'6'],
        
    => ['q'=>'Сколько ног у улитки?''a'=>'1'],
        
    => ['q'=>'Назовите ближайшую к нам звезду''a'=>'солнце'],
        
    => ['q'=>'Сколько у человека основных органов чувств?''a'=>'5'],
        
    => ['q'=>'Сколько музыкантов в квинтете?''a'=>'5'],
        
    => ['q'=>'Что делает человек всю жизнь, не останавливаясь?''a'=>'дышит'],
        
    => ['q'=>'Как зовут администратора?''a'=>'admin'],
        
    => ['q'=>'Сколько длилась столетняя война?''a'=>'116'],
        
    => ['q'=>'Сколько килобайт в 1 мегабайте?''a'=>'1024'],
        
    10 => ['q'=>'Чей домик оказался крепче всех в сказке "3 поросенка"?''a'=>'наф-наф'],
    ];
    файл chat_quiz.php положить в library/includes/cron/jobs/
    Darkterror и serega нравится это.