1

Тема: [php] IRC Bot

Привіт всім!
Знайшов у себе свого старого IRC бота і вирішив поділитися з вами.


<?php
    
#####::::::::::::::::::::::::::::::::::::::
#####::::::                         :::::::
#####::::::------[ UA ]iB0Tz--------:::::::
#####::::::     Version: Demo       :::::::
#####::::::    Code by Russell S.   :::::::
#####::::::-------------------------:::::::
#####::::::                         :::::::
#####::::::::::::::::::::::::::::::::::::::
    
    set_time_limit(0);
    
    //:::::::::::::::[  Connection setings  ]::::::::::::::://
    $Conf = array();
    
    $Conf['Serv']      = 'irc.intersvyaz.net';
    $Conf['Port']       = '6667';
    $Conf['Chan']     = '#fff';
    $Conf['Nick']     = 'ToX1N';
    $Conf['Ident']    = 'BoT';
    $Conf['RealName'] = 'http://replace.org.ua';
    $Conf['Pass']     = '';
    //::::::::::::[  END - Connection setings  ]::::::::::::://
    
    
    
    
    
    class XSB {
        
      //:::::::::::::::::[ MAIN Config ]::::::::::::::::::// 
       function XSB($chan, $nickname, $ident, $realname, $password) {
          $this->nickname  = $nickname;
          $this->ident       = $ident;
          $this->realname  = $realname;
          $this->pass        = $password;
          $this->channels  = $chan;
          $this->admin_pas = "640bb86684722dcb46b976485433d02d"; // md5('r007'); коментар надалі видалити.
          $this->OwnerHost = array();
          $this->version   = '[ UA ]iB0Tz vDemo |coded by Russell S.';
          $this->md5file   = 'db.txt';
          $this->logFile   = 'log.txt';
          $this->botup     = time();
          
          $this->AVoice = TRUE;      // Авто войс кожному що зайшов, false - off.
          $this->AOp    = FALSE;    // Авто ОП кожному що зайшов
          $this->AHop   = FALSE;   // Авто ХОП кожному що зайшов
          $this->logon_pri = TRUE; // Включити логування привата
          $this->logon_pub = TRUE; // Включити логування паблика
       }
       //::::::::::::::::[ END MAIN Config ]:::::::::::::::://
       
       
       //______________________IRC & BOT API__________________________//
       
       function connect($server, $port) {
          $this->server = $server;
          $this->port = $port;
          $this->irc = fsockopen($this->server,$this->port);
          fputs($this->irc, "PASS $this->pass \r\n");
          sleep(0.5);
          fputs($this->irc, "NICK $this->nickname \r\n");
          sleep(0.5);
          fputs($this->irc, "USER $this->ident 8 *  : $this->realname \r\n");
          sleep(0.3);
          fputs($this->irc, "PONG\r\n");
          echo "Connected to $this->server on port $this->port\n";
          sleep(0.2);
       }
      
       function quit($reason) {
          fputs($this->irc, "QUIT :$reason\r\n");
          echo "Closed connection to $this->server\n";
          die("Bot mode: Stop");
       }
       function join($channel) {
          fputs($this->irc, "JOIN $channel\r\n");
          echo "Joined $channel on server $this->server\n";
       }
      
       function part($channel) {
          fputs($this->irc, "PART $channel\r\n");
          echo "Left from $channel on server $this->server\n";
       }
      
       function pong_reply() {
          if(preg_match("#^PING#", $this->buffer)) {
             fputs($this->irc, "PONG");
             sleep(0.2);
             echo "Sent PONG reply through socket.\n";
             }
       }
      
       function say($channel, $text) {
          fputs($this->irc, "PRIVMSG $cnannel      \r\n");
          fputs($this->irc, "PRIVMSG $channel : $text \r\n");
       }
       function notice($nick, $text) {
          fputs($this->irc, "NOTICE $nick $text\r\n");
       }
        
       function mode($channel,$nick,$mode) {
            $m='';
            switch($mode)
            {
                case 'v': $m = "MODE $channel +v $nick\r\n";
                    break;
                case 'h': $m = "MODE $channel +h $nick\r\n";
                    break;
                case 'o': $m = "MODE $channel +o $nick\r\n";
                    break;
                case 'dv': $m = "MODE $channel -v $nick\r\n";
                    break;
                case 'dh': $m = "MODE $channel -h $nick\r\n";
                    break;
                case 'do': $m = "MODE $channel -o $nick\r\n";
                    break;
            }
            fputs($this->irc, $m);
        }
        
       function make_rand() {
           list($usec, $sec) = explode(' ', microtime());
           return (float) $sec + ((float) $usec * 100000);
       }
       
       // Check admin HOST
       function check_host($string) {
            foreach($this->OwnerHost as $CmdH) {
                 if($string == $CmdH){
                    $res = TRUE;
                 } else {
                    $res = FALSE;
                }
            }
            return $res;
        }
       // Запис в лог файл.        
       function write_log($string) {
            $fhandle = fopen($this->logFile,'a');
            if($fhandle) {
                fwrite($fhandle, $string."\n");
                fclose($fhandle);
            }
        }
       //_____________________ EnD IRC & BOT API_______________________//
       
       //_______________________Encrypting_______________________//
       
       function get_base($string){
          return ("-- base64 for \"$string\" is ".base64_encode($string));
       } 
       function get_base_dec($string){
          return ("-- base64 decode for \"$string\" is ".base64_decode($string));
       }
       
       function get_sha1($string) {
          return ("-- sha1 encode for \"$string\" is ".sha1($string));
       }
        
       function fill_db($string) {
          clearstatcache();
          $handle = fopen($this->md5file, 'r');
          $content = fread($handle, filesize($this->md5file));
          if(!preg_match("#".md5($string)."#", $content)) {
             $handle = fopen($this->md5file, 'a');
             fwrite($handle, $string."/".md5($string)."\n");

          }
          fclose($handle);
          return "-- md5 for \"$string\" is ".md5($string);
       }
      
      //_____________________End Encrypting______________________//
     
      // Generator of Password
      function pass_gen($arg,$numb) {
          $pass='';
          if(!preg_match("/^[0-9]+$/", $numb, $out)) {
                return "Я не розумію символи, тільки цифри >.<";
          }
          if($numb > 50){
                return "Перевищує ліміт 50 іимволів !";
          }
          $a_ch = array('Q','W','E','R','T','Y','U','I',
                           'O','P','A','S','D','F','G','H',
                        'J','K','L','Z','X','C','V','B',
                        'N','M',
                        'q','w','e','r','t','y','u','i',
                        'o','p','a','s','d','f','g','h',
                        'j','k','l','z','x','c','v','b',
                        'n','m',
                        '1','2','3','4','5','6','7','8',
                        '9','0',
                        '!','@','#','$','%','^','&','*',
                        '(',')','{','}',':',';');
         switch($arg){
              case 'a':
                  for($i=0;$i<$numb;$i++){
                     $pass .= $a_ch[(rand(0,count($a_ch)-1))];
                 }
                 return $pass; break;
             case 'b':
                 for($i=0;$i<$numb;$i++){
                     $pass .= $a_ch[rand(0,25)];
                 }
                 return $pass; break;
             case 's':
                 for($i=0;$i<$numb;$i++){
                     $pass .= $a_ch[rand(26,51)];
                 }
                 return $pass; break;
             case 'i': 
                 for($i=0;$i<$numb;$i++){
                     $pass .= $a_ch[rand(52,61)];
                 }
                 return $pass; break;
             case 'c':
                 for($i=0;$i<$numb;$i++){
                     $pass .= $a_ch[rand(62,75)];
                 }
                 return $pass; break;
             default: return "Mode incorrect";
         }        
    }
    
    // Get PageRank(google)
     function get_pr($string) {
        $query='http://www.eomy.net/google-pagerank/'.$string;
        $page=file_get_contents($query);
        preg_match_all('|\s:\s(.+)<|Uis', $page, $result);
        if(empty($result[1][0])) {
            return "Not Found Oo";
        } else {
            return "Page Rank for \"$string\": ".$result[1][0];
        }
    }
    // Get CY ( yandex )
      function get_cy($string) {
        $query='http://search.yaca.сайт-злодій/yca/cy/ch/'.$string;
        $page=file_get_contents($query);
        preg_match_all('|151;\s(.+)<|Uis', $page, $result);
        if(empty($result[1][0])) {
            return "Not Found Oo";
        } else {
            return "CY(yandex) for \"$string\": ".$result[1][0];
        }
    }
    
    // Get proxy list
      function get_proxy() {
        $query='http://www.proxy-list.net/anonymous-proxy-lists.shtml';
        $page = file_get_contents($query);  
        preg_match_all('|><pre>(.*)<|Uis',$page,$result);
        return explode("\n",$result[1][0]);
     }
     
    // Get hash encode
      function eser_md5($string) {
        if(empty($string)) {
            return "Enter HASH";
        }
        $query='http://gdataonline.com/qkhash.php?mode=txt&hash='.$string;
        $page = file_get_contents($query);  
        preg_match_all('|\"35%\"><b>(.*)<|Uis',$page,$result);
        if(empty($result[1][0])) {
            return "Text for this hash not found ^_^";
        } else {
            return "Text for \"".$string."\" is \"".$result[1][0]."\"";
        }
     }
   
      // Get INFO From whois.ripe.net
      function get_whois($server="whois.ripe.net", $query) {
        $sockh=fsockopen($server, 43);
        if(!$sockh){
            return "Connection to whois.ripe.net Error";
        }
        fputs($sockh, $query."\r\n");
        while(!feof($sockh)) {
            $recv .= fread($sockh, 1024); 
        }
        fclose($sockh);
        return explode("\n",$recv);
      }

      // Searching and parse YANdEX.
      function get_yan($string) {
          if(empty($string)) {
            return "^_^";
          }
          $query = 'http://сайт-злодій/yandsearch?rpt=rad&text='.$string;
          $page = file_get_contents($query);  
          preg_match_all('|\'\);\"\shref=\"(.*)\"|Uis',$page,$result);
          return  $result;
      }
      
      // Quotes from the BASH.ORG.RU
      function get_bash(){
          $page = file_get_contents('http://bash.org.ru/random');  
          preg_match_all('|<div>(.+)</div>|',$page,$result); 
          $quo = preg_replace('/<br>|<br \/>/','~',$result[1][1]); 
          return explode("~",$quo);
      }
      
      // Приветстуем нового Юзера
      function say_hello($nick) {
          $say_txt = array("Hello","Re","Hi","h1","Хакір прийшов == >","O_O","Плівііііт","ку","hey","@]-->-------","Пріва ","Здаровка","Приветствуем","heya");
          srand($this->make_rand());
          $msg = $say_txt[rand(1, count($say_txt))]." ".$nick;
          return $msg;
      }
       
      // Отобразить аптайм бота
      function get_uptime($on) {
          $sec = ($on - time());
          $min = 0;
          $hr  = 0;
          if($sec >= 60) { 
              $min = $sec / 60;
              if($min >= 60) { 
                 $hr = $min / 60;
                 return ("Bot uptime: ".$hr." hrs."); 
              } 
                else {
                     return("Bot uptime: ".$min." mins.");
              }
          } else {
              return("Bot uptime: ".$sec." secs.");
          }
      }
       
     //____________________Обработка событий______________________//  
       function cmds() {
          $pattern[1] = "#^:(.+)!(.+)@(.+)\s(.+)\s(.+)\s:(.+)$#"; // Маска для повідомлень в чаті
          $pattern[2] = "#^:(.+)!(.+)@(.+)\s(.+)\s:(.+)$#"; // Маска для повідомлень типу JOIN,QUIT,NOTICE
          
          ## Обробка системних повідомлень ##
          if(preg_match($pattern[2], $this->buffer, $out)) {
              $eve_nick  = $out[1];
              $eve_ev    = $out[4];
              $eve_canal = trim($out[5]);
              
              // Вітаємо нового юніта
              if(preg_match("#^JOIN#",$eve_ev)) {
                    if($eve_nick == $this->nickname){
                        $this->say($eve_canal,$this->version);
                        sleep(0.2);
                    } else {
                        $this->say($eve_canal,$this->say_hello($eve_nick));
                        if($this->AVoice == TRUE) {
                            $this->mode($eve_canal,$eve_nick,"v");
                        }
                        if($this->AOp == TRUE) {
                            $this->mode($eve_canal,$eve_nick,"o");
                        }
                        if($this->AHop == TRUE) {
                            $this->mode($eve_canal,$eve_nick,"h");
                        }
                    }
              }
          }
             
          ##  Обробка повідомлень від користувачів ##  
          if(preg_match($pattern[1], $this->buffer, $out)) {
             $is_private   = FALSE;
             $sender_nick  = $out[1];
             $sender_ident = $out[2];
             $sender_host  = $out[3];
             $cmd   = $out[4];
             $canal = $out[5];
             $msg   = $out[6];
             
             // Команди які потрібно писати в приват.
             if($canal == $this->nickname) {
                   $canal = $sender_nick;
                   
                   // Логін на каналі
                   if(preg_match("#^.login\s(.+)#", $msg, $out)) {
                        if($this->check_host(trim($sender_host))) {
                            $this->say($canal, "Ви вже представилися боту ^_^");
                        }
                        elseif(md5(trim($out[1])) == $this->admin_pas) {
                            $this->say($canal, "Welcome, $sender_nick !!!");
                            $this->OwnerHost[count($this->OwnerHost)+1] = trim($sender_host);
                        }
                        else {
                            $this->say($canal,"Невірний пароль О_О");
                        }
                    }
                    
                    // Сказати на канал.
                    if(preg_match("#^.say\s(.+)#", $msg, $out)) {
                        $this->say($this->channels, trim($out[1]));
                    }
                    
                    // Вимкнення бота (Требуеться авторизація).
                    if(preg_match("#^.halt\s(.+)#", $msg, $out)) {
                        if($this->check_host(trim($sender_host))) {
                            $this->quit(trim($out[1]));
                        }
                        else {
                            $this->say($sender_nick, "Ви не ввійшли, введіть пароль!");
                        }
                    }
                    
                    // Пишемо лог, не пишеться у випадку команди логін
                    if(($this->logon_pri) && (!preg_match("#^.login\s(.+)#", $msg, $out))) {
                        $this->write_log($canal."[pri] - ".$sender_nick."@".$sender_host.": ".$msg);
                    }
                    
            // Команди доступні в паблік чату.
             } else {
                
                // Пишемо лог
                if($this->logon_pub) {
                    $this->write_log($canal."[pub] - ".$sender_nick."@".$sender_host.": ".$msg);
                }
                
                // Відобразити налаштування бота.
                if(preg_match("#!show_conf#", $msg, $out )) {
                    if($this->check_host(trim($sender_host))) {
                        $this->say($sender_nick,"=== > Config");
                        $this->say($sender_nick,"->logFile = ".$this->logFile);
                        $this->say($sender_nick,"->AVoice = ".(($this->AVoice)?"True":"False"));
                        $this->say($sender_nick,"->AOp = ".(($this->AOp)?"True":"False"));
                        $this->say($sender_nick,"->AHop = ".(($this->AHop)?"True":"False")); 
                        $this->say($sender_nick,"->logon_pri = ".(($this->logon_pri)?"True":"False")); 
                        $this->say($sender_nick,"->logon_pub = ".(($this->logon_pub)?"True":"False"));
                        $this->say($sender_nick,"=== > EOF");
                    } else {
                        $this->say($canal,"недостатньо прав");
                    }
                }
          
                // Показати список залогуваних.
                if(preg_match("#!show_a#", $msg, $out)) {
                    if($this->check_host(trim($sender_host))) {
                        $this->say($sender_nick,"ACCESS LIST:");
                        foreach($this->OwnerHost as $CmdRaw) {
                            $this->say($sender_nick,"Host: ".$CmdRaw);
                            sleep(0.5);
                        }
                    } else {
                        $this->say($canal,"У вас недостатньо прав щоб скористатися цією функцією");
                    }
                }
                
                // Поставити режим ОПА юзеру (Требуеться авторизація)
                if(preg_match("#!op\s(.+)#", $msg, $out)) {
                    if($this->check_host(trim($sender_host))) {
                        $this->mode($canal,trim($out[1]),'o');
                    } else {
                        $this->say($canal,"У тебе недостатньо прав ^_^");
                    }
                }
                
                // Зняти режим ОПА з юзера (Потрібна авторизація)
                if(preg_match("#!deop\s(.+)#", $msg, $out)) {
                    if($this->check_host(trim($sender_host))) {
                        $this->mode($canal,trim($out[1]),'do');
                    } else {
                        $this->say($canal,"У тебе недостатньо прав ^_^");
                    }
                }
                
                // Дати користувачеву ПолуОпа (Потрібна авторизація)
                if(preg_match("#!ho\s(.+)#", $msg, $out)) {
                    if($this->check_host(trim($sender_host))) {
                        $this->mode($canal,trim($out[1]),'h');
                    } else {
                        $this->say($canal,"У тебе недостатньо прав ^_^");
                    }
                }
                
                // Зняти з користувача ПолуОпа (Потрібна авторизація)
                if(preg_match("#!deho\s(.+)#", $msg, $out)) {
                    if($this->check_host(trim($sender_host))) {
                        $this->mode($canal, trim($out[1]),'dh');
                    } else {
                        $this->say($canal,"У тебе недостатньо прав ^_^");
                    }
                }
                
                // Дати користувачеві Войс (Потрібна авторизація)
                if(preg_match("#!vo\s(.+)#", $msg, $out)) {
                    if($this->check_host(trim($sender_host))) {
                        $this->mode($canal,trim($out[1]),'v');
                    } else {
                        $this->say($canal,"У тебе недостатньо прав ^_^");
                    }
                }
                
                // Зняти войся з юзера (Потрібна авторизація)
                if(preg_match("#!devo\s(.+)#", $msg, $out)) {
                    if($this->check_host(trim($sender_host))) {
                        $this->mode($canal, trim($out[1]),'dv');
                    } else {
                        $this->say($canal,"У тебе недостатньо прав ^_^");
                    }
                }
                
                // Password generator
                if(preg_match("#!passgen\s-p\s(.+)\s-c\s(.+)#", $msg, $out)){
                    $this->say($canal,"Password: ".$this->pass_gen(trim($out[1]),trim($out[2])));
                    sleep(0.5);
                }
             
                
                // Proxy lists
                if(preg_match("#!proxy#", $msg, $out)) {
                    $res = $this->get_proxy();
                    $this->say($canal," --> Proxy L1ST <--");
                    for($i=0;$i<=5;$i++) {
                        $this->say($canal, $res[$i]);
                        sleep(0.5);
                    }
                }
            
                // Get PageRank(google)
                if(preg_match("#!pr\s(.+)#", $msg, $out)) {
                    $this->say($canal, $this->get_pr(trim($out[1])));
                    sleep(0.2);
                }
            
                // Get CY(yandex)
                if(preg_match("#!cy\s(.+)#", $msg, $out)) {
                    $this->say($canal, $this->get_cy(trim($out[1])));
                    sleep(0.2);
                }
            
                // Search MD5 hash
                if(preg_match("#!ser_md5\s(.+)#", $msg, $out)) {
                    $this->say($canal, $this->eser_md5(trim($out[1])));
                    sleep(0.2);
                }
                // Whois NetRip
                if(preg_match("#!whois\s(.+)#", $msg, $out)) {
                    $who_host = gethostbyname(trim($out[1]));
                    foreach($this->get_whois("whois.ripe.net", $who_host) as $CmdRaw) {
                        $this->notice($sender_nick, $CmdRaw);
                        sleep(0.6);
                    }
                    $this->say($canal,"Info from the ripe.net sended to $sender_nick");
                }
                // Bot uptime :)
                if(preg_match("#^!uptime#", $msg, $out)) {
                    $this->say($canal, $this->get_uptime($this->botup));
                    sleep(0.3);
                }
                // Search in сайт-злодій
                if(preg_match("#^!finde\s(.+)#", $msg, $out)) {
                    $CmdRaw = $this->get_yan(trim($out[1]));
                    for($i=1;$i<=5;$i++) { // $i - Вказує на кількість виведених лінків
                        $this->say($canal, $CmdRaw[1][$i]);
                        sleep(0.7);
                    }
                }
                  
                // sha1 encode
                if(preg_match("#^!sha1\s(.+)#", $msg, $out)) {
                    $this->say($canal, $this->get_sha1(trim($out[1])));
                }
                // Base encode
                if(preg_match("#^!en_base\s(.+)#", $msg, $out)) {
                    $this->say($canal, $this->get_base(trim($out[1])));
                }
                // Base64 decode
                if(preg_match("#^!de_base\s(.+)#", $msg,$out)) {
                    $this->say($canal, $this->get_base_dec(trim($out[1])));
                }
             
                // DEAUTH 
                if(preg_match("#^.deauth#", $msg) && $is_private == TRUE) {
                    if($sender_host == $this->OwnerHost) {
                        $this->OwnerHost = '';
                        $this->say($canal, "Die.");
                    }
                    else {
                        $this->say($canal, "You should be authed.");
                    }
                }
                // VERSION 
                if(preg_match("#^.ver#", $msg)) {
                    $this->say($canal, $this->version);
                }
                // HELP (
                if(preg_match("#^.help#", $msg)) {
                    $this->CmdList[1] = '----  Commands for [ XS ]iB0Tz  ----';
                    $this->CmdList[2] = '!finde <text> :: Пошук по запиту';
                    $this->CmdList[3] = '!ser_md5 <text> :: Пошук хешу по базах ';
                    $this->CmdList[4] = '!md5 <text> :: Отримати md5 хеш ';
                    $this->CmdList[5] = '!sha1 <text> :: Отримати sha1 хеш ';
                    $this->CmdList[6] = '!en_base <text>:: Кодувати в base64';
                    $this->CmdList[7] = '!de_base <text> :: Декодувати з base64';
                    $this->CmdList[8] = '!say <text> :: Сказати на канал.';
                    $this->CmdList[9] = '!whois <text> :: whois service';
                    $this->CmdList[10] = '!cy <text> :: ТИц( yandex )';
                    $this->CmdList[11] = '!pr <text> :: View PageRank';
                    $this->CmdList[12] = '!ver :: Поточна версія бота.';
                    $this->CmdList[13] = '!proxy :: Список проксі';
                    $this->CmdList[14] = '!bash :: Цитата з  BASH.ORG.RU';
                    $this->CmdList[15] = '!uptime :: Час життя бота в онлайні';
                    $this->CmdList[16] = '!passgen -p [a|b|s|i|c] -c [numb of chars]';
                    $this->CmdList[17] = ':: Генератор пароля ключ -p';
                    $this->CmdList[18] = ': a - Пароль складається з усіх символів і цифр';
                    $this->CmdList[19] = ': b - Пароль складається з символів верхнього регістру';
                    $this->CmdList[20] = ': s - Пароль складається з символів нижнього регістру';
                    $this->CmdList[21] = ': i - Пароль складається з цифр';
                    $this->CmdList[22] = ': c - Пароль складається з спецсимволів';
                    $this->CmdList[23] = ': Після ключа -с йде кількість символів.';
                    $this->CmdList[24] = '----  Command for [ ACCESS LIST ]  ----';
                    $this->CmdList[25] = '!op <nick> :: Дати опа юзеру';
                    $this->CmdList[26] = '!deop <nick> :: Зняти опа з юзера';
                    $this->CmdList[27] = '!ho <nick> :: Дати ПолуОпа юзеру';
                    $this->CmdList[28] = '!deho <nick> :: Зняти ПолуОпа з юзера';
                    $this->CmdList[29] = '!vo <nick> :: Дати юзеру Войс';
                    $this->CmdList[30] = '!devo <nick> :: Зняти войс з юзера';
                    $this->CmdList[31] = '!show_a :: Показати список залогіневшіхся';
                    $this->CmdList[32] = '!login <pass> :: Авторизація';
                    $this->CmdList[33] = '!halt <text> :: Вихід бота.';
                    $this->CmdList[34] = '!join <channel> :: Бот заходить на зазначений канал';
                    $this->CmdList[35] = '!part <channel> :: Бот покидає зазначений канал';
                    $this->CmdList[36] = '!show_conf :: Відобразити налаштування бота';
               
                    foreach($this->CmdList as $CmdRaw) {
                        $this->notice($sender_nick, $CmdRaw);
                        sleep(0.6);
                    }
                }
            
            
             
                // Цитата з Башорга
                if(preg_match("#!bash#",$msg,$out)) {
                    $quote = array();
                    $quote = $this->get_bash();
                    $this->say($canal,"[ ----------- BASH.ORG ------------ ]");
                    sleep(0.5);
                    foreach($quote as $CmdRaw) {
                        $this->say($canal,html_entity_decode(urldecode($CmdRaw)));
                        sleep(0.6);
                    }
                    $this->say($canal,"[ --------- END BASH.ORG ---------- ]");
                }           
         
                if(preg_match("#^.join\s(.+)#", $msg, $out)) {
                    if($this->Check_host($sender_host)) {
                        $this->join(trim($out[1]));
                        $this->say($canal, "Joined ".trim($out[1]));
                    }
                    else {
                        $this->say($sender_nick, "Недостатньо прав!");
                    }
                }
     
                if(preg_match("#^.part\s(.+)#", $msg, $out)) {
                    if($this->Check_host($sender_host)) {
                        $this->part(trim($out[1]));
                        $this->say($canal, "Left ".trim($out[1]));
                    }
                    else {
                        $this->say($sender_nick, "Недостатньо прав!");
                    }
                }
      
                if(preg_match("#^!md5\s(.+)#", $msg, $out)) {
                    $this->say($canal, $this->fill_db(trim($out[1])));
                }
            }
          }
       }
      
       function loop() {
          while(TRUE) {
             $this->buffer = fgets($this->irc, 1024); 
             echo $this->buffer;
             $this->cmds();
             $this->pong_reply(); 
          }
       }
    }

    
    $IB = new XSB($Conf['Chan'], $Conf['Nick'], $Conf['Ident'], $Conf['RealName'], $Conf['Pass']);
    $IB->connect($Conf['Serv'], $Conf['Port'] );
    $IB->join($Conf['Chan']);
    $IB->loop();


    
    ?>


