Adding methods to retrieve updates.
Currently the bot is a logger of every text sent in a room, this is going to change in the future.
This commit is contained in:
parent
825cd884fc
commit
7199804655
|
@ -5,9 +5,25 @@ use v5.30.0;
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
|
||||||
|
use Data::Dumper;
|
||||||
use JSON;
|
use JSON;
|
||||||
|
|
||||||
use DoctorAgustin::Config;
|
use DoctorAgustin::Config;
|
||||||
|
use DoctorAgustin::Telegram;
|
||||||
|
use DoctorAgustin::Logger;
|
||||||
|
|
||||||
my $config = DoctorAgustin::Config->new;
|
my $config = DoctorAgustin::Config->new;
|
||||||
say $config->telegram_token;
|
my $logger = DoctorAgustin::Logger->new;
|
||||||
|
my $telegram =
|
||||||
|
DoctorAgustin::Telegram->new( telegram_token => $config->telegram_token );
|
||||||
|
while (1) {
|
||||||
|
my $updates = $telegram->get_updates;
|
||||||
|
for my $update ($updates->@*) {
|
||||||
|
if (exists $update->{message}{text}) {
|
||||||
|
my $message = $update->{message}{text};
|
||||||
|
my $user_id = $update->{message}{from}{id};
|
||||||
|
my $username = $update->{message}{from}{username};
|
||||||
|
$logger->log_info("'$message' received from $username:$user_id");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package DoctorAgustin::Logger;
|
package DoctorAgustin::Logger;
|
||||||
|
|
||||||
|
use Carp;
|
||||||
use Sys::Syslog;
|
use Sys::Syslog;
|
||||||
|
|
||||||
sub new {
|
sub new {
|
||||||
|
@ -12,8 +13,9 @@ sub _log {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $level = shift;
|
my $level = shift;
|
||||||
my $message = shift;
|
my $message = shift;
|
||||||
|
my $critical = shift;
|
||||||
|
|
||||||
openlog ('Doctor Agustín: ', 'perror', 'user');
|
openlog ('Doctor Agustín: ', $critical ? '': 'perror', 'user');
|
||||||
syslog ($level, $message);
|
syslog ($level, $message);
|
||||||
closelog();
|
closelog();
|
||||||
}
|
}
|
||||||
|
@ -23,6 +25,13 @@ sub log_error {
|
||||||
$self->_log (LOG_ERR, shift);
|
$self->_log (LOG_ERR, shift);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub log_critical {
|
||||||
|
my $self = shift;
|
||||||
|
my $error = shift;
|
||||||
|
$self->_log (LOG_ERR, $error, 1);
|
||||||
|
confess $error;
|
||||||
|
}
|
||||||
|
|
||||||
sub log_info {
|
sub log_info {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
$self->_log (LOG_INFO, shift);
|
$self->_log (LOG_INFO, shift);
|
||||||
|
|
|
@ -5,9 +5,14 @@ use v5.30.0;
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
|
||||||
use Types::Standard qw/Str/;
|
use Types::Standard qw/Str Int Ref/;
|
||||||
use Params::ValidationCompiler qw(validation_for);
|
use Params::ValidationCompiler qw(validation_for);
|
||||||
|
|
||||||
|
use Mojo::UserAgent;
|
||||||
|
use JSON;
|
||||||
|
|
||||||
|
use DoctorAgustin::Logger;
|
||||||
|
|
||||||
{
|
{
|
||||||
my $validator = validation_for(
|
my $validator = validation_for(
|
||||||
params => {
|
params => {
|
||||||
|
@ -25,6 +30,99 @@ use Params::ValidationCompiler qw(validation_for);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub _logger {
|
||||||
|
my $self = shift;
|
||||||
|
if (!defined $self->{logger}) {
|
||||||
|
$self->{logger} = DoctorAgustin::Logger->new;
|
||||||
|
}
|
||||||
|
return $self->{logger};
|
||||||
|
}
|
||||||
|
|
||||||
|
sub _user_agent {
|
||||||
|
my $self = shift;
|
||||||
|
if ( !defined $self->{user_agent} ) {
|
||||||
|
$self->{user_agent} = Mojo::UserAgent->new;
|
||||||
|
}
|
||||||
|
return $self->{user_agent};
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
my $validator = validation_for(
|
||||||
|
params => {
|
||||||
|
method => { type => Str },
|
||||||
|
body => { type => Ref },
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
sub _request {
|
||||||
|
my $self = shift;
|
||||||
|
my %params = $validator->(@_);
|
||||||
|
my $method = $params{method};
|
||||||
|
my $body = $params{body};
|
||||||
|
my $ua = $self->_user_agent;
|
||||||
|
my $logger = $self->_logger;
|
||||||
|
my $url = $self->_generate_url( method => $method );
|
||||||
|
my $response = decode_json(
|
||||||
|
$ua->post( $url => {} => json => $body )->result->body );
|
||||||
|
unless ($response->{ok}) {
|
||||||
|
$logger->log_critical($response->{description});
|
||||||
|
}
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub get_updates {
|
||||||
|
my $self = shift;
|
||||||
|
my $last_update = $self->_last_update;
|
||||||
|
if ( !defined $last_update ) {
|
||||||
|
$last_update = 0;
|
||||||
|
}
|
||||||
|
my $response = $self->_request(
|
||||||
|
method => q/getUpdates/,
|
||||||
|
body => { offset => $last_update + 1 }
|
||||||
|
);
|
||||||
|
if ( scalar $response->{result}->@* ) {
|
||||||
|
$last_update = $response->{result}[-1]{update_id};
|
||||||
|
$self->_set_last_update($last_update);
|
||||||
|
}
|
||||||
|
return $response->{result};
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
my $validator = validation_for(
|
||||||
|
params => {
|
||||||
|
method => { type => Str },
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
sub _generate_url {
|
||||||
|
my $self = shift;
|
||||||
|
my %params = $validator->(@_);
|
||||||
|
my $method = $params{method};
|
||||||
|
my $telegram_token = $self->_telegram_token;
|
||||||
|
my $url = qq(https://api.telegram.org/bot$telegram_token/$method);
|
||||||
|
return $url;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
my $validator = validation_for( params => [ { type => Int } ] );
|
||||||
|
|
||||||
|
sub _set_last_update {
|
||||||
|
my $self = shift;
|
||||||
|
my ($last_update) = $validator->(@_);
|
||||||
|
$self->{last_update} = $last_update;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub _last_update {
|
||||||
|
my $self = shift;
|
||||||
|
if ( !exists $self->{last_update} ) {
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
return $self->{last_update};
|
||||||
|
}
|
||||||
|
|
||||||
sub _telegram_token {
|
sub _telegram_token {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
return $self->{telegram_token};
|
return $self->{telegram_token};
|
||||||
|
|
Loading…
Reference in New Issue