aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGuillermo Ramos2019-06-25 12:19:59 +0200
committerGuillermo Ramos2019-06-25 12:44:04 +0200
commit16cd42e6fbfbf6fff06fd50926ac374b771e3f97 (patch)
tree8427a9f4afceacaffb4cd5594524678ccbf7060a /lib
parentd7f4ee6f0f86f462c26a27eb8d267abd592f01af (diff)
downloadtgutils-16cd42e6fbfbf6fff06fd50926ac374b771e3f97.tar.gz
Move Telegram comm logic to TgLib::Api
Diffstat (limited to 'lib')
-rw-r--r--lib/TgLib/Api.pm55
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;