Налаштування з'єднань, тут думаю питань не буде

    $Conf['Serv']      = 'irc.intersvyaz.net';
    $Conf['Port']       = '6667';
    $Conf['Chan']        = '#fff';
    $Conf['Nick']         = 'ToX1N';
    $Conf['Ident']        = 'BoT';
    $Conf['RealName']  = 'http://replace.org.ua';
    $Conf['Pass']         = '';

Конфіг дуже простий вам тільки потрібно вказати пароль для адміністратора.

$this->admin_pas = "640bb86684722dcb46b976485433d02d"; // md5('r007'); коментар надалі видалити.

Приємного використання, пані та панове ! :cool:

Re: [php] IRC Bot

Оу, треба буде протеститти.

3

Re: [php] IRC Bot

Hanter написав:

Оу, треба буде протеститти.

Сподіваюся не на каналі #replace

Re: [php] IRC Bot

HetmanNet написав:
Hanter написав:

Оу, треба буде протеститти.

Сподіваюся не на каналі #replace

Та ні, знайду якуйсь російський канал.....де люду побільше.

Re: [php] IRC Bot

// Get PageRank(google)
function get_pr($string) {
$query='http://www.eomy.net/google-pagerank/'.$string;
$page=file_get_contents($query);
preg_match_all('|\s:\s(.+)<|Uis', $page, $result);
if(empty($result[1][0])) {
return "Not Found Oo";
} else {
return "Page Rank for \"$string\": ".$result[1][0];
}
}
// Get CY ( yandex )
function get_cy($string) {
$query='http://search.yaca.сайт-злодій/yca/cy/ch/'.$string;
$page=file_get_contents($query);
preg_match_all('|151;\s(.+)<|Uis', $page, $result);
if(empty($result[1][0])) {
return "Not Found Oo";
} else {
return "CY(yandex) for \"$string\": ".$result[1][0];
}
}

Або я чогось не розумію або що. Для чого цей кусок коду?
Для чого визначати PR і Cy ?

6

Re: [php] IRC Bot

Hanter написав:
// Get PageRank(google)
function get_pr($string) {
$query='http://www.eomy.net/google-pagerank/'.$string;
$page=file_get_contents($query);
preg_match_all('|\s:\s(.+)<|Uis', $page, $result);
if(empty($result[1][0])) {
return "Not Found Oo";
} else {
return "Page Rank for \"$string\": ".$result[1][0];
}
}
// Get CY ( yandex )
function get_cy($string) {
$query='http://search.yaca.сайт-злодій/yca/cy/ch/'.$string;
$page=file_get_contents($query);
preg_match_all('|151;\s(.+)<|Uis', $page, $result);
if(empty($result[1][0])) {
return "Not Found Oo";
} else {
return "CY(yandex) for \"$string\": ".$result[1][0];
}
}

Або я чогось не розумію або що. Для чого цей кусок коду?
Для чого визначати PR і Cy ?

Це пов'язано з SEO. Ось інфо.
http://uk.wikipedia.org/wiki/PageRank

Cy теж оцінка сайтів на зразок PR тільки від яндекса.

7

Re: [php] IRC Bot

Hanter написав:
HetmanNet написав:
Hanter написав:

