bssanchez93

IRC Bot - Perl

Jun 9th, 2013
526
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 7.27 KB | None | 0 0
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use IO::Socket;
  5.  
  6. ################################################################
  7. #                 Prueba perl de botIRC                        #
  8. #  Objetivo del proyecto aprender manejo de perl con algunas   #
  9. #         de sus funciones y sobre todo sockets xD...          #
  10. #                                                              #
  11. # Agradecimientos Guia de perl forever (Doddy), foro de perl   #
  12. # en español (perlenespanol.com), kike, y google :D            #
  13. ################################################################
  14.  
  15. #by Kid_Goth
  16.  
  17. #                   Declaracion de constantes               #
  18.  
  19. my $svr = "ifg.ircnode.com";                                # Direccion del servidor
  20. my $nck = "practi_b0t";                                     # Nick del bot
  21. my $usu = "practi_b0t";                                     # Nombre del bot
  22. my $chn = "#hackxcrack";                                        # Canal al que conectara el bot
  23. my $prt = 6667;                                             # Puerto al que conectara, normalmente 6667 pero tambien contamos
  24.                                                             # con 7001, 7002, 7003 y el 6697 (para conexiones seguras)
  25. my $clv = "";                                               # Clave
  26. my @users = ('kid_goth', 'Alan','JAG',
  27.              'E|3V1L');                                     # Usuarios con acceso al bot
  28. my @prgs;                                                   # Hash que tendra preguntas respuestas xD...
  29. my $trvAct = 0;
  30. my $preg = "";
  31. my $resp = "";
  32. my $cont = 0;
  33. my $pist = "";
  34. my $ent = 0;                                                # Verificar entrada al canal
  35. my $op = 0;                                                 # Channel operator :D
  36. #-----------------------------------------------------------#
  37.  
  38. if(@ARGV[0] ne "")
  39. {
  40.     $chn = "#".@ARGV[0];
  41. }
  42.  
  43. if(@ARGV[1] ne "")
  44. {
  45.     $nck = @ARGV[1];
  46.     $usu = @ARGV[1];   
  47. }
  48.  
  49. my $sck = new IO::Socket::INET(PeerAddr => $svr, PeerPort => $prt, Proto => 'tcp') or die "\nMe la suda xD\n";
  50.  
  51. if(!$sck)
  52. {
  53.     print "\nLa repout xD... hubo error\n";
  54.     exit 1;
  55. }
  56. else
  57. {
  58.     print "\nawwwwwwwwwwww yeeeeeaaaaaaaaahhhhhh!!!!\n";
  59. }
  60.  
  61. print "\nEsperando acceptacion...";
  62.  
  63. my $cping = 0;
  64.  
  65. sub trivia
  66. {
  67.     my $arc = "preguntas.txt";
  68.     open(PREG, $arc);
  69.     @prgs = <PREG>;
  70.     close PREG;
  71. }
  72. sub pregunta
  73. {
  74.     my $pos = int(@prgs);
  75.     my $pos = rand($pos);
  76.    
  77.     $preg = $prgs[$pos];
  78.    
  79.     $resp = substr($preg, (index($preg, "*") + 1));
  80.     $preg = substr($preg, 0, index($preg, "*"));
  81.    
  82.     chomp $resp;
  83.     $cont++;
  84. }
  85. sub pista
  86. {
  87.     $pist = $resp;
  88.    
  89.     my @palab = split(/ /, $pist);
  90.     my @punts;
  91.     my $pal = 1;
  92.     for my $pab(@palab){
  93.         my $numP = length($pab);
  94.         if($pal == 1)
  95.         {
  96.             $pab = substr($pab, 0, 1).(" _" x ($numP - 1));
  97.             $pal = 0;
  98.         }
  99.         else
  100.         {
  101.             $pab = "  _" . (" _" x ($numP - 1));
  102.         }
  103.         push @punts, $pab;
  104.     }
  105.     $pist = join(/  /, @punts);
  106.     $pist = uc($pist);
  107. }
  108.  
  109. sub about
  110. {
  111.     print $sck "PRIVMSG $chn :En este canal se tratara los temas relacionados con\r\n";sleep(3);
  112.     print $sck "PRIVMSG $chn :los proyectos para hxc auspiciados por Alan++\r\n";sleep(3);
  113.     print $sck "PRIVMSG $chn :Los proyectos que hay de momento son:\r\n";sleep(3);
  114.     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);
  115.     print $sck "PRIVMSG $chn :Finalizacion proyecto faha (Bryan20)\r\n";sleep(3);
  116.     print $sck "PRIVMSG $chn :Fin [[About]]\r\n";
  117. }
  118.  
  119. while(my $rcv = <$sck>)                                             # Recibir datos que envia el server
  120. {
  121.     chop $rcv;
  122.     print("\n\n".$rcv);
  123.    
  124.     my ($_nick, $_acc, $_can, $_men, $_num) = split(/ /, $rcv);     # Separar los datos recibidos por el server y/o canal
  125.     my ($_cmd, $_tex) = split(/ :/, $rcv);                          # Separar usuario con texto que envia
  126.    
  127.     $_nick = substr($_nick, 1, (index($_nick, "!")-1));
  128.    
  129.     if($rcv =~ /004/)
  130.     {
  131.         print "\nAceptado...";
  132.     }
  133.     elsif($rcv =~ /433/)
  134.     {
  135.         die "$nck ya esta en uso..."
  136.     }
  137.     elsif($rcv =~ /^PING(.*)$/i)
  138.     {
  139.         print $sck "PONG $1\r\n";                                   # Se reponde pong (y ahora si lo tengo claro xD)
  140.         $cping = $cping + 1;
  141.         if($cping == 100)
  142.         {
  143.             $cping = 0;
  144.         }
  145.     }
  146.     elsif($rcv =~ /(376)/i)
  147.     {
  148.         print "\nAccediendo al canal...";
  149.         print $sck "JOIN $chn\r\n";
  150.         print "\nAdentro y saludando";
  151.         print $sck "PRIVMSG $chn :Hola a todos, me extrañaron? \:P\r\n";
  152.         $ent = 1;
  153.     }
  154.     elsif($rcv =~ /(403)/i)
  155.     {
  156.         die "\n\nEstas Baneado\n\n";
  157.     }
  158.     elsif($rcv =~ /$nck/i && ($rcv =~ /hi/i || $rcv =~ /hola/i))
  159.     {
  160.         if(($_nick ne "Global") && ($_nick ne "chat.us.IRCnode.c") && ($_nick ne "irc.fr"))
  161.         {
  162.             print $sck "PRIVMSG $chn :hi $_nick\r\n";
  163.         }  
  164.     }
  165.     elsif($rcv =~ /NOTICE AUTH/i)
  166.     {
  167.         print "\nEnviando datos...";
  168.  
  169.         print $sck "NICK $nck\r\n";
  170.         print $sck "USER $usu 8 * :bien de bien\r\n";
  171.     }
  172.     elsif($rcv =~ /(MOTD)/i && $ent != 1)
  173.     {
  174.        
  175.         print "\nAccediendo al canal...";
  176.         print $sck "JOIN $chn\r\n";
  177.         $ent = 1;
  178.         print $sck "PRIVMSG $chn :Hola a todos, me estrañaron? \:P\r\n";
  179.     }
  180.    
  181.     #------------------------------------------------- Acciones del server ---------------------------------------------------#
  182.    
  183.     my $acc = join(" ", $_acc, $_can, $_men);
  184.    
  185.    
  186.     if($acc =~ /(KICK $chn $nck)/i)
  187.     {
  188.         print $sck "JOIN $chn\r\n";
  189.         print $sck "PRIVMSG $chn :No me simpatizas $_nick :P\r\n";
  190.     }
  191.     elsif($acc =~ /(JOIN)/i)
  192.     {
  193.         if($_nick ne $nck)
  194.         {
  195.             print $sck "PRIVMSG $chn :hi $_nick, bienvenido al canal de $chn\r\n";
  196.         }
  197.     }
  198.     elsif($_men =~ /(^:!trivia)/i)
  199.     {
  200.         if($_nick ~~ @users)
  201.         {
  202.             if($trvAct == 0)
  203.             {
  204.                 &trivia;
  205.                 print $sck "PRIVMSG $chn :Modo trivia ACTIVADO para ver la pregunta actual escribe !pregact\r\n";sleep(3);
  206.                 print $sck "PRIVMSG $chn :para cambiar de pregunta !otra\r\n";sleep(3);
  207.                 print $sck "PRIVMSG $chn :para responder solo responde en minuscula\r\n";sleep(3);
  208.                 print $sck "PRIVMSG $chn :para desactivar el modo trivia !trivia\r\n";sleep(3);
  209.                 &pregunta;
  210.                 &pista;
  211.                 print $sck "PRIVMSG $chn :Pregunta \#$cont\: $preg \: $pist\r\n";
  212.                 #print $sck "PRIVMSG $chn :$resp;\r\n";
  213.                 $trvAct = 1;
  214.             }
  215.             else
  216.             {
  217.                 print $sck "PRIVMSG $chn :Modo trivia DESACTIVADO\r\n";
  218.                 $trvAct = 0;
  219.                 $cont = 0;
  220.             }
  221.         }
  222.         else
  223.         {
  224.             print $sck "PRIVMSG $chn :Access denied\r\n";
  225.         }
  226.     }
  227.     elsif($_men =~ /(^:!about)/i)
  228.     {
  229.         if($_nick ~~ @users)
  230.         {
  231.             &about;
  232.         }
  233.         else
  234.         {
  235.             print $sck "PRIVMSG $chn :Access denied\r\n";
  236.         }
  237.     }
  238.     elsif($_men =~ /(^:!op)/i)
  239.     {
  240.         if($_nick ~~ @users)
  241.         {
  242.             print $sck "MODE $chn +o $_nick\r\n";
  243.         }
  244.     }
  245.     elsif($_men =~ /(^:!deop)/i)
  246.     {
  247.         if($_nick ~~ @users)
  248.         {
  249.             print $sck "MODE $chn -o $_nick\r\n";
  250.         }
  251.     }
  252.     elsif($_men =~ /(^:!k)/i)
  253.     {
  254.         if($_nick ~~ @users)
  255.         {
  256.             if($_num ne $nck)
  257.             {
  258.                 print $sck "KICK $chn $_num\r\n";
  259.             }
  260.         }
  261.     }
  262.    
  263.     #------------------------------------------------- Datos de la trivia ---------------------------------------------------#
  264.    
  265.     if($trvAct eq 1)
  266.     {
  267.         if($_tex =~ /(^!pregact)/i)
  268.         {
  269.             print $sck "PRIVMSG $chn :Pregunta \#$cont\: $preg \: $pist\r\n";
  270.         }
  271.         elsif($_tex =~ /(^!otra)/i)
  272.         {
  273.             print $sck "PRIVMSG $chn :La respuesta era \: $resp\r\n";
  274.             &pregunta;
  275.             &pista;
  276.             sleep(2);
  277.             print $sck "PRIVMSG $chn :Pregunta \#$cont\: $preg \: $pist\r\n";
  278.         }
  279.         elsif($_tex =~ /($resp)/i)
  280.         {
  281.             my $_nuck = $_nick;
  282.             print $sck "PRIVMSG $chn :Felicidades $_nuck la respuesta que diste es correcta... $resp\r\n";
  283.             &pregunta;
  284.             &pista;
  285.             sleep(3);
  286.             print $sck "PRIVMSG $chn :Pregunta \#$cont\: $preg \: $pist\r\n";
  287.         }
  288.     }
  289. }
Advertisement
Add Comment
Please, Sign In to add comment