Desde 1994 en la Red. La pagina de los aficionados a la electronica, informatica y otras curiosidades de la vida. No dudes en visitarnos.
Ahora 3 visitas.| 2505701 Visitas (desde Dic. 2011), hoy: 549 Visitas 847 Pag. Vistas , ultimos 36 dias: 22777 Visitas. 50006 Pag. Vistas. Tu IP: 18.206.241.26
Que ando curioseando:
AutosuficienciaCosas de casaElectronicaEn InternetInformáticaMundo MisticoSin categoríaSociedadTe lo recomiendo

Crea tu bot para IRC usando PHP

Crea tu bot para IRC usando PHP sockets. NO IRCG

Primero que nada aprenderemos para que sirve cada función clave que vamos a estar usando para poder hacer el bot para IRC.

Función Pequeña descripción
»1 fsockopen: Función que conecta el script php a un lugar.
Formato: $conexion = fsockopen(“SERVIDOR”, PUERTO);
»2 fclose: Función que desconecta el script php a un lugar ya conectado mediante un socket.
Formato: fclose($conexion);
»3 fputs: Función que enviara un texto al servidor conectado.
Formato: fputs($conexion,”TEXTO”);
»4 feof: Función que me dira si estoy conectado al servidor o no.
Formato: feof($conexion);
»5 fgets: Función que permitira que el bot se entere de los msgs que me envia el IRC.
Formato: fgets($conexion,2048);
»6 set_time_limit: Función que permitira que no se caiga la conexion por timelimit.
Formato: set_time_limit(0);

Proximamente le presento el ejemplo utilizando las funciones de arriba.
Hay algunas funciones que no puse… ¿ Por que ? para hacer un bot php
debes tener algun tipo de conocimiento minimo en PHP.

Codigo de ircbot.php:

<?php// Configuramos el script.
$conexion fsockopen("servidor.com"6667);
$bnick="PHPHispanoTuT";
$autojoin=""// Si son varios canales puedes poner Canal1,Canal2 :) fputs($conexion"USER ".$bnick." - - :-\n");
fputs($conexion"NICK ".$bnick." -\r\n");// Aremos un loop infinito mientras este conectado al servidor.
while (!feof($conexion)) {
    
// Resiviremos los mensajes del servidor.
    
$bmsg str_replace("\n"""str_replace("\r"""fgets ($conexion,2048)));
    
$partmsg explode(" ",$bmsg);// quita los // del siguiente commando si quieres saber un debug en la consola.
    // echo $bmsg;
   �
    // Con este code de abajo sacamos el nick de quien nos envia el msg.
    
$n =  explode("!",$partmsg[0]);
    
$nick str_replace(":","",$n[0]);// Al enviarnos el PING responderemos con PONG.. (Dudas, aprende protocolo IRC)
    
if ($partmsg[0] == 'PING') {
        
fputs($conexion,'PONG '.str_replace(':','',$partmsg[1])."\n");
        
// Si el el primer ping entraremos a los canales. (Este ping lo hace cuando se conecto.)
        
if(!$bconnect) {
            
// El script no se acabara nunca omenos que se caiga.
            
set_time_limit(0);
            
fputs($conexion,"JOIN ".$autojoin."\n");
            
$bconnect=1;
        }
    }
}
// Al no estar conectado al servidor ejecutara este commando que desconectara el socket y terminara el script.
fclose($conexion); exit();?>

Este bot no tiene ninguna funcion… Solo conecta y se mantiene conectado.
Para iniciar el bot tendras que poner en la consola php ircbot.php (Shell Unix RECOMENDADA)

// Me identifico.

Espero que les halla servido de mucho, Atentamente OmaRPR (Omar Soto)
Creado el 29/Septiembre/2003 Para #PHP_Para_Torpes (PHP-Hispano.net)

Otro codigo similar:

<?�
$servidor 
“irc.infogroup.cl”
;�
$puerto “6667″
;�
$canal “#canal”
//Canal que conectara�
$nick “Berna_Bot”
//Nick del Bot�
$nickmaster “Berna”
//Al User que obedesera xD ._. $connect fsockopen($servidor$puerto$errno$errstr30); //hacemos la conexion fputs($connect“USER $nick - - :-\n”); //Nos identificamos en el servidor�
fputs($connect“NICK $nick -\r\n”); 
//Nos identificamos en el servidor $open fopen(“log.txt”,“w+”); //siempre es bueno tener un log de las conversaciones :)�
while (!feof($connect
)) { $conectado==0){�
set_time_limit(0
);�
fputs($connect,“JOIN $canal\n”
);�
fputs($connect,“privmsg $canal Bot Conectado en $canal\n”
);�
fputs($connect,“privmsg $canal www.neosecurityteam.net\n”
);�
$conectado 1
;�
//Hacemos esto, porke si no esta dentro del bucle y si conectaria infinitamente ._. $log fgets ($connect,2048);�
fwrite($open“$log”); 
//Aca escribimos en el archivo del texto $len strlen($nickmaster) + 1;�
$sep substr(fgets($connect,2048),0,$len
);�
$nick explode(“:”,$sep
);�
//Ahi haremos que identifique el nick del master del bot if ($nick[1]==$nickmaster){ //Si es el master el que habla if (eregi(“!say”,fgets($connect,2048))){�
$ms explode(“!say ”,fgets($connect,2048
));�
fputs($connect,“privmsg $canal $ms[1]\n”); 
//Con poner !say y el texto lo enviara al publico�
eregi(“!nick”fgets($connect,2048))){�
$ms explode(“!nick ”,fgets($connect,2048
));�
fputs($connect,“NICK $ms[1]\n”); 
//!nick Nick nuevo del Bot - cambia de nick�
//esas son unas peke?as funciones que le puse…�
}�
}�
fclose($connect); 
//cerramos el soket�
?>

