# todo: grap topic changes use strict; use vars qw($VERSION %IRSSI); use Irssi; $VERSION = '0.0.1'; %IRSSI = ( authors => 'richo', contact => 'richo@psych0tik.net', name => 'bnotify', description => 'Write notifications based on who\'s talking to you, also handle some window management and tmux alerts', url => 'http://natalya.psych0tik.net/~richo/bnotify', license => 'GNU General Public License', changed => '$Date: 2011-06-21 21:51:30 +1000 (Tue, 21 Jun 2011) $' ); # Originally based on fnotify.pl 0.0.3 by Thorsten Leemhuis # fedora@leemhuis.info # 'http://www.leemhuis.info/files/fnotify/', # #-------------------------------------------------------------------- # In parts based on knotify.pl 0.1.1 by Hugo Haas # http://larve.net/people/hugo/2005/01/knotify.pl # which is based on osd.pl 0.3.3 by Jeroen Coekaerts, Koenraad Heijlen # http://www.irssi.org/scripts/scripts/osd.pl # # Other parts based on notify.pl from Luke Macken # http://fedora.feedjack.org/user/918/ # #-------------------------------------------------------------------- # TODO # Add settings for which networks to beep on my @alert_nets = (); sub bnotify_init { Irssi::settings_add_str('bnotify', 'bnotify_alert_nets', ''); @alert_nets = split(/ /, Irssi::settings_get_str('bnotify_alert_nets')); } #-------------------------------------------------------------------- # Private message parsing #-------------------------------------------------------------------- # TODO # Test to see if the privmsg went to a status window, and is from bitlbee in # which case send it to it's own window sub priv_msg { my ($server,$msg,$nick,$address,$target) = @_; # Does this expose issues if someone includes regexp chars in their server # tag? if (grep(/^$server->{tag}$/, @alert_nets)) { Irssi::command('beep'); } filewrite($server->{tag}.":".$nick." private"); #Irssi::settings_set_str('autocreate_query_level', 'DCCMSGS MSGS'); } #-------------------------------------------------------------------- # Private msg windowing #-------------------------------------------------------------------- sub priv_msg_winhook { my ($server,$msg,$nick,$address,$target) = @_; if (grep($server->{tag}, @alert_nets)) { Irssi::settings_set_str('autocreate_query_level', 'DCCMSGS MSGS'); } } #-------------------------------------------------------------------- # Printing hilight's #-------------------------------------------------------------------- sub hilight { my ($dest, $text, $stripped) = @_; if ($dest->{level} & MSGLEVEL_HILIGHT) { filewrite($dest->{server}->{tag}.":".$dest->{target}. " " .$stripped ); } } #-------------------------------------------------------------------- # Handle Arguments #-------------------------------------------------------------------- sub cmd_add { my $net = shift; if (not grep($net, @alert_nets)) { push @alert_nets, $net; Irssi::active_win->print("Added $net to alert networks."); } else { Irssi::active_win->print("$net already configured to alert."); } } sub cmd_del { my $net = shift; my @valid; my $idx = 0; while ($idx <= $#alert_nets) { if (lc($alert_nets[$idx]) eq lc($net)) { push @valid, $alert_nets[$idx]; } $idx++; } if ($#alert_nets != $#valid) { Irssi::active_win->print("Removed $net from alert networks."); } else { Irssi::active_win->print("$net didn't exist in alert networks."); } @alert_nets = @valid; } #-------------------------------------------------------------------- # The actual printing #-------------------------------------------------------------------- sub filewrite { my ($text) = @_; open(FILE, '>' .Irssi::get_irssi_dir() . '/fnotify'); print FILE $text . "\n"; close (FILE); } #-------------------------------------------------------------------- # Irssi::signal_add_last / Irssi::command_bind #-------------------------------------------------------------------- Irssi::signal_add_first("message private", "priv_msg_winhook"); Irssi::signal_add_last("message private", "priv_msg"); Irssi::signal_add_last("print text", "hilight"); Irssi::command_bind('bnotify add', \&cmd_add); Irssi::command_bind('bnotify del', \&cmd_del); bnotify_init(); #- end