use Irssi;
use strict;
use warnings;
use Text::ParseWords;
use vars qw($VERSION %IRSSI);
$VERSION = "2.2";
%IRSSI = (
authors => "Liam Hopkins",
contact => "we.hopkins\@gmail.com",
commands => "betterlist",
name => "betterlist",
description => "/betterlist ",
license => "GPL",
modules => "Text::ParseWords",
);
my $running = 0; # flag to prevent overlapping requests.
my $match;
sub call_list_cmd {
my ($server, $args) = @_;
# set a one-time redirect for handling responses of a given command
$server->redirect_event('list', 1, '', -1, 'redir my_timeout',
{
'event 321' => 'redir my_liststart',
'event 322' => 'redir my_list',
'event 323' => 'redir my_listend',
'' => 'event empty',
});
# execute the command
$server->send_raw("LIST");
}
sub event_list {
my ($server, $data) = @_;
my $channel = ( split / +/, $data)[1];
Irssi::active_win->print("Matched $channel", MSGLEVEL_CLIENTCRAP) if ($channel =~ /$match/)
}
sub event_liststart {
Irssi::active_win->print("Looking for $match", MSGLEVEL_CLIENTCRAP);
}
sub event_listend {
Irssi::active_win->print("End of /LIST", MSGLEVEL_CLIENTCRAP);
$running = 0;
}
sub event_timeout {
my ($server, $data) = @_;
Irssi::print("timeout", MSGLEVEL_CLIENTCRAP);
$running = 0;
}
sub betterlist {
my ($data, $server, $witem) = @_;
if ($running) {
Irssi::active_win->print("please try again shortly.", MSGLEVEL_CLIENTCRAP);
return;
}
$running = 1;
my (@args) = "ewords(' ', 1, $data);
($match) = "ewords(' ', 0, shift(@args));
call_list_cmd($server);
Irssi::signal_stop();
}
Irssi::signal_add_first ({
'redir my_liststart' => 'event_liststart',
'redir my_list' => 'event_list',
'redir my_listend' => 'event_listend',
});
Irssi::command_bind("betterlist", \&betterlist);
# vim:set ts=2 sw=2 expandtab: