- Совместимость
- проверялся на совместимость
- Изменения в БД
- требуются
- Дополнительные требования
- чат от _Xz_
- Автор
- dredd
- Общественное достояние
- нет
Каждый час задаётся вопрос в чат, пользователи отвечают на вопрос викторины, если ответ верный, то перед тем, как будет задан новый вопрос, пользователи получат уведомление о правильном ответе и вознаграждение в размере n-ого количества сидбонусов (настраивается через админку).
если хотите отблагодарить автора:
P.S. Надеюсь, ничего не забыл, вопросики я думаю вы поняли как добавлять, пользуемся
если хотите отблагодарить автора:
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);
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> <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>
если установлен аддон /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, )); }
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/