package Hubot::Adapter::Helper;
use Moose;
use namespace::autoclean;
extends 'Hubot::Adapter';
use AnyEvent;
use Encode 'decode_utf8';
use Hubot::Message;
has 'robot' => (
is => 'ro',
isa => 'Hubot::Robot',
);
has 'cv' => (
is => 'ro',
lazy_build => 1,
);
has 'interval' => (
is => 'rw',
default => 1,
);
sub BUILD {
my $self = shift;
$self->robot->{sent} = [];
$self->robot->{receive} = [];
}
sub _build_cv { AnyEvent->condvar }
sub close { shift->cv->send }
sub send {
my ( $self, $user, @strings ) = @_;
push @{ $self->robot->{sent} }, \@strings;
$self->cv->end;
}
sub reply {
my ( $self, $user, @strings ) = @_;
@strings = map { $user->{name} . ": $_" } @strings;
$self->send( $user, @strings );
}
sub run {
my $self = shift;
local $| = 1;
my $w = AnyEvent->timer(
after => 0,
interval => $self->interval,
cb => sub {
my $text = shift @{ $self->robot->{receive} };
return $self->cv->end unless $text;
$self->cv->begin;
my $user = $self->userForId(
1,
{
name => 'helper',
room => 'helper'
}
);
$self->receive(
new Hubot::TextMessage(
{
user => $user,
text => $text,
}
)
);
}
);
$self->cv->begin;
$self->cv->recv;
# callback?
}
__PACKAGE__->meta->make_immutable;
1;