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