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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
|
# Watch script para irssi
# watch script consiste en un peque�o script que interpreta
# este novedoso sistema de notify que nos evita la tarea de
# tener que comprobar cada X tiempo si alguien de nuestro notify
# esta en el irc, este script solamente podra ser usado en redes
# que lo permitan, como por ejemplo irc-hispano.
use strict;
use vars qw($VERSION %IRSSI);
$VERSION = '1.0';
%IRSSI = (
authors => 'ThEbUtChE',
contact => 'thebutche@interec.org',
name => 'Watch script',
description => 'Uso del comando watch para irssi.',
license => 'BSD',
url => 'http://www.nebulosa.org',
changed => 'viernes, 17 de enero de 2003, 03:19:15 CET',
bugs => 'ninguno'
);
use Irssi;
use Irssi::Irc;
use POSIX qw(floor);
sub watch_list
{
my($file) = Irssi::get_irssi_dir."/watch";
my($nick);
local(*FILE);
open FILE, "<", $file;
while (<FILE>) {
my @nick = split;
Irssi::print "Notify \002@nick[0]\002";
}
close FILE;
}
sub esta_notify
{
my ($ni) = @_;
my($file) = Irssi::get_irssi_dir."/watch";
my($nick);
local(*FILE);
open FILE, "<", $file;
while (<FILE>) {
my @nick = split;
if (@nick[0] eq $ni) { return 1; }
}
close FILE;
return 0;
}
sub watch_add
{
my ($nick) = @_;
my($file) = Irssi::get_irssi_dir."/watch";
local(*FILE);
if ($nick eq "") { Irssi::print "Debes decir un nick a incluir en la lista."; return;
} elsif (esta_notify($nick)) { Irssi::print "El nick ya esta en el notify."; return; }
open FILE, ">>", $file;
print FILE join("\t","$nick\n");
close FILE;
Irssi::print "El nick $nick ha sido metido en el notify";
Irssi::active_win()->command("quote watch +$nick");
}
sub watch_del
{
my ($ni) = @_;
my($file) = Irssi::get_irssi_dir."/watch";
my($file2) = Irssi::get_irssi_dir."/watch2";
local(*FILE);
local(*FILE2);
if ($ni eq "") { Irssi::print "Debes decir un nick a borrar de la lista."; return;
} elsif (!esta_notify($ni)) { Irssi::print "El nick no esta en el notify."; return; }
open FILE2, ">", $file2;
print FILE2 "";
close FILE2;
open FILE, "<", $file;
open FILE2, ">>", $file2;
while (<FILE>) {
my @nick = split;
if (@nick[0] eq $ni) {
} else {
print FILE2 join("\t","@nick[0]\n");
}
}
close FILE;
close FILE2;
open FILE, ">", $file;
print FILE "";
close FILE;
open FILE, ">>", $file;
open FILE2, "<", $file2;
while (<FILE2>) {
my @nick = split;
print FILE join("\t","@nick[0]\n");
}
close FILE;
close FILE2;
Irssi::active_win()->command("quote watch -$ni");
Irssi::print "Usuario \002$ni\002 Borrado de la lista de notify";
}
sub watch_list_online
{
Irssi::active_win()->command("quote watch l");
}
sub watch
{
my ($arg) = @_;
my ($cmd, $nick) = split(/ /, $arg);
if ($cmd eq "list") {
watch_list();
} elsif ($cmd eq "add") {
watch_add($nick);
} elsif ($cmd eq "del") {
watch_del($nick);
} else {
watch_list_online();
}
}
sub mete_lista
{
my($file) = Irssi::get_irssi_dir."/watch";
my($nick);
local(*FILE);
my $ret;
open FILE, "<", $file;
while (<FILE>) {
my @nick = split;
$ret .= "+@nick[0],";
}
chop $ret;
Irssi::active_win()->command("quote watch $ret");
close FILE;
}
sub event_is_online
{
my ($server, $data) = @_;
my ($me, $nick, $ident, $host) = split(/ /, $data);
Irssi::print "\002$nick\002 \0034[\003$ident\@$host\0034]\003 has joined to IRC";
}
sub event_is_offline
{
my ($server, $data) = @_;
my ($me, $nick) = split(/ /, $data);
Irssi::print "\002$nick\002 has left IRC";
}
sub null
{
}
Irssi::command_bind('watch', 'watch');
Irssi::signal_add_last('event connected', 'mete_lista');
Irssi::signal_add('event 604', 'event_is_online');
Irssi::signal_add('event 605', 'null');
Irssi::signal_add('event 601', 'event_is_offline');
Irssi::signal_add('event 600', 'event_is_online');
|