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