Login   Register  
PHP Classes
elePHPant
Icontem

File: class.boboirc.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of JImmy Bo  >  Bobo PHP IRC Class  >  class.boboirc.php  >  Download  
File: class.boboirc.php
Role: Class source
Content type: text/plain
Description: The class file for Bobo's PHP IRC Class
Class: Bobo PHP IRC Class
Client to access IRC servers
Author: By
Last change: fixed up commenting
Date: 8 months ago
Size: 5,014 bytes
 

Contents

Class file image Download
<?php

error_reporting
(E_ALL);

/* Please leave this comment in at the top of the script if you use this script
 * in it's entirety. That is my only request. Other then that have fun.
 *
 * Now you too can create irc bots too 8 )
 * or if you have any cool optimizations for it
 *
 * example usage:
 * $ircbot = new boboirc($nick, $ident, $realname, $host, $port);
 * $ircbot->joinChan('#phphelp'); // usually where u can find great help on undernet. #php is useless
 * $ircbot->loop(); // begin loop (so program doesn't die right away)
 * 
 * to add new commands to your new bobot, scroll down to the following function 
 * parse_command($command, $msg)
 * and follow the directions. It's easy. I'm easy.
 *
 * Also if you're looking for help from me directly you can usually find me
 * slumming it on #phphelp on the undernet irc network.
 * my nick on there is usually _P_H_P_ 
 *
 * Check out more useful classes:
 * http://www.phpclasses.org/browse/author/144301.html
 */
 

class boboirc
{
    private 
$fp$readbuffer$line$mcommands;
    public 
$nick$ident$realname$host$port;
    
    function 
boboirc($nick$ident$realname$host$port)
    {
        
$this->nick         $nick;
        
$this->ident         $ident;
        
$this->realname $realname;
        
$this->host         $host;
        
$this->port         $port;

        
$this->fp fsockopen($host$port$erno$errstr30);
        if(!
$this->fp) die("Could not connect\r\n");
        
    
fwrite($this->fp"NICK ".$nick."\r\n");
    
fwrite($this->fp"USER ".$ident." ".$host." bla :".$realname."\r\n");

        
$this->flush();

    }
    
    function 
loop()
    {
        
// now for program loop //
        
while (!feof($this->fp)) 
        {
            
$this->line fgets($this->fp256); // wait for a message

            
if($this->is_ping($this->line)) $this->pong();
                        
            if(
strstr($this->line,"PRIVMSG"))
            {
                echo 
"PRIVMSG...  \r\n";
                
// incoming private message //
                
$msg $this->msgToArray($this->line);
                                
                
// is this a command?
                
if($command $this->get_command($msg['msg']))
                {
                    echo 
"processing command ($command)... \r\n";
                    
// erase command from message array  // array('from, 'chan', 'msg'); //
                    
$msg['msg'] = trim(str_replace($command,'',$msg['msg']));
                    echo 
"parsing command ($command)... \r\n";
                    
$this->parse_command($command$msg);
                }
            }
            
            
$this->line "";
            
$this->flush();
            
$this->wait(); // time to next cycle
        
}

    }
    
    
// outgoing //
    
function out($msg// raw message
    
{
        if(@empty(
$msg)) return false;
        if(!
strstr($msg"\n")) $msg .= "\n";

        
fwrite($this->fp$msg);
        return 
true;
    }
    
    function 
setNick($nick)                        { $this->out("NICK ".$nick."\r\n"); $this->nick $nick; }
    function 
joinChan($channel)             { $this->out("JOIN :".$channel."\r\n"); }
    function 
quitChan($channel)             { $this->out("PART :".$channel."\r\n"); }

    function 
listChans()                             { $this->out("LIST\r\n"); }
    function 
getTopic($channel)                { $this->out("TOPIC ".$channel."\r\n"); }
    
    function 
msg($target$msg)             { $this->out("PRIVMSG $target :$msg\r\n"); }
    function 
msgChan($channel$msg)     { $this->msg($channel$msg); }
    function 
msgUser($user$msg)         { $this->msg($user$msg); }
    
    function 
pong()                                     { $this->out("PONG :".$this->host."\r\n"); }
    function 
quit($msg="")                        { $this->out("QUIT :$msg\r\n"); }
    
    
// incoming processing //
    
function is_ping($line)                        { if(strstr($line'PING')) return true; }
    function 
is_msg($line)                        { if(strstr($line'PRIVMSG')) return true; }

    function 
msgToArray($line// array('from, 'chan', 'msg');
    
{
        
$array explode(":",$line);
                
        
$from explode("!",$array[1]);
        
$from trim($from[0]);
        
        
$fromchan explode("#",$array[1]);
        
$fromchan "#".trim($fromchan[1]);
        
        
$string $array[2];
        
$string trim($string);
        
        
$msg = array('from'=>$from'chan'=>$fromchan'msg'=>$string);
        
        return 
$msg;
    }
    
    
// system
    
function flush()                                    { @ob_flush; @flush(); }
    function 
wait()                                        { usleep(250000); }
    function 
get_command($string)
    {
        if(!
strstr($string,"!")) return false;
        if(!
strstr($string" "))
            
$command $string;
        else
        {
            
$command explode(" "$string,2);
            
$command $command[0];
        }
        return 
$command;
    }
    
    
// misc useful functions //
    
function rem_xs_whitespace($string){ $string trim(preg_replace('/\s+/'' ',     $string)); return $string; }



    
// command parser //
    // TELL THE PARSER WHAT COMMANDS ARE AVAILABLE
    // add commands in the next section below this function
    
function parse_command($command$msg)
    {
        
// $command = "!command"; $msg = array('from, 'chan', 'msg')
        
switch($command)
        {
            case 
'!sayrand'$this->command_sayrand($msg); break;
        }
    }
    
    
// now for commands //
    // ADD YOUR COMMANDS HERE //
    
function command_sayrand($msg)
    {
        
$number rand(1,100);
        
$this->msgChan($msg['chan'], "random number:".$number);
        echo 
"saying magic number...\r\n";
    }

}

?>