in reply to IRC bot in perl
This is a cut down version of the first bot I ever experimented with (with some stuff changed to protect the innocent:
This works and has been tested. The way I have done it gives you an opportunity to expand its functionality later.#!/usr/bin/perl -w use strict; use IO::Socket; my ( $server, $port, $my_nick, $channel, ) = ('irc.dal.net', 6667, 'foobot', '#hackerhost', ); my $sock = IO::Socket::INET->new(PeerAddr => $server, PeerPort => $port, Proto => "tcp", ); print $sock "USER $my_nick foo.wherever.com $server :Just another bot\ +n"; print $sock "NICK $my_nick\n"; $SIG{INT} = sub { print $sock "QUIT :Copped signint from owner\n"; close $sock; exit; }; SOCKLOOP: while (<$sock>) { if ( /^[A-Z]/ ) { if ( /^PING\s+:([\w.]+)/ ) { print $sock "PONG $1\n"; } next SOCKLOOP; #probably need to catch some other stuff but hey } else { my ($server,$action,$stuff) = /^:(\S+)\s+(\w+)\s+(.*)/; if ( $action =~ /\d+/ ) # Server response code { if ($action == 376 ) { print $sock "JOIN $channel\n"; } } } }
However having shown you that most people now will use Net::IRC or even better POE::Component::IRC because both of those will handle setting up the connection, joining the channel and answering the PINGs leaving you free to add the actual functionality.
Of course all of this moot because if you are intending to run this as a CGI then it isn't going to work because a CGI program is started as the result of a request from a browser and is intended to return some content and then terminate, it will not maintain a permanent connection for you.
/J\
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: IRC bot in perl
by Swordkeeper (Novice) on Mar 10, 2002 at 10:20 UTC | |
by gellyfish (Monsignor) on Mar 10, 2002 at 10:58 UTC |