summaryrefslogtreecommitdiffstats
path: root/scripts/noteserve.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/noteserve.pl')
-rw-r--r--scripts/noteserve.pl89
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';