renames, add irssi scripts
[shutils.git] / dotfiles / irssi / scripts / notify.pl
1 ##
2 ## Put me in ~/.irssi/scripts, and then execute the following in irssi:
3 ##
4 ## /load perl
5 ## /script load notify
6 ##
7
8 use strict;
9 use Irssi;
10 use vars qw($VERSION %IRSSI);
11 use HTML::Entities;
12
13 $VERSION = "0.01";
14 %IRSSI = (
15 authors => 'Luke Macken, Paul W. Frields',
16 contact => 'lewk@csh.rit.edu, stickster@gmail.com',
17 name => 'notify.pl',
18 description => 'Use libnotify to alert user to hilighted messages',
19 license => 'GNU General Public License',
20 url => 'http://lewk.org/log/code/irssi-notify',
21 );
22
23 Irssi::settings_add_str('notify', 'notify_icon', 'gtk-dialog-info');
24 Irssi::settings_add_str('notify', 'notify_time', '5000');
25
26 sub sanitize {
27 my ($text) = @_;
28 encode_entities($text);
29 return $text;
30 }
31
32 sub notify {
33 my ($server, $summary, $message) = @_;
34
35 # Make the message entity-safe
36 $summary = sanitize($summary);
37 $message = sanitize($message);
38
39 my $cmd = "EXEC - notify-send" .
40 " -i " . Irssi::settings_get_str('notify_icon') .
41 " -t " . Irssi::settings_get_str('notify_time') .
42 " -- '" . $summary . "'" .
43 " '" . $message . "'";
44
45 $server->command($cmd);
46 }
47
48 sub print_text_notify {
49 my ($dest, $text, $stripped) = @_;
50 my $server = $dest->{server};
51
52 return if (!$server || !($dest->{level} & MSGLEVEL_HILIGHT));
53 my $sender = $stripped;
54 $sender =~ s/^\<.([^\>]+)\>.+/\1/ ;
55 $stripped =~ s/^\<.[^\>]+\>.// ;
56 my $summary = $dest->{target} . ": " . $sender;
57 notify($server, $summary, $stripped);
58 }
59
60 sub message_private_notify {
61 my ($server, $msg, $nick, $address) = @_;
62
63 return if (!$server);
64 notify($server, "Private message from ".$nick, $msg);
65 }
66
67 sub dcc_request_notify {
68 my ($dcc, $sendaddr) = @_;
69 my $server = $dcc->{server};
70
71 return if (!$dcc);
72 notify($server, "DCC ".$dcc->{type}." request", $dcc->{nick});
73 }
74
75 Irssi::signal_add('print text', 'print_text_notify');
76 Irssi::signal_add('message private', 'message_private_notify');
77 Irssi::signal_add('dcc request', 'dcc_request_notify');