if (

if(

OTRO:

<?
// Datos del Bot
$nickname “KesBot”;
$powered “Kesthers”;
$nombre “KesBot”;
$version “v1.0″;$ircserver[address] = “irc.quakenet.org”;
$ircserver[port] = “6667″;$red “quakenet”;$directorio[stats] = “/var/log/kesbot/quakenet/”;// Conexion a Base de Datos
mysql_connect(“localhost”“xxxxx”“xxxxx”); mysql_select_db(“xxxxx”);## Funciones de Logs & Stats ##
function WriteLogs($canal$mensaje) {
    global 
$directorio;
    
$fp = @fopen($directorio[stats].str_replace(“#”“”str_replace(“:”“”$canal)).“.log”“a”);
    
fputs($fp$mensaje.“\r\n”);
    
fclose($fp);
}
// Conectamos
set_time_limit(0);
for(
$conn=01<=2$conn++) {
    echo
“Conectando…\n”;
    
$conexion fsockopen($ircserver[address], $ircserver[port]);
    
socket_set_timeout($conexion31536000);
    if(
$conexion) {
        echo
“Esperando respuesta…\n”;
        
$bucle=0$conectado=0$limit=0;
        
set_time_limit(0);
        while (
$read fgets($conexion,512)) {
            
set_time_limit(0);
            
$read str_replace(“\n”,“”,$read);
            
$read str_replace(“\r”,“”,$read);
            
$array explode(“ ”,$read);
            
$address explode(“!”,$array[0]);
            
$nick str_replace(“:”,“”,$address[0]);
            
$quit substr($readstrlen($array[0])+strlen($array[1])+3512);
            
$modo substr($readstrlen($array[0])+strlen($array[1])+strlen($array[2])+3512);
            
$mensaje substr($readstrlen($array[0])+strlen($array[1])+strlen($array[2])+4512);
            
$kick substr($readstrlen($array[0])+strlen($array[1])+strlen($array[2])+strlen($array[3])+5512);$conectado!==0) {
                switch (
$array[1]) {
                    case 
PRIVMSG:
                    if(
$array[2]!==$nickname) {
                        if(
substr($mensaje07)==“ACTION”) {
                            
$count strlen($mensaje)-9;
                            
WriteLogs($array[2], “[".date("H:i")."] * ”.$nick.“ ”.substr($mensaje8$count));
                        } else {
                            
WriteLogs($array[2], “[".date("H:i")."] <”.$nick.“> ”.$mensaje);
                        }
                    } else {
                        
$orden explode(“ ”strtolower($mensaje));
                        switch (
$orden[0]) {
                            case 
“ping”:
                            
fputs($conexion“NOTICE ”.$nick.“ :PING ”.$orden[1].“\n”);
                            break;
                           �
                            case 
“version”:
                            
fputs($conexion“NOTICE ”.$nick.“ :VERSION ”.$version.“\n”);
                            break;
                           �
                            case 
“time”:
                            
fputs($conexion“NOTICE ”.$nick.“ :TIME ”.date(“D M d H:i:s Y”).“\n”);
                            break;
                           �
                            case 
“finger”:
                            
fputs($conexion“NOTICE ”.$nick.“ :FINGER ”.$nombre.“\n”);
                            break;
admin:
                            if(
mysql_num_rows(mysql_query(“SELECT * FROM admins WHERE nick=’”.strtolower($nick).“‘”))==1) {
                                
$accion substr($mensaje6512);
                                
fputs($conexion$accion.“\n”);
                                if(
$orden[1]==“nick”) {
                                    
$nuevo explode(“:”$orden[2]);
                                    
$nickname $nuevo[0];
                                }
                            } else {
                                
fputs($conexion“PRIVMSG ”.$nick.“ :\002\0032No estas autorizado/da a usar este comando.\n”);
                            }
                            break;
info:
                            
fputs($conexion“PRIVMSG ”.$nick.“ :\002\0032Bot de Logs & Stats [Creado por: ".$powered."]\n”);
                            
fputs($conexion“PRIVMSG ”.$nick.“ :\002\0032Website: http://www.kesthers.com\n”);
                            
fputs($conexion“PRIVMSG ”.$nick.“ :\002\0032E-Mail: [email]info@kesthers.com[/email]\n”);
                            break;
op:
                            if(
mysql_num_rows(mysql_query(“SELECT * FROM opers WHERE nick=’”.$orden[1].“‘ AND password=’”.$orden[2].“‘ AND red=’”.$red.“‘ AND canal=’”.$orden[3].“‘”))==“1″) {
                                
fputs($conexion“MODE ”.$orden[3].“ +o ”.$nick.“\n”);
                            } else {
                                
fputs($conexion“PRIVMSG ”.$nick.“ :\002\0032No te puedo dar op porque los datos no son correctos\n”);
                            }
                            break;
                        }
                    }
                    break;
                   �
                    case 
NOTICE:
                    if(
$array[2]!==$nickname) {
                        
WriteLogs($array[2], “[".date("H:i")."] *** ”.$mensaje.“ (“.$nick.“)”);
                    }
                    break;
                   �
                    case 
NICK:
                    
$query mysql_query(“SELECT * FROM online WHERE nick=’”.$nick.“‘ AND red=’”.$red.“‘”);
                    while(
$sql mysql_fetch_array($query)) {
                        
WriteLogs($sql[canal], “[".date("H:i")."] *** ”.$nick.“ is now known as ”.str_replace(“:”“”$array[2]));
                    }
                    
mysql_query(“UPDATE online SET nick=’”.str_replace(“:”“”$array[2]).“‘ WHERE nick=’”.$nick.“‘ AND red=’”.$red.“‘”);
                    break;
MODE:
                    if(
$array[2]!==$nickname) {
                        
WriteLogs($array[2], “[".date("H:i")."] *** ”.$nick.“ sets mode: ”.$modo);
                    }
                    break;
JOIN:
                    
WriteLogs($array[2], “[".date("H:i")."] *** ”.$nick.“ (“.$address[1].“) has joined ”.str_replace(“:”“”$array[2]));
                    
mysql_query(“INSERT INTO online (time, nick, canal, red) VALUES (‘”.time().“‘, ’”.$nick.“‘, ’”.str_replace(“:”“”$array[2]).“‘, ’”.$red.“‘);”);
                    break;
PART:
                    
WriteLogs($array[2], “[".date("H:i")."] *** ”.$nick.“ (“.$address[1].“) has left ”.$array[2]);
                    
mysql_query(“DELETE FROM online WHERE nick=’”.$nick.“‘ AND canal=’”.$array[2].“‘ AND red=’”.$red.“‘”);
                    break;
KICK:
                    if(
$array[3]==$nickname) {
                        
fputs($conexion“JOIN ”.$array[2].“\n”);
                    }
                    
WriteLogs($array[2], “[".date("H:i")."] *** ”.$array[3].“ was kicked by ”.$nick.“ (“.$kick.“)”);
                    
mysql_query(“DELETE FROM online WHERE nick=’”.$array[3].“‘ AND canal=’”.$array[2].“‘ AND red=’”.$red.“‘”);
                    break;
QUIT:
                    
$query mysql_query(“SELECT * FROM online WHERE nick=’”.$nick.“‘ AND red=’”.$red.“‘”);
                    while(
$sql mysql_fetch_array($query)) {
                        
WriteLogs($sql[canal], “[".date("H:i")."] *** ”.$nick.“ (“.$address[1].“) Quit (“.$quit.“)”);
                    }
                    
mysql_query(“DELETE FROM online WHERE nick=’”.$nick.“‘ AND red=’”.$red.“‘”);
                    break;
TOPIC:
                    
WriteLogs($array[2], “[".date("H:i")."] *** ”.$nick.“ changes topic to ’”.$mensaje.“‘”);
                    
mysql_query(“UPDATE canales SET topic=’”.$mensaje.“‘ WHERE canal=’”.$array[2].“‘ AND red=’”.$red.“‘”);
                    break;
                }
            }
$bucle==0) {
                
fputs($conexion“NICK $nickname\n\n”);
                
fputs($conexion“USER $nickname $powered $powered :$nombre $version\n\n”);
                echo
“Identificado.\n”;
            }
$array[0]==“PING”) {
                
fputs($conexion“PONG ”.str_replace(“:”,“”,$array[1]).“\n”);
            }
$array[1]==251) {
                
$query mysql_query(“SELECT * FROM canales WHERE red=’”.$red.“‘”);
                while(
$sql mysql_fetch_array($query)) {
                    
$canales .= $sql[canal].“,”;
                }
                
fputs($conexion“JOIN ”.$canales.“\n\n”);
                echo
“Entrada en canales. ($canales)\n”;
                
$conectado++;
            }
$bucle++;
        }
    } else {
        echo
“Error al Conectar.\n”;
    }
    echo
“Desconectado.\n”;
}
?>

Escribe un comentario

Tu comentario