Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Apr 16th, 2012  |  syntax: None  |  size: 2.11 KB  |  hits: 15  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #!/usr/bin/perl
  2. use strict;use warnings;use IO::Socket;sub fail($$){my$what=shift;
  3. my$why=shift;return"[$0] $what: $why\n";}sub timestamp($){my$mode=
  4. shift;my($seconds,$minutes,$hours,$day,$month,$year)=localtime(time
  5. );$year+=1900;my%modes=('time'=>sub{return sprintf("[%02d:%02d:%02d
  6. ] ",$hours,$minutes,$seconds)},'date'=>sub{return sprintf("[%04d.%0
  7. 2d.%02d] ",$year,$month,$day)},'all'=>sub{return sprintf("[%02d.%02
  8. d.%04d %02d:%02d:%02d] ",$day,$month,$year,$hours,$minutes,$seconds
  9. )});$modes{$mode}->()if(defined$modes{$mode});}sub readrc($){my
  10. $rcpath=shift;my%settings=();open my$rc,"<$rcpath"or die fail$rcpath,
  11. $!;foreach(<$rc>){$settings{$1}=$2 if(m/^\s*?(\w+?)\s*?=\s*?\"([^"]
  12. *?)\"(?:\s|#|$)/);}close$rc;return%settings;}sub init(\%){my$rcref=
  13. shift;my%rc=%$rcref;my$server=IO::Socket::INET->new(PeerAddr=>$rc{'
  14. host'},PeerPort=>$rc{'port'},proto=>getprotobyname('tcp'))or die
  15. fail"unable to connect to $rc{'host'}:$rc{'port'}",$!;print$server
  16. "NICK $rc{'nickname'}\n";print$server "USER $rc{'uname'} * * :$rc{'
  17. ident'}\n";print$server "NOTICE $rc{'owner'} online ($rc{'nickname'
  18. } at $rc{'host'}:$rc{'port'})\n";while(<$server>){parse($server,$_,
  19. \%rc);}close$server if$server;}sub parse($$\%){my$socket=shift;my
  20. $incoming=shift;my$rcref=shift;my%rc=%$rcref;$incoming=~s/([\x00-
  21. \x1f])//g;if($incoming=~m/^\:?([^:]+?)\:(.*?)(?:\s?$)/){my($header,
  22. $message)=($1,$2||"null");print timestamp('time')."DEBUG: |$header|
  23. $message|\n";my%patterns=('^ping'=>sub{sendpong($socket,$rc{'host'}
  24. )},'privmsg'=>sub{handlemessage$socket,$header,$message,\%rc});
  25. foreach my$key(keys%patterns){$patterns{$key}->()if($header=~qr/
  26. $key/i);}}}sub sendpong($$){my$socket=shift;my$host=shift;print"[
  27. $host] ping? ";print$socket "pong $host\n";print"pong!\n";}sub
  28. handlemessage($$$\%){my$socket=shift;my$header=shift;my$message=
  29. shift;my$rcref=shift;my%rc=%$rcref;if($header=~m/^([^!]+?)!([^@]+?)
  30. @([^\s]+?)\sPRIVMSG\s([^\s]+?)\b/i){my($from,$ident,$host,$to)=($1,
  31. $2,$3,$4);if($message=~m/^\.(\w+?)(\s+?|$)(.*?)$/i){my$cmd=$1;my
  32. $arg=$2||"DEBUG: null";print"DEBUG: |$cmd|$arg|\n";}}}sub
  33. handlecommand($$){my$cmd=shift;my$arg=shift;}1;