Advertisement
richardgv

notify-znc.pl

Sep 27th, 2011
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 3.87 KB | None | 0 0
  1. #!/usr/bin/env perl
  2.  
  3. use strict;
  4. use vars qw($VERSION %IRSSI);
  5.  
  6. use Irssi;
  7. use String::ShellQuote;
  8. use HTML::Entities;
  9.  
  10. $VERSION = '1.00';
  11. %IRSSI = (
  12.     authors     => 'Richard Grenville',
  13.     contact     => 'HIDDEN@gmail.com',
  14.     name        => 'Notification',
  15.     description => 'Sound + libnotify notification' .
  16.     license     => 'GPL',
  17. );
  18.  
  19. Irssi::settings_add_str('misc', 'playback_chans', '');
  20. Irssi::signal_add_last("message public", "msg_pub") => \&msg_pub;
  21. Irssi::signal_add_last("message private", "msg_priv") => \&msg_priv;
  22. Irssi::signal_add_last("message join", "msg_join") => \&msg_join;
  23. Irssi::signal_add_last("message part", "msg_part") => \&msg_part;
  24. Irssi::signal_add_last("message quit", "msg_quit") => \&msg_quit;
  25. Irssi::signal_add_last("server connected", "clear_playback") => \&clear_playback;
  26. Irssi::signal_add_last("server disconnected", "clear_playback") => \&clear_playback;
  27. # Irssi::signal_add_last("message own_public", "msg_test") => \&msg_test;
  28.  
  29. my %exclusions = (
  30.     KottNet => [ '#teeworlds', '#kottnet', 'QUIT' ],
  31. );
  32.  
  33. sub playback_fin {
  34.     my ($tag, $tgt) = @_;
  35.     my $str = Irssi::settings_get_str('playback_chans');
  36.     $str =~ s/\s*\b\Q$tag\E\|[^ ]+//g if '*' eq $tgt;
  37.     $str =~ s/\s*\b\Q$tag\E\|\Q$tgt\E//g;
  38.     Irssi::settings_set_str('playback_chans', $str);
  39. }
  40.  
  41. sub strescape {
  42.     my ($str) = @_;
  43.     $str =~ s/^-/ -/g;
  44.     return String::ShellQuote::shell_quote($str);
  45. }
  46.  
  47. sub htmlescape {
  48.     my ($str) = @_;
  49.     return strescape(encode_entities($str));
  50. }
  51.  
  52. sub cmdexec {
  53.     my ($summary, $msg, $icon, $sound) = @_;
  54.     # system("notify-send \"--icon=/usr/share/pixmaps/pidgin/tray/hicolor/32x32/status/pidgin-tray-" . $icon . " " . htmlescape($summary) . " " . htmlescape($msg) . " &> /dev/null\"");
  55.     system("notify-send " . htmlescape($summary) . " " . htmlescape($msg));
  56.     # system("notify-send " . strescape($summary) . " " . strescape($msg) . " & ");
  57.     system("mplayer2 /usr/share/sounds/purple/" . $sound . " -really-quiet -volume 100 & ");
  58.     system("echo " . strescape($summary) . ' \|\| ' . strescape($msg) . " >> ~/messages ");
  59. }
  60.  
  61. sub chkexcl {
  62.     my ($server_rec, $msg, $nick, $tgt) = @_;
  63.     return 0 if ($msg !~ /$server_rec->{'nick'}/i && $exclusions{$server_rec->{'tag'}} && ($tgt ~~ $exclusions{$server_rec->{'tag'}} || '*' ~~ $exclusions{$server_rec->{'tag'}}));
  64.     return 0 if ($server_rec->{'nick'} eq $nick);
  65.     return 1;
  66. }
  67.  
  68. sub clear_playback {
  69.     my ($server_rec) = @_;
  70.     playback_fin($server_rec->{'tag'}, '*')
  71. }
  72.  
  73. sub msg_pub {
  74.     my ($server_rec, $msg, $nick, $addr, $tgt) = @_;
  75.     my $tag = $server_rec->{'tag'};
  76.     if ( '***' eq $nick && 'Buffer Playback...' eq $msg ) {
  77.         Irssi::print('Playback: ' . $tgt);
  78.         Irssi::settings_set_str('playback_chans',
  79.                 Irssi::settings_get_str('playback_chans') . " $tag|$tgt");
  80.     }
  81.     if ( Irssi::settings_get_str('playback_chans') =~ /\b$tag\|$tgt\b/ && '***' eq $nick && 'Playback Complete.' eq $msg ) {
  82.         Irssi::print('Playback stop: ' . $tgt);
  83.         playback_fin($tag, $tgt);
  84.     }
  85.     return if ( Irssi::settings_get_str('playback_chans') =~ /\b$tag\|$tgt\b/ );
  86.     cmdexec($nick . " on " . $tgt, $msg, "pending.png", "receive.wav") if chkexcl($server_rec, $msg, $nick, $tgt);
  87. }
  88.  
  89. sub msg_priv {
  90.     my ($server_rec, $msg, $nick, $addr) = @_;
  91.     cmdexec($nick . " - Private", $msg, "email.png", "receive.wav");
  92. }
  93.  
  94. sub msg_join {
  95.     my ($server_rec, $channel, $nick, $addr) = @_;
  96.     cmdexec($nick . " - Join " . $channel, $addr, "available.png", "login.wav") if chkexcl($server_rec, '', $nick, $channel);
  97.  
  98. }
  99.  
  100. sub msg_part {
  101.     my ($server_rec, $channel, $nick, $addr, $msg) = @_;
  102.     cmdexec($nick . " - Part " . $channel, $msg, "busy.png", "logout.wav") if chkexcl($server_rec, $msg, $nick, $channel);
  103.  
  104. }
  105.  
  106. sub msg_quit {
  107.     my ($server_rec, $nick, $addr, $msg) = @_;
  108.     cmdexec($nick . " - Quit", $msg, "offline.png", "logout.wav") if chkexcl($server_rec, $msg, $nick, 'QUIT');
  109. }
  110.  
  111. sub msg_test {
  112.     my ($server_rec, $msg, $tgt) = @_;
  113. }
  114.  
  115.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement