#!/usr/local/bin/perl -w use strict; use Net::IRC; $| = 1; # setup and configure my $logfile = "/home/yourdir/data/scriber.log"; my $mychannel = '#channel-name'; $SIG{INT} = sub {print("caught SIGINT. exiting.");exit}; END { lprint("*** scriber shutting down.\n"); } my $irc = Net::IRC->new; my $conn = $irc->newconn(Nick => 'scriber', Server => 'irc.somewhere.com', Port => 6667, Ircname => 'Scriber Jaqueramaphan', Username => 'scriber@yourhost.com', ); $conn->add_handler('376', \&on_connect); $conn->add_handler('msg', \&on_msg); $conn->add_handler('public', \&on_public); $conn->add_handler('join', \&on_join); $conn->add_handler('part', \&on_part); $conn->add_handler('caction', \&on_action); $conn->add_handler('nick', \&on_nick); $conn->add_global_handler(433, \&on_nick_taken); $irc->start; ##### IRC event handlers sub on_connect { my $self = shift; lprint("*** scriber starting up."); $self->join($mychannel); } sub on_nick { my ($self, $event) = @_; lprint($event->nick . " is now known as " . $event->nick); } sub on_nick_taken { my $self = shift; $self->nick(substr($self->nick, -1) . substr($self->nick, 0, 8)); } sub on_part { my ($self, $event) = @_; my ($channel) = ($event->to)[0]; lprint($event->nick . " has left channel $channel"); } sub on_join { my ($self, $event) = @_; my ($channel) = ($event->to)[0]; lprint($event->nick."(".$event->userhost.") has joined channel $channel"); if ($event->userhost =~ /\@.*?(goodhost\.com|somewhere\.net|majcher\.com)/) { $self->mode($mychannel, "+o", $event->nick); } } sub on_msg { my ($self, $event) = @_; my ($nick) = $event->nick; my ($arg) = ($event->args); lprint( "*$nick* $arg"); } sub on_public { my ($self, $event) = @_; my @to = $event->to; my ($nick, $mynick) = ($event->nick, $self->nick); my ($arg) = ($event->args); lprint("<$nick> $arg"); } sub on_action { my ($self, $event) = @_; my ($nick, @args) = ($event->nick, $event->args); lprint("* $nick @args"); } sub lprint { my $message = shift; open(LOG,">>$logfile") || die "can't write to log file $logfile: $!"; print LOG time."\t$message\n"; close(LOG); }