]> git.vpit.fr Git - perl/scripts/xchat.git/blob - Xchat/XPI/Events.pm
Fix Xchat::XPI::Events::{delay,filter} not passing the right arguments
[perl/scripts/xchat.git] / Xchat / XPI / Events.pm
1 package Xchat::XPI::Events;
2
3 use strict;
4 use warnings;
5
6 use Xchat qw<:all>;
7
8 use constant DEFAULT_DELAY => 1000;
9
10 our $VERSION = '0.04';
11
12 sub _delay_cb {
13  my ($cb, @args) = @{$_[0]};
14
15  $cb->(@args);
16
17  return REMOVE;
18 }
19
20 sub delay {
21  my $delay = shift;
22
23  if (defined $delay) {
24   $delay = int $delay;
25  } else {
26   $delay = DEFAULT_DELAY;
27  }
28
29  hook_timer $delay, \&_delay_cb, { data => \@_ };
30 }
31
32 sub _filter_cb {
33  my @args      = @{$_[0]};
34  my ($cb, $to) = @{$_[1]};
35
36  if ($cb->(@args)) {
37   emit_print $to, @args;
38   return EAT_ALL;
39  } else {
40   return EAT_NONE;
41  }
42 }
43
44 sub filter {
45  my $from = shift;
46
47  hook_print $from, \&_filter_cb, { data => \@_ };
48 }
49
50 use base qw<Exporter>;
51
52 our @EXPORT         = ();
53 our %EXPORT_TAGS    = (
54  'funcs'  => [ qw<delay filter>  ],
55  'consts' => [ qw<DEFAULT_DELAY> ],
56 );
57 our @EXPORT_OK      = map { @$_ } values %EXPORT_TAGS;
58 $EXPORT_TAGS{'all'} = [ @EXPORT_OK ];
59
60 1;