summaryrefslogtreecommitdiffstats
path: root/scripts/fnotify.pl
blob: 11707ddafe6a587e274402cde284e87403c71a3a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
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 => 'fedora@leemhuis.info, serge@vanginderachter.be',
	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 <michael@the-davies.net>
#
# Ignore hilighted messages with priority = fnotify_ignore_hilight
# version: 0.0.6
# Tyler Abair <tyler.abair@gmail.com>
#
# Strip non-parsed left over codes (Bitlbee otr messages)
# version: 0.0.5
# Serge van Ginderachter <serge@vanginderachter.be>
#
# 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 <fedora@leemhuis.info>
# 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");