-#! /usr/bin/perl -w
-use strict;
-
-use Net::IRC;
-
-sub usage ()
-{
- die <<"EOF";
-Usage: $0 server bot-name target-channel
-EOF
-}
-
-my %tasks = ();
-
-my $server = shift or usage;
-my $botname = shift or usage;
-my $channel = shift or usage;
-
-my $irc = new Net::IRC;
-
-my $conn = $irc->newconn(Nick => $botname, Server => $server)
- or die "$0: can't connect to IRC server";
-
-my $joined = 0;
-
-sub on_connect
-{
- my $self = shift;
- $self->join($channel);
-}
-
-sub on_topic
-{
- my $self = shift;
- $joined = 1;
-}
-
-sub on_public
-{
- my ($self, $event) = @_;
- my ($args) = $event->args;
- my $from = $event->from;
- $from =~ s/!.*//;
- if ($args =~ s/^$botname:?\s*//io)
- {
- my ($victim, $task, $tasksref);
- (my $command, $args) = split ' ', $args, 2;
- $command = lc $command;
- if ($command eq 'add' && $args =~ /^([^ \t]+)\s+(.*[^ \t])/)
- {
- ($victim, $task) = ($1, $2);
- $tasksref = $tasks{$victim};
- $tasksref = $tasks{$victim} = [] if not defined $tasksref;
- $$tasksref[scalar @$tasksref] = $task;
- $self->privmsg($channel, "cheers, added task for $victim:");
- $self->privmsg($channel, " $task");
- }
- elsif ($command eq 'delete' && $args =~ /^([^ \t]+)\s+(.*[^ \t])/)
- {
- ($victim, $task) = ($1, $2);
- $tasksref = $tasks{$victim};
- if (defined $tasksref && scalar grep {$_ eq $task} @$tasksref)
- {
- @$tasksref = grep {$_ ne $task} @$tasksref;
- $self->privmsg($channel, "cheers, deleted task for $victim:");
- $self->privmsg($channel, " $task");
- }
- else
- {
- $self->privmsg($channel,
- "sorry, never heard of that task for $victim:");
- $self->privmsg($channel, " $task");
- }
- }
- elsif ($command eq 'deleteall' && $args =~ /^([^ \t]+)/)
- {
- $victim = $1;
- undef $tasks{$victim};
- $self->privmsg($channel, "$victim is free! For a short time ...");
- }
- elsif ($command eq 'help')
- {
- $self->privmsg($channel, "No.");
- }
- elsif ($command eq 'list' && $args =~ /^([^ \t]+)/)
- {
- $victim = $1;
- $tasksref = $tasks{$victim};
- if (defined $tasksref && scalar @{$tasks{$victim}})
- {
- $self->privmsg($channel, "$victim is supposed to be doing:");
- }
- else
- {
- $self->privmsg($channel, "No tasks for $victim.");
- }
- foreach my $task (@{$tasks{$victim}})
- {
- $self->privmsg($channel, " $task");
- }
- }
- elsif ($command eq 'quit')
- {
- $self->privmsg($channel, "They killed $botname! The bastards ...");
- $self->quit;
- exit;
- }
- }
-}
-
-$conn->add_handler('376', \&on_connect);
-$conn->add_handler('332', \&on_topic);
-$conn->add_handler('public', \&on_public);
-
-$irc->start;