package BettIrssi; @ISA = qw(Exporter); @EXPORT_OK = qw(_bcb _bcs); use strict; delete($INC{'BettIrssiEvent.pm'}); use BettIrssiEvent; use Irssi; require Exporter; sub _cmd_callback { my $callback = shift; my ($cmdline, $server, $witem) = @_; my $data; $data = BettIrssiEvent->new( SIGNAL => undef, SERVER => $server, EVWITEM => $witem, MESSAGE => $cmdline, SENDER => undef, ); $callback->($data); } sub _sig_callback { my $callback = shift; my $signal = shift; my ($server, $msg, $nick, $userhost, $channel) = @_; my $data; my $evwitem; # Change all attributes into Irssi classes $evwitem = $server->window_item_find($channel); if (defined($nick)) { foreach ($evwitem->nicks()) { if ($_->{'nick'} eq $nick) { $nick = $_; last; } } } else { $nick = $channel->{'ownnick'}; } $data = BettIrssiEvent->new( SIGNAL => $signal, SERVER => $server, EVWITEM => $evwitem, MESSAGE => $msg, SENDER => $nick, ); $callback->($data); } sub _bcb { my $cmd = shift; my $callback = shift; return ($cmd, sub { _cmd_callback($callback, @_) }); } sub _bcs { my $signal = lc(shift); my $callback = shift; if ($signal eq 'message public') { # messages to a channel by someone not us. return ($signal, sub { _sig_callback($callback, $signal, @_) }); } elsif ($signal eq 'message own_public') { # messages to a channel by us. return ($signal, sub { _sig_callback($callback, $signal, $_[0], $_[1], undef, undef, $_[2]) }); } elsif ($signal eq 'message private') { # messages in a query by someone not us return ($signal, sub { _sig_callback($callback, $signal, $_[0], $_[1], $_[2], $_[3], $_[2]) }); } elsif ($signal eq 'message own_private') { # messages in a query by us return ($signal, sub { _sig_callback($callback, $signal, $_[0], $_[1], undef, undef, $_[2]) }); } elsif ($signal eq 'message irc action') { return ($signal, sub { _sig_callback($callback, $signal, @_) }); } elsif ($signal eq 'message irc own_action') { return ($signal, sub { _sig_callback($callback, $signal, $_[0], $_[1], undef, undef, $_[2]) }); } else { Irssi::print("%mBettIrssi:%n %RUnknown signal%n %y$signal%n%R. Please bug the BettIrssi author about this."); return ($signal, sub { Irssi::print("%mBettIrssi:%n %RSignal not handled") }); } } 1;