Оу, треба буде протеститти.

Сподіваюся не на каналі #replace

Та ні, знайду якуйсь російський канал.....де люду побільше.


До речі є функція жорсткого флуду, якщо треба пошукаю та й виложу)))

8 Востаннє редагувалося Пам'ять не може бути READ (12.12.2012 20:17:54)

Re: [php] IRC Bot

Russell S. написав:

Це пов'язано з SEO. Ось інфо.
http://uk.wikipedia.org/wiki/PageRank
Cy теж оцінка сайтів на зразок PR тільки від яндекса.

Ви мене неправильно зрозуміли. Для чого у боті для irc функції для парсингу cy та pr ?

9

Re: [php] IRC Bot

Для SEO, ось наприклад, сиджу я на IRC каналі і мене захотілося дізнатися PR сайту, тоді я вводжу команду, бот виводить мені оцінку.
До речі, функціонал боту можна підігнати за своїм смаком, тут що кому потрібно. =)

10

Re: [php] IRC Bot

Для SEO, ось наприклад, сиджу я на IRC каналі і мене захотілося дізнатися PR сайту, тоді я вводжу команду, бот виводить мені оцінку.
До речі, функціонал боту можна підігнати за своїм смаком, тут що кому потрібно. smile

Якби була кнопка мінус я б поставив її вам за цю реалізацію. Тобто ви хочете сказати що клас який працює з ірс каналом треба напіхати 200 ф-цій так як може бути що я сиджу хочу почитати погоду або мені треба скачати html якогось лівого сайту, або визначити кількість проіндексованих сторінок всі ці функції мають бути в класі з XSB
Якщо так тоді це розрив шаблону. Рекомендую почитати книжки там чітко пише чому так робити не можна. Або створіть тему ми постараємось детально розказати чому це не є гуд ;)

