Рабочий perl-код с комметариями ниже. Описывать считаю бессмысленным, если ты перловик.
use WWW::Telegram::BotAPI;
my $api = WWW::Telegram::BotAPI->new(
"token" => "mytoken",
);
$api->agent->can("inactivity_timeout");
$api->agent->inactivity_timeout (45);
my $me = $api->getMe or die;
my ($offset, $updates) = 0;
sub command_start {
my $chat = shift;
$api->sendMessage({
"chat_id" => $chat->{"chat_id"},
"text" => "Вы прислали команду /start",
});
}
while (1) {
$updates = $api->getUpdates({
timeout => 30,
$offset ? (offset => $offset) : ()
});
unless ($updates and ref $updates eq "HASH" and $updates->{"ok"}) {
warn "Ошибка!!!";
next;
}
for my $u (@{$updates->{"result"}}) {
$offset = $u->{"update_id"} + 1 if $u->{"update_id"} >= $offset;
if (my $text = $u->{"callback_query"}{"data"}) {
# коллбэк
print "[callback] $text\n";
my $chat = $u->{"callback_query"}{"message"}{"chat"};
}
if (my $text = $u->{"message"}{"text"}) {
if ($text =~ m/^\/[^_]./) {
# команда
print "[command] $text\n";
my $chat = $u->{"message"}{"chat"};
# пример вызова нужного метода, в зависимости от прихода
if ($text =~ /start/) {
command_start($chat);
}
}
else {
# текст
print "[answer] $text\n";
my $chat = $u->{"message"}{"chat"};
}
}
}
}