Created
September 26, 2017 18:29
-
-
Save bssanchez/713057d3f854a42b3b23d0b0f5ce816f to your computer and use it in GitHub Desktop.
IRC bot in perl
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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 :D # | |
| ################################################################ | |
| #by Brandon Sanchez | |
| # Declaracion de constantes # | |
| my $svr = "ifg.ircnode.com"; # Direccion del servidor | |
| my $nck = "practi_b0t"; # Nick del bot | |
| my $usu = "practi_b0t"; # 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', 'Alan','JAG', | |
| 'E|3V1L'); # 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 $ent = 0; # Verificar entrada al canal | |
| my $op = 0; # Channel operator :D | |
| #-----------------------------------------------------------# | |
| if(@ARGV[0] ne "") | |
| { | |
| $chn = "#".@ARGV[0]; | |
| } | |
| if(@ARGV[1] ne "") | |
| { | |
| $nck = @ARGV[1]; | |
| $usu = @ARGV[1]; | |
| } | |
| 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); | |
| } | |
| sub about | |
| { | |
| print $sck "PRIVMSG $chn :En este canal se tratara los temas relacionados con\r\n";sleep(3); | |
| print $sck "PRIVMSG $chn :los proyectos para hxc auspiciados por Alan++\r\n";sleep(3); | |
| print $sck "PRIVMSG $chn :Los proyectos que hay de momento son:\r\n";sleep(3); | |
| print $sck "PRIVMSG $chn :Bot en bash (z0meed), sistema de preguntas seleccion multiple en C (JAG) y DB de malware en C, VB y PHP (blaqker),\r\n";sleep(3); | |
| print $sck "PRIVMSG $chn :Finalizacion proyecto faha (Bryan20)\r\n";sleep(3); | |
| print $sck "PRIVMSG $chn :Fin [[About]]\r\n"; | |
| } | |
| 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ñaron? \:P\r\n"; | |
| $ent = 1; | |
| } | |
| 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") && ($_nick ne "irc.fr")) | |
| { | |
| 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"; | |
| } | |
| elsif($rcv =~ /(MOTD)/i && $ent != 1) | |
| { | |
| print "\nAccediendo al canal..."; | |
| print $sck "JOIN $chn\r\n"; | |
| $ent = 1; | |
| print $sck "PRIVMSG $chn :Hola a todos, me estrañaron? \:P\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 :P\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"; | |
| } | |
| } | |
| elsif($_men =~ /(^:!about)/i) | |
| { | |
| if($_nick ~~ @users) | |
| { | |
| &about; | |
| } | |
| else | |
| { | |
| print $sck "PRIVMSG $chn :Access denied\r\n"; | |
| } | |
| } | |
| elsif($_men =~ /(^:!op)/i) | |
| { | |
| if($_nick ~~ @users) | |
| { | |
| print $sck "MODE $chn +o $_nick\r\n"; | |
| } | |
| } | |
| elsif($_men =~ /(^:!deop)/i) | |
| { | |
| if($_nick ~~ @users) | |
| { | |
| print $sck "MODE $chn -o $_nick\r\n"; | |
| } | |
| } | |
| elsif($_men =~ /(^:!k)/i) | |
| { | |
| if($_nick ~~ @users) | |
| { | |
| if($_num ne $nck) | |
| { | |
| print $sck "KICK $chn $_num\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"; | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment