Guest User

Untitled

a guest
Mar 15th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 4.47 KB | None | 0 0
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use warnings;
  5.  
  6. # On utilise la librairie Net::IRC pour se connecter à IRC
  7. use Net::IRC;
  8.  
  9. # On load les commandes
  10. our %commands = ();
  11. require "commands.pl";
  12.  
  13. # Configuration des options de connexion (serveur, login) :
  14. our $server = 'irc.epiknet.org';
  15. our $nickBot = 'TwilightSparkle';
  16.  
  17. # Informations concernant le Bot :
  18. our $ircname = 'TwilightSparkle';
  19. our $username = 'TwilightSparkle';
  20. our $pass = 'MDP';
  21. our $version = '1.0';
  22. our $locked = "false";
  23.  
  24. # Channel sur lequel on veut que le Bot aille :
  25. #our $channel = '#test_bot';
  26. our $channel = '#lpp';
  27.  
  28. # On crée l'objet qui nous permet de nous connecter à IRC :
  29. our $irc = new Net::IRC;
  30.  
  31. # On crée l'objet de connexion à IRC :
  32. our $conn = $irc->newconn(
  33.     'Server'      => $server,
  34.     'Port'        => 6667,
  35.     'Nick'        => $nickBot,
  36.     'Ircname'     => $ircname,
  37.     'Username'    => $username
  38. );
  39.  
  40. # On installe les fonctions de Hook :
  41. $conn->add_handler('376', \&on_connect);         # Fin du MOTD => on est connecté
  42. $conn->add_handler('public', \&on_public);       # Sur le chan
  43. $conn->add_handler('msg', \&on_private);         # En privé
  44. $conn->add_handler('kick', \&on_kick);           # En cas de kick
  45.  
  46. # On lance la connexion et la boucle de gestion des événements :
  47. $irc->start();
  48.  
  49. sub on_connect
  50. {
  51.     my ($conn, $event) = @_;
  52.    
  53.     $conn->privmsg('nickserv', 'IDENTIFY ' . $pass);
  54.     $conn->join($channel);
  55.     $conn->{'connected'} = 1;
  56. } # Fin on_connect
  57.  
  58. sub on_public
  59. {
  60.     my ($conn, $event) = @_;
  61.     my $text = $event->{'args'}[0];
  62.     $conn->print($event->{'to'}[0] . " : <" . $event->{'nick'} . "> : $text");
  63.     parse_command($conn, $event, "false");
  64. } # Fin on_public
  65.  
  66.  
  67. sub on_private
  68. {
  69.     my ($conn, $event) = @_;
  70.     my $text = $event->{'args'}[0];
  71.     $conn->print("Private : <" . $event->nick() . "> : $text");
  72.     parse_command($conn, $event, "true");
  73. } # Fin on_private
  74.  
  75. sub on_kick {
  76.     my ($conn, $event) = @_;
  77.    
  78.     if($event->nick() eq $nickBot)
  79.     {
  80.         return;
  81.     }
  82.    
  83.     my @kicks = (
  84.         "Pourquoi toute cette haine ? Les poneys ne font-ils donc pas la paix ? Tu ne respectes pas les valeurs de MLP !",
  85.         "OH MY GOSHHHHHHH ! Aurais tu oublié les fondements même de MLP qui promouvoit la paix !?",
  86.         "Tu sais que je t'aime toi <3",
  87.         "Owwwwiiiii !",
  88.         "Tu ne m'aimes plus :( ? Pourtant moi je t'aime ! <3",
  89.         "C'est ta façon de me complimenter ? Si c'est le cas, merci c'est trop gentil, fallait pas !",
  90.         "Ah ben non ça marche pas ! Loupé !",
  91.         "Arrètes :( ! C'est ache qui est maso, pas moi ..."
  92.     );
  93.    
  94.     if($nickBot eq $event->{'to'}[0])
  95.     {
  96.         $conn->join($event->{'args'}[0]);
  97.         $conn->privmsg($event->{'args'}[0], $event->nick() . ' : ' . $kicks[int(rand(scalar(@kicks)))]);
  98.     }
  99. } # Fin on_kick
  100.  
  101. sub parse_command
  102. {
  103.     my ($conn, $event, $prive) = @_;
  104.     my $text = $event->{'args'}[0];
  105.     my $nick = $event->{'nick'};
  106.    
  107.     if (substr($text, 0, 1) eq '!')
  108.     {
  109.         my $commande = ($text =~ m/^!([^ ]*)/)[0];
  110.         if ($commande ne '' && ($locked ne "true" || $commande eq "unlock"))
  111.         {
  112.             my @params = grep {!/^\s*$/} split(/\s+/, substr($text, length("!$commande")));
  113.            
  114.             if (defined($commands{$commande}))
  115.             {
  116.                 if(defined($commands{$commande}{'private'}))
  117.                 {
  118.                     unless($commands{$commande}{'private'} eq $prive || $commands{$commande}{'private'} eq "false")
  119.                     {
  120.                         return "false";
  121.                     }
  122.                 }
  123.        
  124.                 if(defined($commands{$commande}{'users'}))
  125.                 {
  126.                     my $users = join(' ', $commands{$commande}{'users'});
  127.                     unless ($users =~ /(^| )$nick( |$)/) {
  128.                         $conn->privmsg($event->{'to'}[0], "Vous n'avez pas honte de me demander ça ! Seul Celestia peut me le demander !");
  129.                         return "false";
  130.                     }
  131.                 }
  132.                
  133.                 my $chan = $event->{'to'}[0];
  134.                
  135.                 if($prive eq "true")
  136.                 {
  137.                     if(defined($params[0]) && $params[0] =~ /^#\w/)
  138.                     {
  139.                         $chan = shift(@params);
  140.                     }
  141.                     else
  142.                     {
  143.                         $chan = $channel;
  144.                     }
  145.                 }
  146.                    
  147.                 $commands{$commande}{'function'}($conn, $chan, $nick, $text, @params);
  148.                 return "true";
  149.             }
  150.         }
  151.     }
  152.     return "false";
  153. } # Fin parse_command
Add Comment
Please, Sign In to add comment