use strict;
use warnings;
use vars qw($VERSION %IRSSI);
use Irssi;
$VERSION = '0.0.7';
%IRSSI = (
name => 'fnotify',
authors => 'Tyler Abair, Thorsten Leemhuis, James Shubin' .
', Serge van Ginderachter, Michael Davies',
contact => '[email protected], [email protected]',
description => 'Write notifications to a file in a consistent format.',
license => 'GNU General Public License',
url => 'http://www.leemhuis.info/files/fnotify/fnotify https://ttboj.wordpress.com/',
);
#
# README
#
# To use:
# $ cp fnotify.pl ~/.irssi/scripts/fnotify.pl
# irssi> /load perl
# irssi> /script load fnotify
# irssi> /set fnotify_ignore_hilight 0 # ignore hilights of priority 0
# irssi> /set fnotify_own on # turn on own notifications
#
#
# AUTHORS
#
# Add self to notification file
# version 0.0.7
# Michael Davies
#
# Ignore hilighted messages with priority = fnotify_ignore_hilight
# version: 0.0.6
# Tyler Abair
#
# Strip non-parsed left over codes (Bitlbee otr messages)
# version: 0.0.5
# Serge van Ginderachter
#
# Consistent output formatting by James Shubin:
# version: 0.0.4
# https://ttboj.wordpress.com/
# note: changed license back to original GPL from Thorsten Leemhuis (svg)
#
# Modified from the Thorsten Leemhuis
# version: 0.0.3
# http://www.leemhuis.info/files/fnotify/fnotify
#
# In parts based on knotify.pl 0.1.1 by Hugo Haas:
# http://larve.net/people/hugo/2005/01/knotify.pl
#
# Which is based on osd.pl 0.3.3 by Jeroen Coekaerts, Koenraad Heijlen:
# http://www.irssi.org/scripts/scripts/osd.pl
#
# Other parts based on notify.pl from Luke Macken:
# http://fedora.feedjack.org/user/918/
#
my %config;
Irssi::settings_add_int('fnotify', 'fnotify_ignore_hilight' => -1);
$config{'ignore_hilight'} = Irssi::settings_get_int('fnotify_ignore_hilight');
Irssi::settings_add_bool('fnotify', 'fnotify_own', 0);
$config{'own'} = Irssi::settings_get_bool('fnotify_own');
Irssi::signal_add(
'setup changed' => sub {
$config{'ignore_hilight'} = Irssi::settings_get_int('fnotify_ignore_hilight');
$config{'own'} = Irssi::settings_get_bool('fnotify_own');
}
);
#
# catch private messages
#
sub priv_msg {
my ($server, $msg, $nick, $address, $target) = @_;
my $msg_stripped = Irssi::strip_codes($msg);
my $network = $server->{tag};
filewrite('' . $network . ' ' . $nick . ' ' . $msg_stripped);
}
#
# catch 'hilight's
#
sub hilight {
my ($dest, $text, $stripped) = @_;
my $ihl = $config{'ignore_hilight'};
if ($dest->{level} & MSGLEVEL_HILIGHT && $dest->{hilight_priority} != $ihl) {
my $server = $dest->{server};
my $network = $server->{tag};
filewrite($network . ' ' . $dest->{target} . ' ' . $stripped);
}
}
#
# catch own messages
#
sub own_public {
my ($dest, $msg, $target) = @_;
if ($config{'own'}) {
filewrite($dest->{'nick'} . ' ' .$msg );
}
}
sub own_private {
my ($dest, $msg, $target, $orig_target) = @_;
if ($config{'own'}) {
filewrite($dest->{'nick'} . ' ' .$msg );
}
}
#
# write to file
#
sub filewrite {
my ($text) = @_;
my $fnfile = Irssi::get_irssi_dir() . "/fnotify";
if (!open(FILE, ">>", $fnfile)) {
print CLIENTCRAP "Error: cannot open $fnfile: $!";
} else {
print FILE $text . "\n";
if (!close(FILE)) {
print CLIENTCRAP "Error: cannot close $fnfile: $!";
}
}
}
#
# irssi signals
#
Irssi::signal_add_last("message private", "priv_msg");
Irssi::signal_add_last("print text", "hilight");
Irssi::signal_add_last("message own_public", "own_public");
Irssi::signal_add_last("message own_private", "own_private");