Вход Регистрация
Файл: chat/incfiles/bot.php
Строк: 84
<?php

/**
 * @package     Chat for JohnCMS
 * @link        http://johncms.com
 * @copyright   Copyright (C) 2010-2017 k_2
 * @license     LICENSE.txt (see attached file)
 * @version     VERSION.txt (see attached file)
 * @author      http://johncms.com/profile/?user=6251
 */

defined('_IN_JOHNCMS') or die('Error: restricted access');

/*
-----------------------------------------------------------------
Запуск ботов
-----------------------------------------------------------------
*/
$bot_mass unserialize($k_d['bot']);
foreach (
$bot_mass as $val) {
    
$bot_id intval($val);
    
$bot db::query("SELECT `name`, `tip`, `mass_bot` FROM `chat_bot` WHERE `id` = '" $bot_id "' LIMIT 1"); // Получение данных.
    
$bot_d mysqli_fetch_assoc($bot);
    
$mass_bot unserialize($bot_d['mass_bot']);
    if (
mysqli_num_rows($bot) || !empty($mass_bot)) {
        
$soob_d mysqli_fetch_assoc(db::query("SELECT `id_bot`, `time`, `tip` FROM `chat_room_" $id "` WHERE `id_u` = '" $bot_id "' AND `tip` > '2' ORDER BY `time` DESC LIMIT 1")); // Получение данных
        
$tim $soob_d['time'] - 2;
        
$tip '';
        
/*
        -----------------------------------------------------------------
        Переключаем режим работы бота в зависимости от его типа
        -----------------------------------------------------------------
        */
        
switch ($bot_d['tip']) {

            case 
1:
                
/*
                -----------------------------------------------------------------
                Вопрос
                -----------------------------------------------------------------
                */
                
switch ($soob_d['tip']) {

                    case 
3:
                        
// Вопрос
                        
if ($tim time() - $mass_bot['time_off']) {
                            
$vik mysqli_fetch_assoc(db::query("SELECT `vopros`, `otvet` FROM `chat_vop` WHERE `id` = '" $soob_d['id_bot'] . "' LIMIT 1"));
                            
$tip 6;
                            
$id_bot $soob_d['id_bot'];
                            
$text strtr($mass_bot['vopros'], array(
                                
'[text]' => $vik['vopros'],
                                
'[text_count]' => mb_strlen($vik['otvet'])
                            ));
                        }
                        break;

                    case 
6:
                        
// никто не ответил
                        
if ($tim time() - $mass_bot['time_on'] - $mass_bot['time_off']) {
                            
$vik mysqli_fetch_assoc(db::query("SELECT `otvet` FROM `chat_vop` WHERE `id` = '" $soob_d['id_bot'] . "' LIMIT 1"));
                            
$tip 7;
                            
$id_bot $soob_d['id_bot'];
                            
$text strtr($mass_bot['no_otv'], array(
                                
'[text]' => $vik['otvet']
                            ));
                        }
                        break;

                    default:
                        
// новый вопрос через...
                        
$v1 db::result(db::query("SELECT COUNT(*) FROM `chat_vop` WHERE `id_bot` = '" $bot_id "'"), 0);
                        
$num rand(1$v1) - 1;
                        
$vop_d mysqli_fetch_assoc(db::query("SELECT `id` FROM `chat_vop` WHERE `id_bot` = '" $bot_id "' LIMIT " $num ",1"));
                        
$tip 3;
                        
$id_bot $vop_d['id'];
                        
$text strtr($mass_bot['nev_vop'], array(
                            
'[time]' => $mass_bot['time_off']
                        ));
                }
                break;

            case 
2:
                
/*
                -----------------------------------------------------------------
                Вопрос с подсказкой
                -----------------------------------------------------------------
                */
                
switch ($soob_d['tip']) {

                    case 
3:
                        
// Вопрос
                        
if ($tim time() - $mass_bot['time_off']) {
                            
$vik mysqli_fetch_assoc(db::query("SELECT `vopros`, `otvet` FROM `chat_vop` WHERE `id` = '" $soob_d['id_bot'] . "' LIMIT 1"));
                            
$tip 4;
                            
$id_bot $soob_d['id_bot'];
                            
$text strtr($mass_bot['vopros'], array(
                                
'[text]' => $vik['vopros'],
                                
'[text_count]' => mb_strlen($vik['otvet'])
                            ));
                        }
                        break;

                    case 
4:
                        
// Подсказка
                        
if ($tim time() - $mass_bot['time_1'] - $mass_bot['time_off']) {
                            
$vik mysqli_fetch_assoc(db::query("SELECT `otvet` FROM `chat_vop` WHERE `id` = '" $soob_d['id_bot'] . "' LIMIT 1"));
                            
$tip 6;
                            
$ans $vik['otvet'];
                            
$b mb_strlen($ans);
                            
$d round($b 4);
                            
$c mb_substr($ans0$d);
                            for (
$z $d$z $b; ++$z) {
                                
$c "$c*";
                            }
                            
$id_bot $soob_d['id_bot'];
                            
$text strtr($mass_bot['pods_1'], array(
                                
'[text]' => $c
                            
));
                        }
                        break;

                    case 
6:
                        
// никто не ответил
                        
if ($tim time() - $mass_bot['time_on'] - $mass_bot['time_off']) {
                            
$vik mysqli_fetch_assoc(db::query("SELECT `otvet` FROM `chat_vop` WHERE `id` = '" $soob_d['id_bot'] . "' LIMIT 1"));
                            
$tip 7;
                            
$id_bot $soob_d['id_bot'];
                            
$text strtr($mass_bot['no_otv'], array(
                                
'[text]' => $vik['otvet']
                            ));
                        }
                        break;

                    default:
                        
// новый вопрос через...
                        
$v1 db::result(db::query("SELECT COUNT(*) FROM `chat_vop` WHERE `id_bot` = '" $bot_id "'"), 0);
                        
$num rand(1$v1) - 1// Случайный вопрос
                        
$vop_d mysqli_fetch_assoc(db::query("SELECT `id` FROM `chat_vop` WHERE `id_bot` = '" $bot_id "' LIMIT " $num ",1"));
                        
$tip 3;
                        
$id_bot $vop_d['id'];
                        
$text strtr($mass_bot['nev_vop'], array(
                            
'[time]' => $mass_bot['time_off']
                        ));
                }
                break;

            case 
3:
                
/*
                -----------------------------------------------------------------
                Вопрос с 2 подсказками
                -----------------------------------------------------------------
                */
                
switch ($soob_d['tip']) {

                    case 
3:
                        
// Вопрос
                        
if ($tim time() - $mass_bot['time_off']) {
                            
$vik mysqli_fetch_assoc(db::query("SELECT `vopros`, `otvet` FROM `chat_vop` WHERE `id` = '" $soob_d['id_bot'] . "' LIMIT 1"));
                            
$tip 4;
                            
$id_bot $soob_d['id_bot'];
                            
$text strtr($mass_bot['vopros'], array(
                                
'[text]' => $vik['vopros'],
                                
'[text_count]' => mb_strlen($vik['otvet'])
                            ));
                        }
                        break;

                    case 
4:
                        
// Подсказка
                        
if ($tim time() - $mass_bot['time_1'] - $mass_bot['time_off']) {
                            
$vik mysqli_fetch_assoc(db::query("SELECT `otvet` FROM `chat_vop` WHERE `id` = '" $soob_d['id_bot'] . "' LIMIT 1"));
                            
$tip 5;
                            
$ans $vik['otvet'];
                            
$b mb_strlen($ans);
                            
$d round($b 4);
                            
$c mb_substr($ans0$d);
                            for (
$z $d$z $b; ++$z) {
                                
$c "$c*";
                            }
                            
$id_bot $soob_d['id_bot'];
                            
$text strtr($mass_bot['pods_1'], array(
                                
'[text]' => $c
                            
));
                        }
                        break;

                    case 
5:
                        
// Вторая подсказка
                        
if ($tim time() - $mass_bot['time_2'] - $mass_bot['time_off']) {
                            
$vik mysqli_fetch_assoc(db::query("SELECT `otvet` FROM `chat_vop` WHERE `id` = '" $soob_d['id_bot'] . "' LIMIT 1"));
                            
$ans $vik['otvet'];
                            
$b mb_strlen($ans);
                            
$d round($b 3) + 1;
                            
$c mb_substr($ans0$d);
                            for (
$z $d$z $b; ++$z) {
                                
$c "$c*";
                            }
                            
$tip 6;
                            
$id_bot $soob_d['id_bot'];
                            
$text strtr($mass_bot['pods_2'], array(
                                
'[text]' => $c
                            
));
                        }
                        break;

                    case 
6:
                        
// никто не ответил
                        
if ($tim time() - $mass_bot['time_on'] - $mass_bot['time_off']) {
                            
$vik mysqli_fetch_assoc(db::query("SELECT `otvet` FROM `chat_vop` WHERE `id` = '" $soob_d['id_bot'] . "' LIMIT 1"));
                            
$tip 7;
                            
$id_bot $soob_d['id_bot'];
                            
$text strtr($mass_bot['no_otv'], array(
                                
'[text]' => $vik['otvet']
                            ));
                        }
                        break;

                    default:
                        
// новый вопрос через...
                        
$v1 db::result(db::query("SELECT COUNT(*) FROM `chat_vop` WHERE `id_bot` = '" $bot_id "'"), 0);
                        
$num rand(1$v1) - 1// Случайный вопрос
                        
$vop_d mysqli_fetch_assoc(db::query("SELECT `id` FROM `chat_vop` WHERE `id_bot` = '" $bot_id "' LIMIT " $num ",1"));
                        
$tip 3;
                        
$id_bot $vop_d['id'];
                        
$text strtr($mass_bot['nev_vop'], array(
                            
'[time]' => $mass_bot['time_off']
                        ));
                }
                break;

            case 
4:
                
/*
                -----------------------------------------------------------------
                Диалог
                -----------------------------------------------------------------
                */
                
$soob2 db::query("SELECT `id_bot`, `time`, `text`, `tip` FROM `chat_room_" $id "` WHERE `id_u`='" $user_id "' OR `id_bot`='" $user_id "' AND `id_u`='" $bot_id "' ORDER BY `time` DESC LIMIT 1");
                if (
mysqli_num_rows($soob2)) {
                    
$soob_d2 mysqli_fetch_assoc($soob2);
                    if (!
$soob_d2['id_bot']) {
                        
$ttt $soob_d2['time'] + $mass_bot['time_off'];
                        if (
$ttt time()) {
                            
$text2 $soob_d2['text'];
                            
$text2 preg_replace('#[c](.*?)[/c]#si'''$text2);
                            
$text2 strtr($text2, array(
                                
'.' => '',
                                
',' => '',
                                
'?' => ' ?',
                                
'!' => ' !',
                                
':' => ' :',
                                
')' => ' )',
                                
'(' => ' (',
                                
'www' => ' www ',
                                
'"' => '',
                                
'*' => '',
                                
'/' => ''
                            
));
                            
$top 0;
                            
$b2 explode(' '$text2);
                            
$col count($b2);
                            for (
$i2 0$i2 $col; ++$i2) {
                                
$umnik2 db::query("SELECT `id` FROM `chat_vop` WHERE `id_bot`='" $bot_id "' AND `vopros` like '%" $b2[$i2] . "%'");
                                if (
mysqli_num_rows($umnik2)) {
                                    while (
$umnik2_post mysqli_fetch_assoc($umnik2)) {
                                        
$sov 0;
                                        
$vop db::query("SELECT `vopros`, `otvet` FROM `chat_vop` WHERE `id` = '" $umnik2_post['id'] . "' LIMIT 1");
                                        
$vop_d mysqli_fetch_assoc($vop);
                                        
$mass $vop_d['vopros'];
                                        
$vs explode(' '$mass);
                                        
$i3 0;
                                        while (
$i3 $col) {
                                            if (
in_array($b2[$i3], $vs)) {
                                                ++
$sov;
                                            }
                                            ++
$i3;
                                        }
                                        if (
$top <= $sov) {
                                            
$top $sov;
                                            
$otvet $vop_d['otvet'];
                                            if (
count($vs) == $sov) {
                                                ++
$top;
                                            }
                                        }
                                    }
                                }
                            }
                            if (
$top) {
                                
// Ответ из базы
                                
$otvet explode("|"$otvet);
                                
$otvet $otvet[mt_rand(0, (count($otvet) - 1))];
                                
$otvet strtr($mass_bot['vopros'], array(
                                    
'[text]' => $otvet
                                
));
                                
$tip 8;
                            } else {
                                
// неизвестная фраза
                                
$otvet explode("|"$mass_bot['no_otv']);
                                
$otvet $otvet[mt_rand(0, (count($otvet) - 1))];
                                
$tip 8;
                            }
                        }
                    } elseif (
$soob_d2['id_bot'] == $user_id && $soob_d2['tip'] != 9) {
                        if ((
$soob_d2['time'] + $mass_bot['time_1']) < time()) {
                            
// вышло время ожидания на вопрос
                            
$otvet explode("|"$mass_bot['nev_vop']);
                            
$otvet $otvet[mt_rand(0, (count($otvet) - 1))];
                            
$tip 9;
                        }
                    }
                } else {
                    
// поговорим?
                    
$otvet explode("|"$mass_bot['pods_1']);
                    
$otvet $otvet[mt_rand(0, (count($otvet) - 1))];
                    
$tip 8;
                }
                if (
$tip) {
                    
$id_bot $user_id;
                    
$text strtr($otvet, array(
                        
'[login]' => $login
                    
));
                }
                break;


            default:
                
/*
               -----------------------------------------------------------------
               Фраза
               -----------------------------------------------------------------
               */
                
switch ($soob_d['tip']) {

                    case 
3:
                        
// Фраза
                        
if ($tim time() - $mass_bot['time_off']) {
                            
$v1 db::result(db::query("SELECT COUNT(*) FROM `chat_vop` WHERE `id_bot` = '" $bot_id "'"), 0);
                            
$num rand(1$v1) - 1;
                            
$vop_d mysqli_fetch_assoc(db::query("SELECT `id`, `vopros` FROM `chat_vop` WHERE `id_bot` = '" $bot_id "' LIMIT " $num ",1"));
                            
$tip 3;
                            
$id_bot $vop_d['id'];
                            
$text strtr($mass_bot['vopros'], array(
                                
'[text]' => $vop_d['vopros']
                            ));
                        }
                        break;

                    default:
                        
// Новая фраза
                        
$v1 db::result(db::query("SELECT COUNT(*) FROM `chat_vop` WHERE `id_bot` = '" $bot_id "'"), 0);
                        
$num rand(1$v1) - 1;
                        
$vop_d mysqli_fetch_assoc(db::query("SELECT `id`, `vopros` FROM `chat_vop` WHERE `id_bot` = '" $bot_id "' LIMIT " $num ",1"));
                        
$tip 3;
                        
$id_bot $vop_d['id'];
                        
$text strtr($mass_bot['vopros'], array(
                            
'[text]' => $vop_d['vopros']
                        ));
                }
        }
        
// Заносим сообщение в б.д.
        
if ($tip) {
            
$mass_bot_post serialize(array(
                
'av' => $mass_bot['av'],
                
'sex' => $mass_bot['sex'],
                
'status' => $mass_bot['status'],
                
'name' => $bot_d['name'],
                
'name_delete' => '',
                
'cvet' => '',
                
'cvet_n' => '',
                
'ip' => '2130706433',
                
'soft' => 'k_2_bot',
                
'rights' => 0
            
));
            
db::query("INSERT INTO `chat_room_" $id "` SET
        `id_u` = '" 
$bot_id "',
        `id_bot` = '" 
$id_bot "',
        `time` = '" 
. (time() + 2) . "',
        `text` = '" 
db::escape($text) . "',
        `author` = '" 
db::escape($mass_bot_post) . "',
        `tip` = '" 
$tip "'
      "
);
        }
    }
}
?>
Онлайн: 1
Реклама