¿Que es php?
Php, es un lenguaje de programacion orientado a la creación de sitios webs dinámicos.
¿Que es un bot irc?
Un bot irc es un usuario que se conecta a un servidor de chat irc cualquiera e interactua con otros osuarios por medio de comandos y/o eventos.
¿Que es el sistema "seen"?
El sistema seen es uno de los sistemas orientados a bot's irc mas complejo que existe, consiste en mostrar información de un nick cualquiera consultado, con esto el usuario que consulta sabra con detalles si el nick consultado fue expulsado de un canal, o salio, considerando los cambios de nick, esta informacion es juntada y mostrada al usuario que la consulta.
Una muestra del sistema en funcionamiento:
A continuación les muestro el lenguaje escrito en php que ocupe para este resultado:
-
// Variables General.
-
-
$primera_linea=TRUE;
-
$id_ajoin="0";
-
-
// Lista de Ajoin
-
-
$ajoin[0]="#bot";
-
-
// Variables de conexion al servidor IRC
-
-
$irc_servidor="ircchat.terra.cl";
-
$irc_puerto="7000";
-
$irc_nick="seen";
-
$irc_clave="clave_de_bot";
-
$irc_ident="scripts";
-
$irc_realname="Bot seen";
-
-
// Nos conectamos al servidor IRC
-
-
-
// Comprobamos conexion
-
-
if (!$servidor_irc) {
-
return 0;
-
}
-
// Entramos al servidor
-
-
comando($servidor_irc,"nick ".$irc_nick.$salto);
-
comando($servidor_irc,"user ".$irc_ident." text text :".$irc_realname.$salto);
-
-
// Leemos respuesta del servidor
-
-
-
-
// Entrada solo en minusculas para hacer comparaciones
-
-
-
// Ejecución de comandos que se ejecutan solo una vez
-
-
if ($primera_linea) {
-
comando($servidor_irc,"PRIVMSG NickServ :identify ".$irc_clave.$salto);
-
comando($servidor_irc,"MODE ".$irc_nick." +R".$salto);
-
-
// Entramos a los canales
-
$c=0;
-
while ($ajoin[$c]) {
-
comando($servidor_irc,"JOIN ".$ajoin[$c].$salto);
-
$c=$c+1;
-
}
-
-
$primera_linea=FALSE;
-
}
-
-
// Respuesta de PING.
-
-
if ("PING" == $_buffer[0]) {
-
}
-
-
// Al salir de un canal
-
-
if ("PART" == $_buffer[1]) {
-
$nick=nick($_buffer_min[0]);
-
$seen[$nick]=TRUE;
-
$evento[$nick]="part";
-
$canales_nick[$nick]=$canales_nick[$nick]-1;
-
if ($canales_nick[$nick]<=0) {
-
$online[$nick]=FALSE;
-
if ($_buffer[3]) {
-
$ultimo_mensaje[$nick]=texto($_buffer[0].$_buffer[1].$_buffer[2],$buffer);
-
}
-
else {
-
$ultimo_mensaje[$nick]=FALSE;
-
}
-
}
-
else {
-
$evento[$nick]="join";
-
}
-
}
-
-
// Al salir del servidor
-
-
if ("QUIT" == $_buffer[1]) {
-
$nick=nick($_buffer_min[0]);
-
$seen[$nick]=TRUE;
-
$evento[$nick]="quit";
-
$online[$nick]=FALSE;
-
$ultimo_mensaje[$nick]=texto_q($_buffer[0].$_buffer[1],$buffer);
-
}
-
-
// Al entrar a un canal
-
-
if ("JOIN" == $_buffer[1]) {
-
$nick=nick($_buffer_min[0]);
-
$seen[$nick]=TRUE;
-
$evento[$nick]="join";
-
$online[$nick]=TRUE;
-
$host[$nick]=host($_buffer[0]);
-
if (!$canales_nick[$nick]) {
-
$canales_nick[$nick]=1;
-
}
-
else {
-
$canales_nick[$nick]=$canales_nick[$nick]+1;
-
}
-
}
-
-
// Al ser expulsado de un canal
-
-
if ("KICK" == $_buffer[1]) {
-
$seen[$nick]=TRUE;
-
$evento[$nick]="kick";
-
$canales_nick[$nick]=$canales_nick[$nick]-1;
-
if ($canales_nick[$nick]<=0) {
-
$online[$nick]=FALSE;
-
if ($_buffer[3]) {
-
$ultimo_mensaje[$nick]=texto_k($_buffer[0].$_buffer[1].$_buffer[2].$_buffer[3],$buffer);
-
}
-
else {
-
$ultimo_mensaje[$nick]=FALSE;
-
}
-
}
-
else {
-
$evento[$nick]="join";
-
}
-
}
-
-
// Al cambiarse el nick
-
-
if ("NICK" == $_buffer[1]) {
-
$nick=nick($_buffer_min[0]);
-
$seen[$nick]=TRUE;
-
$evento[$nick]="nick";
-
$nick_siguiente[$nick]=$nick_n;
-
$evento[$nick_n]="join";
-
$seen[$nick_n]=TRUE;
-
$canales_nick[$nick_n]=$canales_nick[$nick];
-
$canales_nick[$nick]=0;
-
}
-
-
// Actualizacion de lista de nicks en el canal
-
-
if ("353" == $_buffer[1]) {
-
$lista_nicks=texto_raw($_buffer[0].$_buffer[1].$_buffer[2].$_buffer[3].$_buffer[4],$buffer_min);
-
$c=0;
-
while ($lista[$c]) {
-
$nick=$lista[$c];
-
if ($canales_nick[$nick]) {
-
$canales_nick[$nick]=$canales_nick[$nick]+1;
-
}
-
else {
-
$evento[$nick]="join";
-
$seen[$nick]=TRUE;
-
$canales_nick[$nick]=1;
-
}
-
$c=$c+1;
-
}
-
}
-
-
// Peticion en el canal
-
-
-
$nick_real=nick($_buffer[0]);
-
$nick=nick($_buffer_min[0]);
-
$canal=$_buffer[2];
-
-
if ($_buffer[3]==":!q") {
-
comando($servidor_irc,"QUIT
esconectado.".$salto); -
}
-
-
if ($_buffer[3]==":!seen") {
-
if ($seen[$a_buscar]) {
-
$mensaje="";
-
$cabecera=TRUE;
-
while (TRUE) {
-
if ($evento[$a_buscar]=="join") {
-
$mensaje=$mensaje.$a_buscar_real." esta actualmente en linea.";
-
break;
-
}
-
if ($evento[$a_buscar]=="kick") {
-
$mensaje=$mensaje."Se vio por ultima vez hace ".calcular(time()-$tiempo[$a_buscar])." fue expulsado del canal ".$ultimo_canal[$a_buscar];
-
if ($ultimo_mensaje[$a_buscar]) {
-
$mensaje=$mensaje." con el motivo: ".$ultimo_mensaje[$a_buscar];
-
}
-
break;
-
}
-
if ($evento[$a_buscar]=="part") {
-
$mensaje=$mensaje."Se vio por ultima vez hace ".calcular(time()-$tiempo[$a_buscar])." saliendo del canal ".$ultimo_canal[$a_buscar];
-
if ($ultimo_mensaje[$a_buscar]) {
-
$mensaje=$mensaje." dejo el mensaje: ".$ultimo_mensaje[$a_buscar];
-
}
-
break;
-
}
-
if ($evento[$a_buscar]=="quit") {
-
if ($ultimo_mensaje[$a_buscar]) {
-
$mensaje=$mensaje." dejo el mensaje: ".$ultimo_mensaje[$a_buscar];
-
}
-
break;
-
}
-
if ($evento[$a_buscar]=="nick") {
-
if ($cabecera) {
-
$cabecera=FALSE;
-
}
-
$mensaje=$mensaje.$tmp." ,";
-
$a_buscar=$nick_siguiente[$a_buscar];
-
}
-
}
-
}
-
else {
-
}
-
comando($servidor_irc,"NOTICE ".$nick_real." :".$mensaje.$salto);
-
}
-
}
-
}
-
-
// Funciones
-
-
function calcular($c) {
-
$horas=0;
-
$minutos=0;
-
$segundos=0;
-
while (TRUE) {
-
if ($c<60) { $segundos=$c; break; } if ($c>=3600) {
-
$horas=$horas+1;
-
$c=$c-3600;
-
}
-
else {
-
$minutos=$minutos+1;
-
$c=$c-60;
-
}
-
}
-
$mensaje="";
-
if ($horas>=1) {
-
if ($horas==1) {
-
$mensaje="1 hora ";
-
}
-
else {
-
$mensaje=$horas." horas ";
-
}
-
}
-
if ($minutos>=1) {
-
if ($minutos==1) {
-
$mensaje=$mensaje."1 minuto ";
-
}
-
else {
-
$mensaje=$mensaje.$minutos." minutos ";
-
}
-
}
-
if ($segundos>=1) {
-
if ($segundos==1) {
-
$mensaje=$mensaje."1 segundo";
-
}
-
else {
-
$mensaje=$mensaje.$segundos." segundos";
-
}
-
}
-
}
-
-
function comando($servidor_irc,$cmd) {
-
}
-
-
function nick($nick) {
-
$txt1="!";
-
$pos1=$pos1-1;
-
}
-
-
function host($c) {
-
return $tmp_array[1];
-
}
-
-
function texto($t,$buffer) {
-
$n=$n+4;
-
}
-
-
function texto_k($t,$buffer) {
-
$n=$n+6;
-
}
-
-
function texto_raw($t,$buffer) {
-
$n=$n+6;
-
}
-
-
function texto_q($t,$buffer) {
-
$n=$n+3;
-
}
-
-
?>
Y eso seria todo.
Compartir Si te gustó esta publicación, la puedes Compartir y Guardar en tu sitio favorito.
Iván Alexis
// Jueves 23 de Julio del 2009
Recien me di cuenta que hay un error al mostrar el mensaje cuando se le hace un kick, pero es solo de un caracter arregarlo es super sencillo hasta para quien sepa lo minimo