1# Watch script para irssi
2
3# watch script consiste en un peque�o script que interpreta
4# este novedoso sistema de notify que nos evita la tarea de
5# tener que comprobar cada X tiempo si alguien de nuestro notify
6# esta en el irc, este script solamente podra ser usado en redes
7# que lo permitan, como por ejemplo irc-hispano.
8
9use strict;
10use vars qw($VERSION %IRSSI);
11$VERSION = '1.0';
12%IRSSI = (
13 authors     => 'ThEbUtChE',
14 contact     => 'thebutche@interec.org',
15 name        => 'Watch script',
16 description => 'Uso del comando watch para irssi.',
17 license     => 'BSD',
18 url         => 'http://www.nebulosa.org',
19 changed     => 'viernes, 17 de enero de 2003, 03:19:15 CET',
20 bugs        => 'ninguno'
21);
22
23use Irssi;
24use Irssi::Irc;
25use POSIX qw(floor);
26
27
28
29sub watch_list
30{
31    my($file) = Irssi::get_irssi_dir."/watch";
32    my($nick);
33    local(*FILE);
34
35    open FILE, "<", $file;
36    while (<FILE>) {
37	    my @nick = split;
38	    Irssi::print "Notify \002@nick[0]\002";
39    }
40    close FILE;
41}
42
43sub esta_notify
44{
45	my ($ni) = @_;
46
47    my($file) = Irssi::get_irssi_dir."/watch";
48    my($nick);
49    local(*FILE);
50    open FILE, "<", $file;
51    while (<FILE>) {
52        my @nick = split;
53	    if (@nick[0] eq $ni) { return 1; }
54    }
55    close FILE;
56    return 0;
57}
58
59sub watch_add
60{
61	my ($nick) = @_;
62	my($file) = Irssi::get_irssi_dir."/watch";
63    local(*FILE);
64	if ($nick eq "") { Irssi::print "Debes decir un nick a incluir en la lista."; return;
65	} elsif (esta_notify($nick)) { Irssi::print "El nick ya esta en el notify."; return; }
66
67    open FILE, ">>", $file;
68                print FILE join("\t","$nick\n");
69    close FILE;
70    Irssi::print "El nick $nick ha sido metido en el notify";
71    Irssi::active_win()->command("quote watch +$nick");
72
73}
74
75sub watch_del
76{
77	my ($ni) = @_;
78        my($file) = Irssi::get_irssi_dir."/watch";
79        my($file2) = Irssi::get_irssi_dir."/watch2";
80	    local(*FILE);
81	    local(*FILE2);
82        if ($ni eq "") { Irssi::print "Debes decir un nick a borrar de la lista."; return;
83        } elsif (!esta_notify($ni)) { Irssi::print "El nick no esta en el notify."; return; }
84
85    open FILE2, ">", $file2;
86        print FILE2 "";
87    close FILE2;
88
89    open FILE, "<", $file;
90    open FILE2, ">>", $file2;
91    while (<FILE>) {
92        my @nick = split;
93        if (@nick[0] eq $ni) {
94	    } else {
95            print FILE2 join("\t","@nick[0]\n");
96	    }
97    }
98    close FILE;
99    close FILE2;
100
101    open FILE, ">", $file;
102	print FILE "";
103    close FILE;
104
105    open FILE, ">>", $file;
106    open FILE2, "<", $file2;
107    while (<FILE2>) {
108        my @nick = split;
109		print FILE join("\t","@nick[0]\n");
110    }
111    close FILE;
112    close FILE2;
113
114    Irssi::active_win()->command("quote watch -$ni");
115    Irssi::print "Usuario \002$ni\002 Borrado de la lista de notify";
116
117}
118
119sub watch_list_online
120{
121    Irssi::active_win()->command("quote watch l");
122}
123
124sub watch
125{
126	my ($arg) = @_;
127	my ($cmd, $nick) = split(/ /, $arg);
128	if ($cmd eq "list") {
129		watch_list();
130	} elsif ($cmd eq "add") {
131		watch_add($nick);
132	} elsif ($cmd eq "del") {
133		watch_del($nick);
134	} else {
135		watch_list_online();
136	}
137}
138
139sub mete_lista
140{
141    my($file) = Irssi::get_irssi_dir."/watch";
142    my($nick);
143    local(*FILE);
144	my $ret;
145    open FILE, "<", $file;
146    while (<FILE>) {
147        my @nick = split;
148	    $ret .= "+@nick[0],";
149    }
150	chop $ret;
151    Irssi::active_win()->command("quote watch $ret");
152    close FILE;
153}
154
155sub event_is_online
156{
157	my ($server, $data) = @_;
158	my ($me, $nick, $ident, $host) = split(/ /, $data);
159    Irssi::print "\002$nick\002 \0034[\003$ident\@$host\0034]\003 has joined to IRC";
160}
161
162sub event_is_offline
163{
164	my ($server, $data) = @_;
165	my ($me, $nick) = split(/ /, $data);
166    Irssi::print "\002$nick\002 has left IRC";
167}
168
169sub null
170{
171}
172
173Irssi::command_bind('watch', 'watch');
174Irssi::signal_add_last('event connected', 'mete_lista');
175Irssi::signal_add('event 604', 'event_is_online');
176Irssi::signal_add('event 605', 'null');
177Irssi::signal_add('event 601', 'event_is_offline');
178Irssi::signal_add('event 600', 'event_is_online');
179
180