Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env perl
- use strict;
- use vars qw($VERSION %IRSSI);
- use Irssi;
- use String::ShellQuote;
- use HTML::Entities;
- $VERSION = '1.00';
- %IRSSI = (
- authors => 'Richard Grenville',
- contact => 'HIDDEN@gmail.com',
- name => 'Notification',
- description => 'Sound + libnotify notification' .
- license => 'GPL',
- );
- Irssi::settings_add_str('misc', 'playback_chans', '');
- Irssi::signal_add_last("message public", "msg_pub") => \&msg_pub;
- Irssi::signal_add_last("message private", "msg_priv") => \&msg_priv;
- Irssi::signal_add_last("message join", "msg_join") => \&msg_join;
- Irssi::signal_add_last("message part", "msg_part") => \&msg_part;
- Irssi::signal_add_last("message quit", "msg_quit") => \&msg_quit;
- Irssi::signal_add_last("server connected", "clear_playback") => \&clear_playback;
- Irssi::signal_add_last("server disconnected", "clear_playback") => \&clear_playback;
- # Irssi::signal_add_last("message own_public", "msg_test") => \&msg_test;
- my %exclusions = (
- KottNet => [ '#teeworlds', '#kottnet', 'QUIT' ],
- );
- sub playback_fin {
- my ($tag, $tgt) = @_;
- my $str = Irssi::settings_get_str('playback_chans');
- $str =~ s/\s*\b\Q$tag\E\|[^ ]+//g if '*' eq $tgt;
- $str =~ s/\s*\b\Q$tag\E\|\Q$tgt\E//g;
- Irssi::settings_set_str('playback_chans', $str);
- }
- sub strescape {
- my ($str) = @_;
- $str =~ s/^-/ -/g;
- return String::ShellQuote::shell_quote($str);
- }
- sub htmlescape {
- my ($str) = @_;
- return strescape(encode_entities($str));
- }
- sub cmdexec {
- my ($summary, $msg, $icon, $sound) = @_;
- # system("notify-send \"--icon=/usr/share/pixmaps/pidgin/tray/hicolor/32x32/status/pidgin-tray-" . $icon . " " . htmlescape($summary) . " " . htmlescape($msg) . " &> /dev/null\"");
- system("notify-send " . htmlescape($summary) . " " . htmlescape($msg));
- # system("notify-send " . strescape($summary) . " " . strescape($msg) . " & ");
- system("mplayer2 /usr/share/sounds/purple/" . $sound . " -really-quiet -volume 100 & ");
- system("echo " . strescape($summary) . ' \|\| ' . strescape($msg) . " >> ~/messages ");
- }
- sub chkexcl {
- my ($server_rec, $msg, $nick, $tgt) = @_;
- return 0 if ($msg !~ /$server_rec->{'nick'}/i && $exclusions{$server_rec->{'tag'}} && ($tgt ~~ $exclusions{$server_rec->{'tag'}} || '*' ~~ $exclusions{$server_rec->{'tag'}}));
- return 0 if ($server_rec->{'nick'} eq $nick);
- return 1;
- }
- sub clear_playback {
- my ($server_rec) = @_;
- playback_fin($server_rec->{'tag'}, '*')
- }
- sub msg_pub {
- my ($server_rec, $msg, $nick, $addr, $tgt) = @_;
- my $tag = $server_rec->{'tag'};
- if ( '***' eq $nick && 'Buffer Playback...' eq $msg ) {
- Irssi::print('Playback: ' . $tgt);
- Irssi::settings_set_str('playback_chans',
- Irssi::settings_get_str('playback_chans') . " $tag|$tgt");
- }
- if ( Irssi::settings_get_str('playback_chans') =~ /\b$tag\|$tgt\b/ && '***' eq $nick && 'Playback Complete.' eq $msg ) {
- Irssi::print('Playback stop: ' . $tgt);
- playback_fin($tag, $tgt);
- }
- return if ( Irssi::settings_get_str('playback_chans') =~ /\b$tag\|$tgt\b/ );
- cmdexec($nick . " on " . $tgt, $msg, "pending.png", "receive.wav") if chkexcl($server_rec, $msg, $nick, $tgt);
- }
- sub msg_priv {
- my ($server_rec, $msg, $nick, $addr) = @_;
- cmdexec($nick . " - Private", $msg, "email.png", "receive.wav");
- }
- sub msg_join {
- my ($server_rec, $channel, $nick, $addr) = @_;
- cmdexec($nick . " - Join " . $channel, $addr, "available.png", "login.wav") if chkexcl($server_rec, '', $nick, $channel);
- }
- sub msg_part {
- my ($server_rec, $channel, $nick, $addr, $msg) = @_;
- cmdexec($nick . " - Part " . $channel, $msg, "busy.png", "logout.wav") if chkexcl($server_rec, $msg, $nick, $channel);
- }
- sub msg_quit {
- my ($server_rec, $nick, $addr, $msg) = @_;
- cmdexec($nick . " - Quit", $msg, "offline.png", "logout.wav") if chkexcl($server_rec, $msg, $nick, 'QUIT');
- }
- sub msg_test {
- my ($server_rec, $msg, $tgt) = @_;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement