Иконка ресурса

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

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

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

Please Login or Register to view hidden text.



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, $command, PREG_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'] = [
    1 => ['q'=>'Сколько граней у куба?', 'a'=>'6'],
    2 => ['q'=>'Сколько ног у улитки?', 'a'=>'1'],
    3 => ['q'=>'Назовите ближайшую к нам звезду', 'a'=>'солнце'],
    4 => ['q'=>'Сколько у человека основных органов чувств?', 'a'=>'5'],
    5 => ['q'=>'Сколько музыкантов в квинтете?', 'a'=>'5'],
    6 => ['q'=>'Что делает человек всю жизнь, не останавливаясь?', 'a'=>'дышит'],
    7 => ['q'=>'Как зовут администратора?', 'a'=>'admin'],
    8 => ['q'=>'Сколько длилась столетняя война?', 'a'=>'116'],
    9 => ['q'=>'Сколько килобайт в 1 мегабайте?', 'a'=>'1024'],
    10 => ['q'=>'Чей домик оказался крепче всех в сказке "3 поросенка"?', 'a'=>'наф-наф'],
];

файл chat_quiz.php положить в library/includes/cron/jobs/
  • Мне нравится
Реакции: Darkterror и serega
Автор
dredd
Скачивания
17
Просмотры
334
Первый выпуск
Обновление
Оценка
5.00 звёзд 1 оценок

Другие ресурсы пользователя dredd

Сверху