Revision: 5923
http://bioclipse.svn.sourceforge.net/bioclipse/?rev=5923&view=rev
Author: carl_masak
Date: 2008-06-25 02:48:47 -0700 (Wed, 25 Jun 2008)
Log Message:
-----------
[zarah] regularized actions into a table
Modified Paths:
--------------
bot/trunk/zarah.pl
Modified: bot/trunk/zarah.pl
===================================================================
--- bot/trunk/zarah.pl 2008-06-25 09:38:54 UTC (rev 5922)
+++ bot/trunk/zarah.pl 2008-06-25 09:48:47 UTC (rev 5923)
@@ -9,16 +9,35 @@
my $KARMA_FILENAME = 'karma';
-my $nickname = 'zarah';
+my $botname = 'zarah';
my $ircname = 'Zarah the Bioclipse bot';
my $server = 'irc.freenode.net';
-my @channels = qw(#farmbio #ki-twiki);
+my @channels = ('#farmbio', '#ki-twiki');
my $karma = load_karma();
+my $global_greeting = qr[^(hi|moin|y0|hello)(?:,? all).?$];
+my $inc_karma = qr[\b([\w]+)\+\+];
+my $dec_karma = qr[\b([\w]+)--];
+
+my @actions = (
+ [ $global_greeting, \&global_greeting ],
+ [ $inc_karma, \&inc_karma ],
+ [ $dec_karma, \&dec_karma ],
+ [ [qw<karma>], \&report_karma, 'bare' ],
+ [ qr[$RE{URI}{HTTP}], \&shorten_url ],
+ [ [qw<hi y0 moin hello>], \&say_hello ],
+ [ [qw<tell ask>], \&tell ],
+ [ [qw<messages>], \&messages ],
+ [ [qw<boo boo! restart>], \&restart ],
+ [ [qw<google>], \&google, 'bare' ],
+ [ [qw<seen>], \&seen ],
+ [ [qw<slap>], \&slap, 'bare' ],
+);
+
# We create a new PoCo-IRC object
my $irc = POE::Component::IRC->spawn(
- nick => $nickname,
+ nick => $botname,
ircname => $ircname,
server => $server,
) or die "Oh noooo! $!";
@@ -80,6 +99,7 @@
sub inc_karma {
my ($giver, $victim, $channel, $irc) = @_;
+ print "Inside INC_KARMA! $victim!\n";
my $giver_nick = ( split /!/, $giver )[0];
if ( $giver_nick eq $victim ) {
$irc->yield( privmsg => $channel =>
@@ -91,14 +111,14 @@
}
sub dec_karma {
- my ($victim) = @_;
+ my (undef, $victim, undef, undef) = @_;
--$karma->{$victim};
save_karma( $karma );
}
sub report_karma {
- my ($person, $channel) = @_;
+ my (undef, $person, $channel, undef) = @_;
if ( !exists $karma->{$person} ) {
$karma->{$person} = 0;
@@ -112,36 +132,67 @@
my $nick = ( split /!/, $who )[0];
my $channel = $where->[0];
- if ( my ($greeting) = $what =~ /^(hi|moin|hello|y0)(?:,? all)?$/ ) {
- if ( rand() < .5 ) {
- sleep( 4 + 5 * rand() );
- $irc->yield( privmsg => $channel => "$greeting, $nick" );
+ for my $action ( @actions ) {
+ my ($matcher, $code, $param) = @{$action};
+ if ( ref($matcher) eq 'Regexp' ) {
+ if ( my ($matched_text) = $what =~ /$matcher/ ) {
+ print $what, ' matched ', $matcher, ': ', $matched_text, "\n";
+ $code->($nick, $matched_text, $channel, $irc);
}
- }
+ }
+ else {
+ for my $command ( @$matcher ) {
- inc_karma($who, $1, $channel, $irc) while $what =~ /\b(\w+)\+\+/g;
- inc_karma($who, $1, $channel, $irc) while $what =~ /\+\+(\w+)\b/g;
+ my $matched_text;
+ if ( defined $param
+ && $param =~ /bare/
+ && (($matched_text) = $what =~ /^$command (.*)/) ) {
- dec_karma($1) while $what =~ /\b(\w+)--/g;
- dec_karma($1) while $what =~ /--(\w+)\b/g;
+ $code->($nick, $matched_text, $channel, $irc);
+ }
+ elsif ( ($matched_text)
+ = $what =~ /^$botname(?:[:,])? $command (.*)/ ) {
- if ( my ($person) = $what =~ /^karma (\w+)$/ ) {
- report_karma($person, $channel);
+ $code->($nick, $matched_text, $channel, $irc);
+ }
+ elsif ( ($matched_text) = $what =~ /^\@$command (.*)/ ) {
+
+ $code->($nick, $matched_text, $channel, $irc);
+ }
+ }
+ }
}
- URL_SHORTENING:
- while ( $what =~ /($RE{URI}{HTTP})/g ) {
+# if ( my ($greeting) = $what =~ /^(hi|moin|hello|y0)(?:,? all)?$/ ) {
+# if ( rand() < .5 ) {
+# sleep( 4 + 5 * rand() );
+# $irc->yield( privmsg => $channel => "$greeting, $nick" );
+# }
+# }
- my $url = $1;
- next URL_SHORTENING if length($url) < 25;
- my $tiny_url = makeashorterlink($url);
- $irc->yield( privmsg => $channel =>
- "$nick\'s link is also $tiny_url" );
- }
+# inc_karma($who, $1, $channel, $irc) while $what =~ /\b(\w+)\+\+/g;
+# inc_karma($who, $1, $channel, $irc) while $what =~ /\+\+(\w+)\b/g;
- if ( $what =~ /^$nickname.? hi\b/ || $what =~ /^hi.? $nickname\b/ ) {
- $irc->yield( privmsg => $channel => "$nick: hi" );
- }
+# dec_karma($1) while $what =~ /\b(\w+)--/g;
+# dec_karma($1) while $what =~ /--(\w+)\b/g;
+
+# if ( my ($person) = $what =~ /^karma (\w+)$/ ) {
+# report_karma($person, $channel);
+# }
+
+# URL_SHORTENING:
+# while ( $what =~ /($RE{URI}{HTTP})/g ) {
+#
+# my $url = $1;
+# next URL_SHORTENING if length($url) < 25;
+# my $tiny_url = makeashorterlink($url);
+# $irc->yield( privmsg => $channel =>
+# "$nick\'s link is also $tiny_url" );
+# }
+
+# if ( $what =~ /^$botname.? hi\b/ || $what =~ /^hi.? $botname\b/ ) {
+# $irc->yield( privmsg => $channel => "$nick: hi" );
+# }
return;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|