diff options
| author | Alexander Færøy | 2014-05-31 13:10:46 +0200 | 
|---|---|---|
| committer | Alexander Færøy | 2014-05-31 13:10:46 +0200 | 
| commit | 2d0759e6ca5767b48bcc85bf38c2c43d5f0b63b1 (patch) | |
| tree | 1c5e6d817c88e67b46e216a50e0aef5428bf63df /scripts/noteserve.pl | |
| parent | 2d080422d79d1fd49d6c5528593ccaaff9bfc583 (diff) | |
| download | scripts.irssi.org-2d0759e6ca5767b48bcc85bf38c2c43d5f0b63b1.tar.bz2 | |
Import scripts from scripts.irssi.org
Diffstat (limited to 'scripts/noteserve.pl')
| -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'; | 
