use strict; use vars qw($VERSION %IRSSI); use Irssi; $VERSION = '1.05'; # 1.00 # Initial release. # 1.01 # Fixed regex matches for single tokens # 1.02 # Added own_public sub to catch own messages. # 1.03 # Added !karma querying ability # 1.04 # Irssi::get_irssi_dir() works. # 1.05 # Filtering through lc() to avoid havoc! %IRSSI = ( authors => 'Jared Burke', contact => 'Jared@anal0g.org', name => 'Karma', description => 'Karma', license => 'Public Domain', url => 'http://anal0g.org/dev', changed => 'Tue Jun 27 09:14 CET 2008', ); my $directory = Irssi::get_irssi_dir() . "/karma"; mkdir $directory or die "$directory: $!" unless -d $directory; sub public { my ($server, $msg, $nick, $address, $target) = @_; if ($msg =~ /^\w+\+\+$/s) { $msg =~ s/\+\+$//; karma_add($msg); $server->command('msg ' . $target . ' ' . $msg . '\'s new karma is ' . query($msg)); return 0; } elsif ($msg =~ /^\w+--$/s) { $msg =~ s/--$//; karma_rem($msg); $server->command('msg ' . $target . ' ' . $msg . '\'s new karma is ' . query($msg)); return 0; } elsif ($msg =~ /^\!karma \w+$/s) { $msg =~ s/^\!karma //; $server->command('msg ' . $target . ' ' . $msg . '\'s karma is ' . query($msg)); } } sub own_public { my ($server, $msg, $target) = @_; if ($msg =~ /^\w+\+\+$/s) { $msg =~ s/\+\+$//; karma_add($msg); $server->command('msg ' . $target . ' ' . $msg . '\'s new karma is ' . query($msg)); return 0; } elsif ($msg =~ /^\w+--$/) { $msg =~ s/--$//; karma_rem($msg); $server->command('msg ' . $target . ' ' . $msg . '\'s new karma is ' . query($msg)); return 0; } elsif ($msg =~ /^!karma \w+$/s) { $msg =~s/^\!karma //; $server->command('msg ' . $target . ' ' . $msg. '\'s karma is ' . query($msg)); } } sub karma_add { my $target = @_[0]; my $old_karma = query($target); my $new_karma = $old_karma + 1; update($target,$new_karma); } sub karma_rem { my $target = @_[0]; my $old_karma = query($target); my $new_karma = $old_karma - 1; update($target,$new_karma); } sub query { my $target = $directory . "/" . lc(@_[0]); if (-e $target) { open FILE, $target or die "$target: $!"; my $value = ; close(FILE); return $value; } else { return 0; } } sub update { my ($target, $value) = @_; $target = lc($target); # This is lazy. `touch $directory/$target` unless -e "$directory/$target"; # This is even lazier. `echo $value > $directory/$target`; } Irssi::signal_add("message public", "public"); Irssi::signal_add("message own_public", "own_public");