home *** CD-ROM | disk | FTP | other *** search
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of shell archive."
- # Contents: ircclient.pl lumberjak
- # Wrapped by hrose@eff on Wed Sep 4 16:37:53 1991
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f ircclient.pl -a "${1}" != "-c" ; then
- echo shar: Will not over-write existing file \"ircclient.pl\"
- else
- echo shar: Extracting \"ircclient.pl\" \(4692 characters\)
- sed "s/^X//" >ircclient.pl <<'END_OF_ircclient.pl'
- X#!/guest/ckd/bin.sun4/perl -- # -*-Perl-*-
- X
- Xrequire 'sys/socket.ph';
- X
- Xpackage ircclient;
- X
- X# the basics for making CLIENT connections to an irc socket
- X# *NOT* a parser, just the sending code. Parsers are easy.
- X
- Xsub bindsocket { # bind a socket
- X local($sockname,$target,$port) = @_;
- X local($sockaddr,$name,$aliases,$proto,$type,$len,
- X $thisaddr,$thataddr,$this,$that,$savfh,$hostname);
- X
- X $sockaddr = 'S n a4 x8';
- X chop($hostname = `hostname`);
- X $sockname =~ s/^([^']+)$/(caller)[$[]."'".$1/e;
- X
- X ($name, $aliases, $proto) = getprotobyname('tcp');
- X ($name, $aliases, $port) = getservbyname($port, 'tcp')
- X unless $port =~ /^\d+$/;;
- X ($name, $aliases, $type, $len, $thisaddr) = gethostbyname($hostname);
- X ($name, $aliases, $type, $len, $thataddr) = gethostbyname($target);
- X
- X $this = pack($sockaddr, &main'AF_INET, 0, $thisaddr);
- X $that = pack($sockaddr, &main'AF_INET, $port, $thataddr);
- X
- X socket($sockname, &main'PF_INET, &main'SOCK_STREAM, $proto) ||
- X die "socket $sockname: $!";
- X bind($sockname, $this) || die "bind $sockname: $!";
- X connect($sockname, $that) || die "connect $sockname: $!";
- X $savfh = select($sockname); $| = 1; select($savfh);
- X $socket = $sockname;
- X}
- X
- Xsub admin {
- X local($target) = @_;
- X
- X send($socket,"ADMIN $target\n",0);
- X}
- X
- Xsub away {
- X local($message) = @_;
- X $message = " :$message" if $message;
- X send($socket,"AWAY$message\n",0);
- X}
- X
- Xsub channel {
- X local($channel) = @_;
- X
- X send($socket,"CHANNEL $channel\n",0);
- X}
- X
- Xsub connect {
- X local($toserver, $port, $fromserver) = @_;
- X
- X send($socket, "CONNECT $toserver $port $fromserver\n",0);
- X}
- X
- X
- Xsub deoper {
- X send($socket, "DEOPER\n",0);
- X}
- X
- Xsub die {
- X send($socket, "DIE\n",0);
- X}
- X
- Xsub info {
- X local($target) = @_;
- X
- X send($socket,"INFO $target\n",0);
- X}
- X
- Xsub invite {
- X local($target,$channel) = @_;
- X send($socket, "INVITE $target $channel\n",0);
- X}
- X
- Xsub join {
- X local($channel) = @_;
- X send($socket, "JOIN $channel\n",0);
- X}
- X
- Xsub kick {
- X local($channel,$target) = @_;
- X send($socket, "KICK $channel $target\n",0);
- X}
- X
- Xsub kill {
- X local($target,$comment) = @_;
- X send($socket, "KILL $target $comment\n",0);
- X}
- X
- Xsub links {
- X local($mask) = @_;
- X send($socket, "LINKS $mask\n",0);
- X}
- X
- Xsub list {
- X local($channel) = @_;
- X send($socket, "LIST $channel\n",0);
- X}
- X
- Xsub lusers {
- X send($socket, "LUSERS\n",0);
- X}
- X
- Xsub mode {
- X local($channel,$mode) = @_;
- X send($socket, "MODE $channel $mode\n",0);
- X}
- X
- Xsub motd {
- X local($target) = @_;
- X
- X send($socket, "MOTD $target\n",0);
- X}
- X
- Xsub msg {
- X local(@strings)=@_;
- X foreach(@strings){
- X send($socket,"MSG :$_\n",0);
- X }
- X}
- X
- Xsub names {
- X local($channel) = @_;
- X send($socket, "NAMES $channel\n",0);
- X}
- X
- Xsub nick {
- X local($target)=@_;
- X send($socket, "${srcstring}NICK $target\n",0);
- X}
- X
- Xsub notice {
- X local($target,@strings)=@_;
- X foreach(@strings){
- X send($socket,"NOTICE $target :$_\n",0);
- X }
- X}
- X
- Xsub oper {
- X local($name,$passwd) = @_;
- X
- X send($socket,"OPER $name $passwd\n",0);
- X}
- X
- Xsub part {
- X local($channel)=@_;
- X send($socket, "PART $channel\n",0);
- X}
- X
- Xsub pong {
- X local($target)=@_;
- X send($socket, "PONG $target\n",0);
- X}
- X
- Xsub privmsg {
- X local($target,@strings)=@_;
- X foreach(@strings){
- X send($socket,"PRIVMSG $target :$_\n",0);
- X }
- X}
- X
- Xsub quit {
- X send($socket, "QUIT\n",0);
- X}
- X
- Xsub quote {
- X send($socket,"@_\n", 0);
- X}
- X
- Xsub squit {
- X local($target)=@_;
- X send($socket, "SQUIT $target\n",0);
- X}
- X
- Xsub stats {
- X local($target,$flags)=@_;
- X send($socket, "STATS $flags $target\n",0);
- X}
- X
- Xsub summon {
- X local($target) = @_;
- X
- X send($socket, "SUMMON $target\n",0);
- X}
- X
- Xsub time {
- X local($target) = @_;
- X
- X send($socket, "TIME $target\n",0);
- X}
- X
- Xsub topic {
- X local($string)=@_;
- X send($socket, "TOPIC $string\n",0);
- X}
- X
- Xsub trace {
- X local($target)=@_;
- X send($socket, "TRACE $target\n",0);
- X}
- X
- Xsub user {
- X local($username,$machine,$server,$fullname)=@_;
- X send($socket, "USER $username $machine $server $fullname\n",0);
- X}
- X
- Xsub users {
- X local($target)=@_;
- X send($socket, "USERS $target\n",0);
- X}
- Xsub version {
- X local($target)=@_;
- X send($socket, "VERSION $target\n",0);
- X}
- X
- Xsub voice {
- X local($target,$string)=@_;
- X send($socket,"VOICE $target :$string\n",0);
- X}
- X
- Xsub wall {
- X local($string)=@_;
- X send($socket,"WALL $string\n",0);
- X}
- X
- Xsub wallops {
- X local($string)=@_;
- X send($socket,"WALLOPS $string\n",0);
- X}
- X
- Xsub who {
- X local($mask) = @_;
- X send($socket,"WHO $mask\n",0);
- X}
- X
- Xsub whois {
- X local($mask) = @_;
- X send($socket,"WHOIS $mask\n",0);
- X}
- X
- Xsub whowas {
- X local($mask) = @_;
- X send($socket,"WHOWAS $mask\n",0);
- X}
- X
- X1; # so require works right.
- END_OF_ircclient.pl
- if test 4692 -ne `wc -c <ircclient.pl`; then
- echo shar: \"ircclient.pl\" unpacked with wrong size!
- fi
- # end of overwriting check
- fi
- if test -f lumberjak -a "${1}" != "-c" ; then
- echo shar: Will not over-write existing file \"lumberjak\"
- else
- echo shar: Extracting \"lumberjak\" \(5887 characters\)
- sed "s/^X//" >lumberjak <<'END_OF_lumberjak'
- X#!/usr/bin/perl -- # -*-Perl-*-
- X
- X# local defines
- X$OPERPASSFILE = '/other/irc/lib/robot.pw';
- X
- X# variables:
- X# $port, $server - server to connect to
- X# $servername - name of the server we're on
- X# (what the server calls itself)
- X# $nick - nickname
- X# $fullname - full name field
- X# $username - username to use with server
- X# S - socket file handle
- X# $source - source of a remote message
- X# $quitflag - set to 1 to quit
- X# $lord - my lord and liege
- X# $magicword - how do you make me leave?
- X# $eavesdrop - forward MSGs to lord
- X# $biff - REALLY COOL MODE DOOD
- X# $verbose - debugging mode
- X# $talk - like stuff a lot
- X# $greet - say hi to people
- X# %lastpriv - last msg from whoever
- X
- X# primitive support functions
- X
- Xsub Upcase { # upcase the arg & return it
- X local($string) =@_;
- X $string =~ tr/a-z/A-Z/;
- X $string;
- X}
- X
- Xsub StripLeadingColon { # strips the leading colon if any from $arg
- X local($string) = @_; # and returns the str without the :
- X $string =~ s/^://; # (written because IRC has so many :msgs)
- X $string;
- X}
- X# cmdline parsing now uses getopt.pl for ease of expansion
- X$| = 1; # allow for debug messages
- X
- Xpush(@INC,'/home/ckd/lib/perl');
- X
- Xrequire 'getopts.pl';
- Xrequire 'ircclient.pl';
- Xrequire 'ctime.pl';
- X
- Xdo Getopts('p:s:n:f:u:l:c:d:o');
- X# port, server, nick, fullname, username, lord, channel, magicword, dumpfile
- X# Booleans: o = oper, e = eavesdrop, v = verbose-debug, b = biff, t = talk,
- X# g = greet, r= revenger
- X
- X$port = $opt_p || $ENV{'IRCPORT'} || 6667;
- X$server = $opt_s || $ENV{'IRCSERVER'} || 'eff.org';
- X$nick = $opt_n || $ENV{'IRCAUTONICK'} || 'LumberJak';
- X$fullname = $opt_f || $ENV{'IRCAUTONAME'} || 'I log all night and I log all day';
- X$username = $opt_u || getlogin || (getpwuid($<))[0];
- X$lord = $opt_l || $ENV{'IRCNICK'} || $ENV{'USER'} || (getpwuid($<))[0] ||
- X die "The death of God left the angels in a strange position";
- X$channel = $opt_c || "#Twilight_Zone";
- X#$magicword = $opt_m || 'Bernstein';
- X$delay = 1;
- X$dumpfile = $opt_d || '/home/hrose/trillian/ircstuff/bot.dumplog';
- X
- X#$eavesdrop = $opt_e; $debug = $opt_v; $biff = $opt_b;
- X#$talk = $opt_t; $greet = $opt_g; $vengeance = $opt_r;
- X
- X
- Xchop($operpass = `head -1 $OPERPASSFILE`);
- X
- X
- Xopen(LOGFILE,">>$dumpfile");
- Xselect ((select (LOGFILE),$|=1)[0]);
- X&ircclient'bindsocket('S',$server,$port);
- X
- X# now we have a socket connected to the server, time to play
- X
- X# first, signon as a client
- X&ircclient'nick($nick);
- X&ircclient'user($username,$username,$server,$fullname);
- Xif ($operpass) {
- X &ircclient'oper('robotman',$operpass);
- X}
- X
- X&ircclient'join($channel);
- X
- X# next, completely ignore the message of the day
- X# while getting the server's name for itself
- X
- X munchmotd:
- X while (<S>) {
- X chop;
- X ($servername) = m/.*Your host is ([^ ,]+),.*/
- X if m/Your host is/;
- X if (( m!End of /MOTD command! ) ||
- X ( m!Message-of-today is missing! )) {
- X last munchmotd;
- X }
- X }
- X
- X$servername = $server unless $servername; # do some simple trapping for oldies
- X
- X mainloop: while (<S>) {
- X chop;
- X $_ = ":$servername $_" unless /^:/;
- X ($source, $command, $parms) = split(/ /,$_,3);
- X $source = &StripLeadingColon($source);
- X $cmd = &Upcase($command);
- X cmdcase: # treated as a switch/case type thingy
- X { # as long as you're careful about eq
- X if ($cmd eq 'CHANNEL') {&ParseChan($source,$cmd,$parms);
- X last cmdcase;};
- X if ($cmd eq 'JOIN') {&ParseChan($source,$cmd,$parms);
- X last cmdcase;};
- X if ($cmd eq 'PART') {&ParseChan($source,$cmd,$parms);
- X last cmdcase;};
- X if ($cmd eq 'INVITE') {&ParseInvite($source,$parms);
- X last cmdcase;};
- X if ($cmd eq 'MSG') {&ParseMsg($source,$parms);
- X last cmdcase;};
- X if ($cmd eq 'NOTICE') {&ParseNotice($source,$parms);
- X last cmdcase;};
- X if ($cmd eq 'PING') {&ircclient'pong($nick);
- X last cmdcase;};
- X if ($cmd eq 'PRIVMSG') {&ParsePriv($source,$parms);
- X last cmdcase;};
- X if ($cmd eq 'WALLOPS') {&ParseWallops($source,$parms);
- X last cmdcase;};
- X if ($cmd eq 'WALL') {&ParseWall($source,$parms);
- X last cmdcase;};
- X if ($cmd eq 'QUIT') {&ParseQuit($source,$parms);
- X last cmdcase;};
- X if ($cmd eq 'NAMREPLY') {&ParseNamReply($source,$parms);
- X last cmdcase;};
- X }
- X
- X } continue {
- X if ($quitflag)
- X {&Quit;}
- X}
- X
- X# nifty parse stuff
- Xsub ParseChan {
- X local ($who, $cmd, $chan)= @_;
- X# print LOGFILE "$who ${cmd}ed $chan\n";
- X print LOGFILE "$who ${cmd}ed $chan at ",&ctime(time);
- X}
- Xsub ParseInvite {
- X local ($who, $args) = @_;
- X print LOGFILE "$who invited me to $args\n";
- X &ircclient'notice($who,"Sorry, I'd rather stay here.");
- X}
- X
- Xsub ParsePriv {
- X local($src,$args) = @_;
- X
- X local($target,$message) = split(/ /,$args,2);
- X
- X $target = "me" if $target =~ /$nick/i;
- X $message = &StripLeadingColon($message);
- X
- X print LOGFILE "$src told $target \"$message\".\n";
- X
- X}
- X
- Xsub ParseNamReply {
- X local ($src,$args) = @_;
- X print LOGFILE "NAMREPLY = $args\n";
- X}
- X
- Xsub ParseNotice {
- X local ($src,$args) = @_;
- X local($target,$message) = split(/ /,$args,2);
- X
- X $target = "me" if $target =~ /$nick/i;
- X $message = &StripLeadingColon($message);
- X
- X print LOGFILE "$src NOTICEd $target \"$message\".\n";
- X}
- Xsub ParseChanMsg {
- X local($src,$target,$message) = @_;
- X print LOGFILE "$src told $target \"$message\".\n";
- X}
- X
- Xsub ParseWallops {
- X local ($src,$args) = @_;
- X print LOGFILE "$src walloped $args at ",&ctime(time);
- X}
- X
- Xsub ParseWall {
- X local ($src,$args) = @_;
- X print LOGFILE "$src WALLed $args\n";
- X}
- X
- Xsub ParseQuit {
- X local ($src,$args) = @_;
- X print LOGFILE "$src QUIT at ",&ctime(time);
- X}
- X
- Xsub Quit {
- X &ircclient'privmsg($lord,"Hey, man, I'm outa here.");
- X &ircclient'quit;
- X}
- END_OF_lumberjak
- if test 5887 -ne `wc -c <lumberjak`; then
- echo shar: \"lumberjak\" unpacked with wrong size!
- fi
- chmod +x lumberjak
- # end of overwriting check
- fi
- echo shar: End of shell archive.
- exit 0
-