IRC Befehle zu PHP hinzufügen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • IRC Befehle zu PHP hinzufügen

    Hallo!

    Ich habe einen Chat mit einem AIML Alice bot. Dieser bot wird über eine Datei namens bot_class.php in den Chat geladen. Jetzt habe ich einen kickbot programmiert, der die User vom Chat verbannen kann. Dafür habe ich dem bot admin rules gegeben und die AIML Datei so programmiert, dass wenn ein Schimpfwort im Chat fällt der bot folgender maßen drauf reagiert:

    /kick <getname/> Diese Art der Artikulation ist hier nicht erwünscht!

    Logge ich mich als Admin in den CHat ein und gebe diesen Befehl ein, wird der im Befehl angegebene User vom Chat Raum mit der angegebenen Nachricht gesperrt.

    Fällt nun ein Schimpfwort im Chat, schreibt der bot auch genau diesen Befehl, jedoch wird der user nicht gekickt obwohl der bot admin rules hat.

    Ich kann mir das nur so erklären, dass in der Datei womit der bot in den Chat geladen wird bot_class.php ein paar Zeilen Code hinzugefügt werden müssen, damit der bot IRC Befehle ausführen kann. Hat dazu vielleicht jemand eine Idee?

    Hier die bot_class.php:

    PHP-Code:
    <?php
        
    class Bot{
            var 
    $botId;
            var 
    $bots;
                    
            function 
    Bot()
            {
                
    //toLog('bot_class.php', 'bot class constructor');
            
    }
            
            function 
    login$login$roomId=null$manual=false )
            {
                
    $bots $this->getBots();
                
    $userId $this->getBotId$login );
                if( 
    $userId != null )
                {
                    
    $bots[$userId]['active_manual'] = $manual;
                    
    $this->setBot($userId$bots[$userId]);
                }
                else return 
    false;
                
                
    $req = array(
                    
    'bot_ip' => $GLOBALS['fc_config']['bot_ip'],
                    
    'c'      => 'lin',
                    
    'lg'     => $login,
                    
    'r'      => $roomId
                
    );
                
                
    $conn =& ChatServer::getConnection($req);
                
    $mqi $conn->process($req);
                            
                return 
    true;
            }
                
            function 
    logout$login )
            {
                
    $userId $this->getBotId$login );
                
    $stmt = new Statement("SELECT id FROM {$GLOBALS['fc_config']['db']['pref']}connections WHERE ip = ? AND userid = ?");
                
    $res  $stmt->process($GLOBALS['fc_config']['bot_ip'], $userId);
                            
                if((
    $rec $res->next()) != null)
                {            
                    
    $bots $this->getBots();
                    
    $bots[$userId]['active_manual'] = false;
                    
    $this->setBot($userId$bots[$userId]);
                    
                    
    $req = array(
                        
    'id'     => $rec['id'],
                        
    'c'      => 'lout'
                    
    );
                
                    
    $conn =& ChatServer::getConnection($req);
                    
    $mqi $conn->process($req);
                }
                            
                return( 
    $userId );
            }
            
            function 
    connectUser2Bot$userId$login$botName='' )
            {
                
    $stmt = new Statement("SELECT id FROM {$GLOBALS['fc_config']['db']['pref']}bots WHERE botname = ?");
                
    $res  $stmt->process($botName);
                
                if((
    $rec $res->next()) != null)
                {
                    
    $this->botId $rec['id'];
                }
                
                if(
    $this->botId == null) return false;
                
                
    $this->bots $this->getBots();
                
                
    $rec $this->getRecord();
                
    $rec['botid'] = $this->botId;
                
    $rec['login'] = $login;
                
    $this->setBot($userId$rec); 
                
                return 
    $rec;
            }
            
            function 
    disconnectUser2Bot$userId )
            {
                
    $bots $this->getBots();
                unset(
    $bots[$userId]);
                
    $this->setBots($bots);    
            }
                            
            function 
    processMessages()
            {
                
    $stmt = new Statement("SELECT * FROM {$GLOBALS['fc_config']['db']['pref']}connections WHERE ip = ? AND userid IS NOT NULL");
                
    $res  $stmt->process($GLOBALS['fc_config']['bot_ip']);
                
                
    $messageQueue = new MessageQueue();
                
    $msg_arr = array(); $id_arr = array();
                
    $msg_cnt 0$start 0;
                
                
    $bots  $this->getBots();
                
    $users $this->getUsers();
                while (list(
    $key$val) = each($bots))
                {
                    
    $users[$key] = $this->getUser$key );
                }
                
                while((
    $rec $res->next()) != null)
                {
                    
    $id_arr[] = $rec['id'];
                    
    $start    $rec['start'];
                    
                    
    $mqi $messageQueue->getMessages($rec['id'], $rec['userid'], $rec['roomid'], $start);
                    
                    include_once(
    'programe/src/respond.php');
                    
    //include('programe/src/botinst/dbprefs.php');
                    
                    
    while($mqi->hasNext())
                    {
                        
    $m $mqi->next();
                        
                        if(
    $m->command == 'msg' && $m->userid != $rec['userid'])
                        {
                            
    $myuniqueid md5($m->userid);
                            
    // Here is where we get the reply.
                            
    $botresponse reply($this->replaceSpecial($m->txt), $myuniqueid$bots[$rec['userid']]['botid']);
                            
                            
    $repl $this->replaceSpecial($botresponse->response);
                            
    $replace_pairs = array(
                                                    
    "Program E" => $users[$rec['userid']]['login'],
                                                    
    DEFAULTPREDICATEVALUE => $users[$m->userid]['login']
                                                   );
                            
    $repl strtr($repl$replace_pairs);
                            if(
    $m->touserid == null)
                            {
                                
    $msg_arr[$msg_cnt] = new Message('msg'$rec['userid'], $rec['roomid'], $repl$rec['color']);
                                
    $msg_arr[$msg_cnt]->toroomid $rec['roomid'];
                            }
                            else
                            {
                                
    $msg_arr[$msg_cnt] = new Message('msg'$rec['userid'], null$repl$rec['color']);
                                
    $msg_arr[$msg_cnt]->touserid $m->userid;
                            }
                            
                            
    $msg_cnt++;            
                            
    $start $m->id+$msg_cnt+1;
                        }
                    }
                }
                
                for(
    $i 0$i $msg_cnt$i++)
                {
                    
    $messageQueue->addMessage($msg_arr[$i]);
                }
                
                for(
    $i 0$i count($id_arr); $i++)
                {
                    
    $stmt = new Statement("UPDATE {$GLOBALS['fc_config']['db']['pref']}connections SET updated=NOW(), start=? WHERE id=?");
                    
    $stmt->process($start$id_arr[$i]);        
                }
            }
            
            function 
    replaceSpecial($inStr)
            {
                
    $replace_pairs = array( 
                                        
    "&lt;B&gt;" => "",
                                        
    "&lt;/B&gt;" => "",
                                        
    "&lt;I&gt;" => "",
                                        
    "&lt;/I&gt;" => "",
                                        
    "&lt;BR&gt;" => "",
                                        
    "amp;apos;" => "'",
                                        
    "amp;" => "&",
                                        
    "<br>" => "",
                                        
    "<br/>" => "",
                                        
    "\n" => " ",
                                        
    "\r" => " "
                                      
    );
                
                return (
    strtr($inStr$replace_pairs));
            }
            
            function 
    getUsers()
            {
                
    $res $GLOBALS['fc_config']['cms']->getUsers();
                
                if( 
    is_array$res ) ) return $res;
                
                
    $ret = array();
                while((
    $rec $res->next()) != null)
                {
                    
    $ret[$rec['id']] = $rec;
                }
                
                return 
    $ret;
            }
            
            function 
    getBots()
            {
                
    $file_path $GLOBALS['fc_config']['botsdata_path'];
                
    $retval = array();
                
                if(
    file_exists$file_path ) && filesize$file_path ) > 0)
                {
                    
    $file fopen$file_path"rb" );
                    
    $data fread$filefilesize($file_path));
                    
    fclose($file);
                    
    $retval unserialize($data);
                }
                            
                return 
    $retval;
            }
            
            function 
    setBots($val)
            {
                
    //toLog('TEST', $val);
                
                
    $file_path $GLOBALS['fc_config']['botsdata_path'];
                            
                
    $data serialize($val);
                
    $file fopen$file_path"wb" );
                
    $res fwrite($file$data);
                            
                
    fflush($file);
                
    fclose($file);
            }
            
            function 
    flushbots()
            {
                
    $file_path $GLOBALS['fc_config']['botsdata_path'];
                
                if(
    file_exists$file_path ) && filesize$file_path ) > 0)
                {            
                    
    $file fopen$file_path"wb" );
                    
    $data fread$filefilesize($file_path) );
                    
    $res  fwrite$file$data );
                            
                    
    fflush$file );
                    
    fclose$file );
                }    
            }
            
            function 
    getBot($userId)
            {
                
    $bots $this->getBots();
                return 
    $bots[$userId];
            }
            
            function 
    setBot($userId$val)
            {
                
    $bots = ( count($this->bots) > )? $this->bots $this->getBots();
                
    $bots[$userId] = $val;
                
    $this->setBots($bots);
            }
            
            function 
    getRecord()
            {
                
    $retval = array(
                    
    'botid' => 0,
                    
    'login' => '',
                    
    'role' => ROLE_ADMIN,
                    
    'active_on_supportmode' => false,//!!!
                    
    'active_on_min_users' => '',
                    
    'active_on_max_users' => '',
                    
    'active_on_no_moderators' => false,
                    
    'active_on_user' => 0,
                    
    'available_rooms' => '',//!!!-
                    
    'active_on_no_bots' => false,
                    
    'active_time' => '',//!!!-
                    
    'active_manual' => false
                
    );
                
                return 
    $retval;
            }    
            
            function 
    getNextId()
            {
                
    $bots $this->getBots();
                
    $nextId = -2;
                while (list(
    $key$val) = each($bots))
                {
                    if( 
    $key <= $nextId $nextId $key 1;
                }
                
                return( 
    $nextId );
            }

  • #2
    PHP-Code:
            function getUser$userId )
            {
                
    $bot $this->getBot($userId);
                
    $user = array(
                                
    'id'       => $userId,
                                
    'login'    => $bot['login'],
                                
    'roles'    => $bot['role'],
                                
    'profile'  => ''
                             
    );
                return( 
    $user );             
            }
            
            function 
    getUsersIntoArray( &$arr )
            {
                
    $bots $this->getBots();
                while (list(
    $key$val) = each($bots))
                {
                    
    $arr[] = $this->getUser$key );
                }    
            }
            
            function 
    getBotId$login )
            {
                
    $bots $this->getBots();
                while (list(
    $key$val) = each($bots))
                {
                    if( 
    strcasecmp$val['login'], $login ) == )
                    {
                        return( 
    $key ); 
                    }
                }
                
                return 
    null;
            }
            
            function 
    processOptions()
            {
                
    $stmt = new Statement("SELECT * FROM {$GLOBALS['fc_config']['db']['pref']}connections WHERE userid IS NOT NULL");
                
    $res $stmt->process();
                                    
                
    $conn = array();
                
    $room = array();
                while((
    $rec $res->next()) != null)
                {
                    
    $conn[$rec['userid']] = $rec;
                    if(!isset(
    $room[$rec['roomid']]))
                    {
                        
    $room[$rec['roomid']] = array();
                        
    $room[$rec['roomid']]['usercnt'] = 0;
                        
    $room[$rec['roomid']]['botcnt']  = 0;
                        
    $room[$rec['roomid']]['admin']   = false;
                    }
                    
                    
    $room[$rec['roomid']]['usercnt']++;
                    if(
    strcasecmp($rec['ip'], $GLOBALS['fc_config']['bot_ip']) == 0)
                    {
                        
    $room[$rec['roomid']]['botcnt']++;
                        
    $room[$rec['roomid']]['usercnt']--;
                    }
                }
                
                
    $res $this->getUsers();
                            
                
    $users = array();
                foreach( 
    $res as $rec )            
                {
                    
    $users[$rec['id']] = $rec;
                    if(
    $rec['roles'] == ROLE_ADMIN && $conn[$rec['id']] != null)
                    {
                        
    $room[$conn[$rec['id']]['roomid']]['admin'] = true;
                    }
                }
                
                
    //bot options
                
    $bots $this->getBots();
                
                if( 
    is_array$bots ) )
                while (list(
    $key$val) = each($bots))
                {
                    
    $users[$key] = $this->getUser$key );
                    
                    
    $logged   = ($conn[$key] != null);
                    
    $roomid   = ($conn[$key]['roomid'] != null)? $conn[$key]['roomid'] : $GLOBALS['fc_config']['defaultRoom'];
                    
    $activate $val['active_manual'];
                    
                    if(
    $val['active_on_min_users'] != ''$activate $activate || ($val['active_on_min_users'] > $room[$roomid]['usercnt']);
                    if(
    $val['active_on_max_users'] != '' || $val['active_on_max_users'] > 0$activate $activate || ($val['active_on_max_users'] < $room[$roomid]['usercnt']);
                    
    $activate $activate || ($conn[$val['active_on_user']] != null);
                    
    $activate $activate || ($val['active_on_no_bots'] && $room[$roomid]['botcnt'] == 0);
                    if(
    $val['active_on_no_moderators']) $activate = !$room[$roomid]['admin'];
                    
    //toLog('ACT', $activate.' -- '.$logged);                            
                    
    if($activate && !$logged$this->login$users[$key]['login'] );
                    if(!
    $activate && $logged$this->logout$users[$key]['login'] );
                }
                
                
    //toLog('ROOMS', $room);                    
                //toLog('CONN', $conn);
                //toLog('BOTS', $bots);
                //toLog('USR', $users);    
            
    }
            
            function 
    teach($userName$inStr)
            {
                
    $userId $this->getBotId$userName );                        
                
    $bot    $this->getBot$userId );
                            
                if(
    $bot['botid'] != null)
                { 
                    
    $pattern '';
                    
    $template '';
                    
    $arr split('"'$inStr);
                    
                    if(
    trim($arr[2]) == '=>' && count($arr) == 5)
                    {
                        
    $pattern  strtoupper($arr[1]);
                        
    $template $arr[3];
                    }
                    
                    if(
    strlen(trim($pattern)) != && strlen(trim($template)) != 0)
                    {
                        
    $aimlstring "<category><pattern>$pattern</pattern><template>$template</template></category>";
                                        
                        include_once(
    'programe/src/botinst/botloaderfuncs.php');
                        
    loadaimlstring($aimlstring$bot['botid']);
                        
                        return 
    true;
                    }    
                }
                
                return 
    false;
            }
            
            function 
    unteach($userName$inStr)
            {
                
    $arr split('"'$inStr);
                
    $inStr $arr[1];
                if(
    count($arr) > 3) return false;            
                
                
    $userId $this->getBotId$userName );
                
    $bot $this->getBot$userId );
                
                if(
    $bot['botid'] != null)
                {
                    
    $botId $bot['botid'];
                    
    $stmt = new Statement("SELECT id FROM {$GLOBALS['fc_config']['db']['pref']}templates WHERE bot=? AND pattern LIKE ?");
                    
    $res $stmt->process($botIdstrtoupper($inStr));
                    
    $up_id 0;
                    if((
    $rec $res->next()) != null$up_id $rec['id'];  
                    
                    if(
    $up_id != 0)
                    {
                        
    $stmt = new Statement("DELETE FROM {$GLOBALS['fc_config']['db']['pref']}templates WHERE bot=? AND id=?");
                        
    $stmt->process($botId$up_id);
                        
                        
    $rec 1;
                        while(
    $rec != null)
                        {
                            
    $stmt = new Statement("SELECT parent FROM {$GLOBALS['fc_config']['db']['pref']}patterns WHERE bot=? AND id=?");
                            
    $res $stmt->process($botId$up_id);
                            
    $rec $res->next();
                            
                            if(
    $rec['parent'] == -1) break;
                            
                            
    //delete record
                            
    $stmt = new Statement("DELETE FROM {$GLOBALS['fc_config']['db']['pref']}patterns WHERE bot=? AND id=?");
                            
    $stmt->process($botId$up_id);
                                                    
                            
    $up_id $rec['parent'];
                        }
                        return 
    true;
                    }
                }
                
                return 
    false
            }
            
            function 
    showBots()
            {
                
    $stmt = new Statement("SELECT c.userid, r.name AS room 
                                       FROM 
    {$GLOBALS['fc_config']['db']['pref']}connections AS c, 
                                               
    {$GLOBALS['fc_config']['db']['pref']}rooms AS r
                                       WHERE c.ip = ? AND c.userid IS NOT NULL AND c.roomid = r.id"
    );
                
    $res_active $stmt->process($GLOBALS['fc_config']['bot_ip']);
                
                
    $stmt = new Statement("SELECT * FROM {$GLOBALS['fc_config']['db']['pref']}bots");
                
    $res_bots $stmt->process();
                
                
    $users = array();
                
    $bots_name = array();
                while((
    $rec $res_bots->next()) != null)
                {
                    
    $bots_name[$rec['id']] = $rec['botname'];
                }
                
                
    $bots $this->getBots();
                while (list(
    $key$val) = each($bots))
                {
                    
    $users[$key]= array('user' => $val['login'], 'bot' => $bots_name[$val['botid']], 'room' => '');
                }    
                
                while((
    $rec $res_active->next()) != null)
                {
                    
    $users[$rec['userid']]['room'] = $rec['room'];
                }
                
                
    $txt'';
                while(list(
    $key$val) = each($users))
                {
                    if( 
    $val['bot'] != '' )
                    {
                        
    $txt.= '<br><b>User:</b> '.$val['user'].'<b>, Bot Name:</b> '.$val['bot'];
                        if(
    $val['room'] != '')  $txt.= '<b>, Room:</b> '.$val['room'];
                    }
                }
                
                if(
    strlen($txt) == 0$txt.='<b>No bots are available.</b>';
                                    
                return 
    $txt;
            }
        }
        
    ?> 
    Vielen Dank!

    Gruß

    Dennis

    Kommentar


    • #3
      hier erfährst du, wie du die menschen mühelos dazu bringen kannst, deinen text zu lesen:
      http://www.php-resource.de/forum/sho...threadid=50454

      editieren, bitte.

      Kommentar


      • #4
        Hallo!

        Sorry, hier könnt ihr die Datei runterladen:

        http://wolf-online.servehttp.com/bot_class.zip

        Danke!

        Gruß

        Dennis

        Kommentar


        • #5
          hättest du den link von penizillin geöffnet und den inhalt gelesen würdest du wissen, warum dir bis jetzt noch nicht geholfen wurde.
          MfG
          aim
          Lies mich jetzt!
          - OT-Tags-Liebhaber und BB-Code-Einrücker -

          Kommentar


          • #6
            Hi!

            Danke!

            Hier nochmal der Link:

            Hier klicken

            Danke!

            Gruß

            Dennis

            Kommentar


            • #7
              Ich würde sagen er kennt das <getname/> nicht. das sieht mir aus wie das scripting von mIRC o.Ä.


              P.S.: Er hats immernoch nicht verstanden. Liest du den Thread denn garnicht?!
              Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
              var_dump(), print_r(), debug_backtrace und echo.
              Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
              Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
              Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

              Kommentar


              • #8
                Hi!

                Doch den Befehl <getname/> kennt er. Er fügt dort ja auch den richtigen Username ein. Doch dann schreibt er in den Raum /kick <username> So geht es hier aber nicht!

                Doch das darf nicht im Raum erscheinen, sondern muss als IRC Befehl aufgefasst werden, dmait der User gekickt wird.

                Danke!

                Gruß

                Dennis

                Kommentar

                Lädt...
                X