diff options
author | Guillermo Ramos | 2019-06-25 12:19:59 +0200 |
---|---|---|
committer | Guillermo Ramos | 2019-06-25 12:44:04 +0200 |
commit | 16cd42e6fbfbf6fff06fd50926ac374b771e3f97 (patch) | |
tree | 8427a9f4afceacaffb4cd5594524678ccbf7060a /lib | |
parent | d7f4ee6f0f86f462c26a27eb8d267abd592f01af (diff) | |
download | tgutils-16cd42e6fbfbf6fff06fd50926ac374b771e3f97.tar.gz |
Move Telegram comm logic to TgLib::Api
Diffstat (limited to 'lib')
-rw-r--r-- | lib/TgLib/Api.pm | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/lib/TgLib/Api.pm b/lib/TgLib/Api.pm new file mode 100644 index 0000000..3bbdde6 --- /dev/null +++ b/lib/TgLib/Api.pm @@ -0,0 +1,55 @@ +package TgLib::Api; + +use JSON qw<encode_json decode_json>; +use HTTP::Request; +use LWP::UserAgent; +use Data::Dumper; + +use parent 'Exporter'; +our @EXPORT = qw<new>; + +sub new { + my ($class, $token, $logger) = @_; + return bless { uri => "https://api.telegram.org/bot$token", + ua => LWP::UserAgent->new, + logger => $logger }, $class; +} + +sub get_updates { + my ($self, $timeout, $offset) = @_; + my $logger = $self->{'logger'}; + my $uri = "$self->{'uri'}/getUpdates?timeout=$timeout"; + $uri = $uri . "&offset=$offset" if $offset; + + my $req = HTTP::Request->new("GET", $uri); + $logger->debug("Request: " . Dumper($req)); + + my $resp = $self->{'ua'}->request($req); + $logger->debug("Response: " . Dumper($resp)); + + if ($resp->is_error()) { + die $resp->message; + } else { + return decode_json($resp->content)->{'result'}; + } +} + +sub send_message { + my ($self, $chat_id, $text) = @_; + my $logger = $self->{'logger'}; + my $uri = "$self->{'uri'}/sendMessage"; + my $content = encode_json {'chat_id' => $chat_id, 'text' => $text}; + + my $req = HTTP::Request->new("POST", $uri, + ["Content-Type", "application/json"], $content); + $logger->info("Sending to $chat_id:\n====\n$text\n====\n"); + $logger->debug(sprintf "Request:\n%s\n", Dumper($req)); + + my $resp = $self->{'ua'}->request($req); + $logger->debug(sprintf "Response:\n%s\n", Dumper($resp)); + if ($resp->is_error()) { + die $resp->message; + } +} + +1; |