diff options
-rw-r--r-- | bnotify/bnotify.pl | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/bnotify/bnotify.pl b/bnotify/bnotify.pl new file mode 100644 index 0000000..eaff6f8 --- /dev/null +++ b/bnotify/bnotify.pl @@ -0,0 +1,136 @@ +# 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 |