diff options
Diffstat (limited to '')
-rw-r--r-- | scripts/noteserve.pl | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/scripts/noteserve.pl b/scripts/noteserve.pl new file mode 100644 index 0000000..5fbb79c --- /dev/null +++ b/scripts/noteserve.pl @@ -0,0 +1,89 @@ +# by Stefan 'tommie' Tomanek +use strict; + +use vars qw($VERSION %IRSSI); +$VERSION = "2002123101"; +%IRSSI = ( + authors => "Stefan 'tommie' Tomanek", + contact => "stefan\@pico.ruhr.de", + name => "NoteServ", + description => "Utilizes NoteServ to implement a buddylist", + license => "GPLv2", + changed => "$VERSION", + sbitems => "noteserv" +); + +use Irssi; +use Irssi::Irc; +use Irssi::TextUI; + +use vars qw(%notifies); + +sub sig_event_connected ($) { + my ($server) = @_; + my $net = Irssi::settings_get_str('noteserv_ircnet'); + return unless (lc $server->{tag} eq lc $net); + my $username = Irssi::settings_get_str('noteserv_login'); + my $password = Irssi::settings_get_str('noteserv_password'); + return unless $username && $password; + $server->command('squery noteserv login '.$username.' '.$password); + $server->command('squery noteserv notify'); +} + +sub sig_server_disconnected ($) { + my ($server) = @_; + my $net = Irssi::settings_get_str('noteserv_ircnet'); + return unless (lc $server->{tag} eq lc $net); + %notifies = (); +} + +sub sig_message_irc_notice ($$$) { + my ($server, $msg, $nick, $address, $target) = @_; + return unless lc $nick eq 'noteserv'; + #print $msg; + if ($msg =~ /\d+\. Notify: (.*?)\!(.*?)\@(.*?) \(.*?\)/) { + my ($name, $user, $host, $time) = ($1,$2,$3,$4); + } elsif ($msg =~ /^(.*?) \((.*?)\) is on \(.*?\)/) { + $notifies{$1} = { mask => $2, status => 1 }; + Irssi::statusbar_items_redraw('noteserv'); + Irssi::signal_stop() if Irssi::settings_get_bool('noteserv_hide_messages'); + } elsif ($msg =~ /^(.*?) \((.*?)\) gets (in)?visible/) { + $notifies{$1} = { mask => $2, status => not defined $3 }; + Irssi::statusbar_items_redraw('noteserv'); + Irssi::signal_stop() if Irssi::settings_get_bool('noteserv_hide_messages'); + } elsif ($msg =~ /^(.*?) \((.*?)\) signs (on|off)/) { + $notifies{$1} = { mask => $2, status => ($3 eq 'on') }; + Irssi::statusbar_items_redraw('noteserv'); + Irssi::signal_stop() if Irssi::settings_get_bool('noteserv_hide_messages'); + } +} + +sub draw_bar ($$) { + my ($item, $get_size) = @_; + my $line = ""; + foreach (keys %notifies) { + if ($notifies{$_}{status}) { + $line .= '%Go%n'; + } else { + $line .= '%Ro%n'; + } + $line .= ' '.$_.' '; + } + my $format = "{sb ".$line."}"; + $item->{min_size} = $item->{max_size} = length($line); + $item->default_handler($get_size, $format, 0, 1); +} + +Irssi::signal_add('message irc notice', \&sig_message_irc_notice); +Irssi::statusbar_item_register('noteserv', 0, "draw_bar"); + +Irssi::settings_add_str('NoteServ', 'noteserv_ircnet', 'IRCNet'); +Irssi::settings_add_str('NoteServ', 'noteserv_login', ''); +Irssi::settings_add_str('NoteServ', 'noteserv_password', ''); +Irssi::settings_add_bool('NoteServ', 'noteserv_show_offline', 1); +Irssi::settings_add_bool('NoteServ', 'noteserv_hide_messages', 0); + +Irssi::signal_add('event connected', \&sig_event_connected); +Irssi::signal_add('server disconnected', \&sig_server_disconnected); + +print CLIENTCRAP '%B>>%n '.$IRSSI{name}.' '.$VERSION.' loaded'; |