http://qs1969.pair.com?node_id=368976

   1: #!/usr/bin/perl -w
   2: 
   3: use Net::IRC;
   4: use strict;
   5: 
   6: my $irc = new Net::IRC;
   7: 
   8: my $conn = $irc->newconn(	
   9: 
  10: 	Server 		=> shift || 'irc.azzurra.org',		
  11: 	Port		=> shift || '6667', 	
  12: 	Nick		=> 'Iper_',	
  13: 	Ircname		=> 'Only an IRC roBOT',	
  14: 	Username	=> 'Mr. Iper');
  15: 	$conn->{channel} = shift || '#prova' or die "Error: connection refused\n";
  16: 
  17: 
  18: my @sentences = (
  19: 
  20: "Grembiule nero e fiocco azzurro: per un bambino milanista il 1^ giorno di scuola è un trauma!",
  21: "Sai cos'è che odio nel primo giorno di scuola? Che è troppo lontano dall'ultimo!",
  22: "Ho l'orologio che va avanti di 3 ore, ma non sono mai riuscito ad aggiustarlo. Così da New York mi sono trasferito a Los Angeles!",
  23: "Se la conoscenza non viene messa in azione è peggio dell'ignoranza...",
  24: "Il significato di un uomo non va ricercato in ciò che egli raggiunge, ma in ciò che vorrebbe raggiungere.",
  25: "Possiamo essere grandi solo quanto le nostre occasioni.",
  26: "Carpe diem!",
  27: "I giovani cercano l'impossibile e , generazione dopo generazione, lo conseguono.",
  28: "Quando il gioco si fa duro, i duri entrano in gioco.",
  29: "Ci sono due modi per uscire da questo edificio, il primo e' passando per il tetto usando il pontile, il secondo e' in stato di arresto ... corri comunque un rischio sta a te decidere",
  30: "Ti ho mostrato la soglia, ora tocca a te attraversarla...",
  31: "What God taxi driver! - Che Dio t'assista!",
  32: "I tre anni più duri per Totti? Quelli della prima elementare!",
  33: "Totti: la fidanzata gli ha regalato un libro. Lui lo apre e legge: <<Sommario... Piacere, so' Francesco!>>.",
  34: "L'unico modo per non far conoscere agli altri i propri limiti, è di non oltrepassarli mai.",
  35: "Niente è impossibile: l'impossibile è solo poco più difficile del possibile...",
  36: "E' ricercando l'impossibile che l'uomo ha sempre realizzato il possibile. Coloro che si sono saggiamente limitati a cio' che appariva loro come possibile, non hanno mai avanzato di un solo passo. - Michail Bakunin (1814 - 1876)",
  37: "But make me the pleasure! - Ma fammi il piacere!",
  38: "But of what! - Ma di che!",
  39: "I'm tired dead! - Sono stanco morto!",
  40: "L'eterno mistero del mondo è la sua comprensibilità",
  41: "Cogito ergo sum",
  42: "Ratio in medio stat",
  43: "Fatti non foste viver come bruti ma per seguir virtute e canoscenza",
  44: "How many people can read hex if only you and dead people can read it?",
  45: "There are only 10 types of peole in the world, those who understand binary and those who don't",
  46: "If one fights me than he will become zero, I am the only one in a croud of zeroes. - AndreaGeddon (9000 (sta troppo avanti!) - +infinito (ed oltre!) )",
  47: 
  48: );
  49: 
  50: 
  51: sub on_connect {
  52: 
  53: 	my $conn = shift;
  54: 	$conn->join($conn->{channel});
  55: 	$conn->privmsg($conn->{channel}, "Ladies and gentlemen, giulia_1 is here!");
  56: 	$conn->{connected} = 1;
  57: }
  58: 
  59: sub on_join {
  60: 
  61: 	my ($conn, $event) = @_;
  62: 	my $nick = $event->{nick};
  63: 	if($nick ne 'Iper_') {($conn->privmsg($conn->{channel}, "Hi, $nick!"));}
  64: }	
  65: 
  66: sub on_invite {
  67: 
  68: 	my ($conn, $event) = @_;
  69: 	my $nick = $event->{nick};
  70: 	$conn->privmsg($nick, "$nick, tnx for inviting me on your chan but now I'm very busy. See you later.");
  71: }
  72: 
  73: sub on_part {
  74: 
  75: 	my ($conn, $event) = @_;
  76: 	my $nick = $event->{nick};
  77: 	$conn->privmsg($conn->{channel}, "Bye, $nick!");
  78: }
  79: 
  80:    
  81: 
  82: sub on_ping {
  83: 
  84:     my ($conn, $event) = @_;
  85:     my $nick = $event->nick;
  86:     $conn->ctcp_reply($nick, join (' ', ($event->args)));
  87:     print "*** CTCP PING request from $nick received\n";
  88: }
  89: 
  90: sub on_version {
  91: 
  92:     my ($conn, $event) = @_;
  93:     my $nick = $event->nick;
  94:     my $reply = "VERSION Binary os, Binary client, Athlon xp +infinite";
  95:     $conn->ctcp_reply($nick, $reply);
  96:     print "*** CTCP VERSION request from $nick received\n";
  97: }
  98: 
  99: sub on_source {
 100: 
 101:     my ($conn, $event) = @_;
 102:     my $nick = $event->nick;
 103:     my $reply = "SOURCE ./query giulia_1 (or giulia_0 if she's away) or type !source";
 104:     $conn->ctcp_reply($nick, $reply);
 105:     print "*** CTCP SOURCE request from $nick received\n";
 106: }
 107: 
 108: sub on_dcc {
 109: 
 110:     my ($conn, $event) = @_;
 111:     my $nick = $event->nick;
 112:     my $reply = "DCC no dcc, tnx";
 113:     $conn->ctcp_reply($nick, $reply);
 114:     $conn->privmsg($nick, "Hi $nick, I'm sorry but my client doesn't support dcc.");
 115:     print "*** CTCP DCC request from $nick received\n";
 116: }
 117: 
 118: sub on_msg {
 119: 
 120: 	my ($conn, $event) = @_;
 121:         my $nick = $event->nick;
 122:         my $text = $event->{args}[0];
 123: 
 124:  	if ($text =~ /^\!(.+)$/) {
 125: 
 126:         if ($text =~ "source") {
 127:         $conn->privmsg($nick, "$nick, I'm sending to you my source code ");
 128:         $conn->schedule(10, \&Net::IRC::Connection::new_send, $nick, "iper.pl");
 129:         print "*** Iper's source has been requested by $nick \n";}
 130: 
 131:         if ($text =~ "hi"){
 132:         $conn->privmsg($nick, "Hi, $nick!");}
 133: 
 134:         if ($text =~ "quote"){
 135:         $conn->privmsg($nick, &rand());}
 136:       
 137:         if ($text =~ "about"){
 138:         $conn->privmsg($nick, "Internet Perl Eccentric Robot, a Giulia's project ==> Mr. Iper r0x! published on perlmonks.org");}
 139: 
 140:         if ($text =~ "help") {
 141: 
 142:         $conn->privmsg($nick, "My commands are: !hi, !quote, !about !source, !zena (on msg) or !quote, !go_out and !source (on public). I also say <<Hi, nick!>> or <<Bye, nick!>> (on join & on part), I reply to ping, version, source, dcc and invite. If the language  used is bad I say <<Nick, moderate the language plese>> and before exiting I says <<Bye...>> to the channel ...I'm a great bot :)");}
 143: 
 144:         if ($text =~ "zena") {
 145: 
 146:         $conn->privmsg($conn->{channel}, chr(3)."12,4FORZA".chr(3)."4,12GENOA"); }
 147: 
 148:                               }        
 149: 
 150:         else {
 151: 
 152:         $conn->privmsg($event->{nick}, "Don't anybody /msg IperBot in this way, contact giulia_1 for more informations or type !help for the  commands' list");
 153: 
 154:             }
 155: 
 156: }
 157: 
 158: sub on_public {
 159: 
 160: 	my ($conn, $event) = @_;
 161:         my $nick = $event->nick;
 162:         my $text = $event->{args}[0];
 163:         my ($arg) = ($event->args);
 164: 
 165:  	if ($text =~ /^\!(.+)$/) {
 166: 
 167:         if ($text =~ "source") {
 168:         $conn->privmsg($nick, "$nick, I'm sending to you my source code ");
 169:         $conn->schedule(10, \&Net::IRC::Connection::new_send, $nick, "iper.pl");
 170:         print "*** Iper's source has been requested by $nick \n";}
 171: 
 172:         if ($text =~ "go_out") {
 173: 	$conn->privmsg($conn->{channel}, "Ok, $nick, I'm only a bot");
 174: 	$conn->quit("Quitted by $nick");
 175: 	exit 0;}
 176: 
 177:         if ($text =~ "quote"){
 178:         $conn->privmsg($conn->{channel}, &rand());}
 179: 
 180:                              }
 181: 
 182:         if ($arg =~ /azz/i){
 183: 	
 184:         $conn->privmsg($conn->{channel}, "$nick, moderate the language please!");
 185: 
 186:         }
 187: 
 188:    
 189:               }
 190: 
 191: sub on_leaving {
 192: 
 193: 	my ($conn, $event) = @_;
 194: 	$conn->privmsg($conn->{channel}, "Bye all! => RETN => C3 => 11000011");
 195: }        
 196: 
 197: sub rand {
 198: 
 199:        return $sentences[ rand scalar @sentences ];
 200: }
 201: 
 202: 
 203: $conn->add_handler('join', \&on_join);
 204: $conn->add_handler('invite', \&on_invite);
 205: $conn->add_handler('part', \&on_part);
 206: $conn->add_handler('cping', \&on_ping);
 207: $conn->add_handler('cversion', \&on_version);
 208: $conn->add_handler('csource', \&on_source);
 209: $conn->add_handler('cdcc', \&on_dcc);
 210: $conn->add_handler('msg',    \&on_msg);
 211: $conn->add_handler('public', \&on_public);
 212: $conn->add_handler('leaving', \&on_leaving);
 213: $conn->add_handler('376', \&on_connect);
 214: 
 215: $irc->start();
 216: 
 217: 
 218: ## iper ==> Internet Perl Eccentric Robot coded by giulia_1\0 (giulia@olografix.org)