package App::Donburi::Web::C::JSONRPC;
use strict;
use warnings;
use parent 'App::Donburi::Web::C';
use JSON;
use App::Donburi::Util;
sub do_call {
my $self = shift;
my $method = $self->req->param('method');
my $params = JSON->new->utf8->decode($self->req->param('params') || {});
my $text = $params->{text};
my $channel = $params->{channel};
unless (
$method eq 'channels'
|| defined $text && defined $channel && grep /^$method$/,
qw( privmsg notice )
)
{
#TODO Handle error?
return [
500,
[ 'Content-Type' => 'application/json' ],
[ JSON->new->utf8->encode({ message => 'internal server error', code => 000 }) ]
];
}
my $body;
if( $method eq 'channels' ) {
$body = store();
} else {
my $mode = uc $method;
my @line = split /[\r\n]+/, $text;
for my $msg ( @line ) {
send_chan($channel, $mode, $channel, $msg);
}
$body = 'ok';
}
return [
200,
[ 'Content-Type' => 'application/json' ],
[ JSON->new->utf8->encode( { json_rpc => "2.0", result => $body } ) ]
];
}
1;