public
Description:
Homepage:
Clone URL: git://github.com/typester/irssi-plugins.git
irssi-plugins / outputz.pl
100644 54 lines (44 sloc) 1.643 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
use strict;
use warnings;
 
use Glib;
use POE qw/
    Loop::Glib
    Session::Irssi;
    Component::Client::HTTPDeferred
    /;
 
use URI::Template;
use HTTP::Request::Common;
 
our %IRSSI = (
    name => 'outputz',
    authors => 'typester@cpan.org',
);
 
Irssi::settings_add_str('outputz', 'outputz_key', '');
Irssi::settings_add_str('outputz', 'outputz_uri', 'irc://{server}:{port}/{channel}');
 
POE::Session::Irssi->create(
    irssi_signals => {
        map {
            +"message $_" => sub {
                my ($kernel, $session, $args) = @_[KERNEL, SESSION, ARG1];
                my ($server, $msg, $target) = @$args;
 
                my $key = Irssi::settings_get_str('outputz_key');
                my $uri = Irssi::settings_get_str('outputz_uri');
                return unless $key and $uri;
 
                my $template = URI::Template->new($uri);
                $uri = $template->process(
                    channel => $target,
                    server => $server->{address},
                    port => $server->{port},
                    nick => $server->{nick},
                    server_tag => $server->{tag},
                );
 
                my $ua = POE::Component::Client::HTTPDeferred->new;
                my $d = $ua->request(
                    POST 'http://outputz.com/api/post',
                    [ key => $key, uri => $uri, size => length($msg), ],
                );
 
                $d->addErrback(sub { Irssi::print('outputz error: ' . shift->status_line) });
                $d->addBoth(sub { $ua->shutdown });
            },
        } qw/own_public own_private/,
    },
);