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