html/chansync.pl


   1 # by Uwe 'duden' Dudenhoeffer
   2 #
   3 # chansync.pl
   4 
   5 
   6 use strict;
   7 
   8 use vars qw($VERSION %IRSSI);
   9 $VERSION = '0.22';
  10 %IRSSI = (
  11     authors     => 'Uwe \'duden\' Dudenhoeffer',
  12     contact     => 'script@duden.eu.org',
  13     name        => 'chansync',
  14     description => '/who a channel and optionaly executes a command',
  15     license     => 'GPLv2',
  16     url         => '',
  17     changed     => 'Sun Feb  9 18:27:51 CET 2003',
  18     commands	=> 'chansync',
  19 );
  20 
  21 # Changelog
  22 #
  23 # 0.22
  24 #   - added "commands => chansync"
  25 #
  26 # 0.21
  27 #   - some design issues
  28 #
  29 # 0.2
  30 #   - used "silent event who" instead of stopping "print text"
  31 #
  32 # 0.1
  33 #   - first working version
  34 
  35 use Irssi 20020324;
  36 use POSIX;
  37 
  38 my(%arguments,%items);
  39 
  40 # Usage: /chansync [command]
  41 sub cmd_chansync {
  42   my($args, $server, $item) = @_;
  43   return if not ($item && $item->{type} eq "CHANNEL");
  44   my($chan) = $item->{name};
  45   $server->redirect_event('who', 1, $chan, -1, undef,
  46                          {
  47                           "event 315" => "redir chansync endwho",
  48                           "event 352" => "redir chansync who",
  49                           "" => "event empty",
  50                          });
  51   $server->send_raw("WHO $chan");
  52   $arguments{lc $chan} = $args;
  53   $items{lc $chan} = $item;
  54 }
  55 
  56 sub sig_event_block {
  57   Irssi::signal_stop();
  58 }
  59 
  60 sub sig_redir_chansync_who {
  61   Irssi::signal_emit('silent event who', @_);
  62 }
  63 
  64 sub sig_redir_chansync_endwho {
  65   my($server) = shift;
  66   my(@text) = split " ", shift;
  67   my($cmd) = $arguments{lc @text[1]};
  68   $items{lc @text[1]}->command("$cmd");
  69   delete $arguments{lc @text[1]};
  70   delete $items{lc @text[1]};
  71 }
  72 
  73 Irssi::command_bind("chansync", "cmd_chansync");
  74 Irssi::signal_add('redir chansync who', 'sig_redir_chansync_who');
  75 Irssi::signal_add('redir chansync endwho', 'sig_redir_chansync_endwho');