1#!/usr/local/bin/perl
2
3# ignore_log.pl (ignore_log -- send [some] ignored events to log), Version 0.1
4# this script is dedicated to bormann@IRCNET.
5#
6# Copyleft (>) 2004 jsn <jason@nichego.net>
7#
8# This program is free software; you can redistribute it and/or modify
9# it under the terms of the GNU General Public License as published by
10# the Free Software Foundation; either version 2 of the License, or
11# (at your option) any later version.
12#
13# This program is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16# GNU General Public License for more details.
17#
18# The complete text of the GNU General Public License can be found
19# on the World Wide Web: <URL:http://www.gnu.org/licenses/gpl.html>
20
21use strict;
22use Irssi;
23
24use	POSIX qw/strftime/ ;
25
26use vars qw($VERSION %IRSSI);
27
28$VERSION = "0.1";
29%IRSSI = (
30	authors		=> 'Dmitry "jsn" Kim',
31	contact		=> 'jason@nichego.net',
32	name		=> 'ignore_log',
33	description	=> 'script to log ignored messages',
34	license		=> 'GPL',
35	url		=> 'http://',
36	changed		=> '2004-09-10',
37	changes		=> 'initial version'
38);
39
40Irssi::print("*****\n* $IRSSI{name} $VERSION loaded.");
41Irssi::print("*  use `/set ignore_log <filename>' to configure") ;
42Irssi::print("*  use `/set ignore_log none' to disable ignore logging") ;
43
44sub	handle_public {
45	my	($srv, $msg, $nick, $addr, $tgt) = @_;
46	return if lc(Irssi::settings_get_str("ignore_log")) eq "none" ;
47	write_log($nick, $msg, $tgt)
48	    if $srv->ignore_check($nick, $addr, $tgt, $msg, MSGLEVEL_PUBLIC) ;
49}
50
51sub	handle_private {
52	my	($srv, $msg, $nick, $addr) = @_;
53	return if lc(Irssi::settings_get_str("ignore_log")) eq "none" ;
54	write_log($nick, $msg)
55	    if $srv->ignore_check($nick, $addr, "", $msg, MSGLEVEL_MSGS) ;
56}
57
58sub	write_log {
59    	my	($nick, $msg, $tgt) = @_ ;
60	$tgt ||= "->" ;
61	my	($lfile) = glob Irssi::settings_get_str("ignore_log");
62	if (open(LF, ">>", $lfile)) {
63	    my	$ts = strftime("%D %H:%M", localtime()) ;
64	    print LF "[$ts] $tgt $nick $msg\n" ;
65	    close LF ;
66	} else {
67	    Irssi::active_win()->print("can't open file `$lfile': $!") ;
68	}
69}
70
71Irssi::settings_add_str("ignore_log", "ignore_log", "~/.irssi/ignore.log");
72
73Irssi::print("*  logging ignored users to `" .
74	Irssi::settings_get_str("ignore_log") . "'") ;
75
76Irssi::signal_add_first("message public", "handle_public") ;
77Irssi::signal_add_first("message private", "handle_private") ;
78
79