#!/usr/bin/perl use strict; use IO::Socket; ################################################################ # Prueba perl de botIRC # # Objetivo del proyecto aprender manejo de perl con algunas # # de sus funciones y sobre todo sockets xD... # # # # Agradecimientos Guia de perl forever (Doddy), foro de perl # # en español (perlenespanol.com), kike, y google # ################################################################ #by Kid_Goth # Declaracion de constantes # my $svr = "ifg.ircnode.com"; # Direccion del servidor my $nck = "kid_bot"; # Nick del bot my $usu = "kid_bot"; # Nombre del bot my $chn = "#hackxcrack"; # Canal al que conectara el bot my $prt = 6667; # Puerto al que conectara, normalmente 6667 pero tambien contamos # con 7001, 7002, 7003 y el 6697 (para conexiones seguras) my $clv = ""; # Clave my @users = ('kid_goth', 'kid_g0th', 'kid_bot','k1d_goth', 'kike'); # Usuarios con acceso al bot my @prgs; # Hash que tendra preguntas respuestas xD... my $trvAct = 0; my $preg = ""; my $resp = ""; my $cont = 0; my $pist = ""; #-----------------------------------------------------------# my $sck = new IO::Socket::INET(PeerAddr => $svr, PeerPort => $prt, Proto => 'tcp') or die "\nMe la suda xD\n"; if(!$sck) { print "\nLa repout xD... hubo error\n"; exit 1; } else { print "\nawwwwwwwwwwww yeeeeeaaaaaaaaahhhhhh!!!!\n"; } print "\nEsperando acceptacion..."; my $cping = 0; sub trivia { my $arc = "preguntas.txt"; open(PREG, $arc); @prgs = <PREG>; close PREG; } sub pregunta { my $pos = int(@prgs); my $pos = rand($pos); $preg = $prgs[$pos]; $resp = substr($preg, (index($preg, "*") + 1)); $preg = substr($preg, 0, index($preg, "*")); chomp $resp; $cont++; } sub pista { $pist = $resp; my @palab = split(/ /, $pist); my @punts; my $pal = 1; for my $pab(@palab){ my $numP = length($pab); if($pal == 1) { $pab = substr($pab, 0, 1).(" _" x ($numP - 1)); $pal = 0; } else { $pab = " _" . (" _" x ($numP - 1)); } push @punts, $pab; } $pist = join(/ /, @punts); $pist = uc($pist); } while(my $rcv = <$sck>) # Recibir datos que envia el server { chop $rcv; print("\n\n".$rcv); my ($_nick, $_acc, $_can, $_men, $_num) = split(/ /, $rcv); # Separar los datos recibidos por el server y/o canal my ($_cmd, $_tex) = split(/ :/, $rcv); # Separar usuario con texto que envia $_nick = substr($_nick, 1, (index($_nick, "!")-1)); if($rcv =~ /004/) { print "\nAceptado..."; } elsif($rcv =~ /433/) { die "$nck ya esta en uso..." } elsif($rcv =~ /^PING(.*)$/i) { print $sck "PONG $1\r\n"; # Se reponde pong (y ahora si lo tengo claro xD) $cping = $cping + 1; if($cping == 100) { $cping = 0; } } elsif($rcv =~ /(376)/i) { print "\nAccediendo al canal..."; print $sck "JOIN $chn\r\n"; print "\nAdentro y saludando"; print $sck "PRIVMSG $chn :Hola a todos, me extrañaban? \\r\n"; } elsif($rcv =~ /(403)/i) { die "\n\nEstas Baneado\n\n"; } elsif($rcv =~ /$nck/i && ($rcv =~ /hi/i || $rcv =~ /hola/i)) { if(($_nick ne "Global") && ($_nick ne "chat.us.IRCnode.c")) { print $sck "PRIVMSG $chn :hi $_nick\r\n"; } } elsif($rcv =~ /NOTICE AUTH/i) { print "\nEnviando datos..."; print $sck "NICK $nck\r\n"; print $sck "USER $usu 8 * :bien de bien\r\n"; } #------------------------------------------------- Acciones del server ---------------------------------------------------# my $acc = join(" ", $_acc, $_can, $_men); if($acc =~ /(KICK $chn $nck)/i) { print $sck "JOIN $chn\r\n"; print $sck "PRIVMSG $chn :No me simpatizas $_nick\r\n"; } elsif($acc =~ /(JOIN)/i) { if($_nick ne $nck) { print $sck "PRIVMSG $chn :hi $_nick, bienvenido al canal de $chn\r\n"; } } elsif($_men =~ /(^:!trivia)/i) { if($_nick ~~ @users) { if($trvAct == 0) { &trivia; print $sck "PRIVMSG $chn :Modo trivia ACTIVADO para ver la pregunta actual escribe !pregact\r\n";sleep(3); print $sck "PRIVMSG $chn :para cambiar de pregunta !otra\r\n";sleep(3); print $sck "PRIVMSG $chn :para responder solo responde en minuscula\r\n";sleep(3); print $sck "PRIVMSG $chn :para desactivar el modo trivia !trivia\r\n";sleep(3); &pregunta; &pista; print $sck "PRIVMSG $chn :Pregunta \#$cont\: $preg \: $pist\r\n"; #print $sck "PRIVMSG $chn :$resp;\r\n"; $trvAct = 1; } else { print $sck "PRIVMSG $chn :Modo trivia DESACTIVADO\r\n"; $trvAct = 0; $cont = 0; } } else { print $sck "PRIVMSG $chn :Access denied\r\n"; } } #------------------------------------------------- Datos de la trivia ---------------------------------------------------# if($trvAct eq 1) { if($_tex =~ /(^!pregact)/i) { print $sck "PRIVMSG $chn :Pregunta \#$cont\: $preg \: $pist\r\n"; } elsif($_tex =~ /(^!otra)/i) { print $sck "PRIVMSG $chn :La respuesta era \: $resp\r\n"; &pregunta; &pista; sleep(2); print $sck "PRIVMSG $chn :Pregunta \#$cont\: $preg \: $pist\r\n"; } elsif($_tex =~ /($resp)/i) { my $_nuck = $_nick; print $sck "PRIVMSG $chn :Felicidades $_nuck la respuesta que diste es correcta... $resp\r\n"; &pregunta; &pista; sleep(3); print $sck "PRIVMSG $chn :Pregunta \#$cont\: $preg \: $pist\r\n"; } } }