11

Re: [php] IRC Bot

funivan написав:

Для SEO, ось наприклад, сиджу я на IRC каналі і мене захотілося дізнатися PR сайту, тоді я вводжу команду, бот виводить мені оцінку.
До речі, функціонал боту можна підігнати за своїм смаком, тут що кому потрібно. smile

Якби була кнопка мінус я б поставив її вам за цю реалізацію. Тобто ви хочете сказати що клас який працює з ірс каналом треба напіхати 200 ф-цій так як може бути що я сиджу хочу почитати погоду або мені треба скачати html якогось лівого сайту, або визначити кількість проіндексованих сторінок всі ці функції мають бути в класі з XSB
Якщо так тоді це розрив шаблону. Рекомендую почитати книжки там чітко пише чому так робити не можна. Або створіть тему ми постараємось детально розказати чому це не є гуд ;)

Так, можна все додаткові функції вивести в окремі класи.

Re: [php] IRC Bot

Russell S. написав:

Для SEO, ось наприклад, сиджу я на IRC каналі і мене захотілося дізнатися PR сайту, тоді я вводжу команду, бот виводить мені оцінку.
До речі, функціонал боту можна підігнати за своїм смаком, тут що кому потрібно. =)

Цікаво...

13

Re: [php] IRC Bot

Так, можна все додаткові функції вивести в окремі класи.

Критикують не по тому що можна зробити а по тому що зроблено ;)

Подякували: Russell S.1

14

Re: [php] IRC Bot

funivan написав:

Так, можна все додаткові функції вивести в окремі класи.

Критикують не по тому що можна зробити а по тому що зроблено ;)

Зауваження щодо намірів не є критикою, а лиши застереженням від помилок.

15

Re: [php] IRC Bot

Зауваження щодо намірів не є критикою, а лиши застереженням від помилок.

Блін) Зауваження і Критика в даному контексті синоніми!!! Автор поста думаю зрозумів що я мав на увазі)