package Telegram::buttons::Button_name; use strict; use warnings FATAL => 'all'; #********************************************************** =head2 new() =cut #********************************************************** sub new { my $class = shift; my ($db, $admin, $conf, $bot, $bot_db, $APILayer, $user_config) = @_; my $self = { db => $db, admin => $admin, conf => $conf, bot => $bot, bot_db => $bot_db, api => $APILayer user_config => $user_config }; bless($self, $class); return $self; } #********************************************************** =head2 enable() =cut #********************************************************** sub enable { my $self = shift; # Здесь вы определяете, ли кнопка может быть включена. # Вы в своём распоряжении имеете доступ к ответу /user/config # Например, кнопка оплат: # return $self->{user_config}{paysys_payment}; return 1; } #********************************************************** =head2 btn_name() =cut #********************************************************** sub btn_name { my $self = shift; # Также, вы имеете доступ до словаря бота. # $self->{bot}{lang}{BUTTON_NAME} return "Название кнопки"; } #********************************************************** =head2 click() =cut #********************************************************** sub click { my $self = shift; my ($attr) = @_; # Что-то делаем по нажатию кнопки. Например отправляем "Привет". $self->{bot}->send_message({ text => "Привет, напишите как к вам обращаться", }); # Возвращаем 0, так как операция завершена, и нужно показать пользователю меню. return 0; } 1; |
#Создаем текст сообщения, для кавычек обязательно тройное экранирование my $message = "Пример сообщения\n"; $message .= "<b>Жирный текст</b>\n"; $message .= "<a href=\\\"google.com\\\">Пример ссылки</a>"; #Отправляем сообщение $self->{bot}->send_message({ text => $message, parse_mode => 'HTML' }); |
my @keyboard = (); my $button = { text => "Кнопка в сообщении", callback_data => "Button_name&fn_name" }; # 1 кнопка в ряду. Telegram использует двухмерные массивы, для обозначения расположения кнопок. push (@keyboard, [$button]); $self->{bot}->send_message({ text => "Текст сообщения", reply_markup => { inline_keyboard => \@keyboard, } }); # После нажатия этой кнопки бот запустит функцию fn_name из кнопки Button_name. |
my @keyboard = (); my $button = { text => "Кнопка с ссылкой", url => "http://abills.net.ua" }; # 1 кнопка в ряду. Telegram использует двухмерные массивы, для обозначения расположения кнопок. push (@keyboard, [$button]); $self->{bot}->send_message({ text => "Текст сообщения", reply_markup => { inline_keyboard => \@keyboard, } }); |
# Внимание! Для использование многоуровневых операций необходимо понимать что это такое. # Иначе вы рискуете сделать бота полностью неработоспособным. $self->{bot}->send_message({ text => 'Вы на втором шаге какой-то операции.\nОтправьте текст или нажмите <b>Отменить</b>', reply_markup => { keyboard => [[{ text => "Отменить", }]], resize_keyboard => "true", }, parse_mode => 'HTML' }); # Запись в базу о том, что пользователь находится на втором шаге операции. # При любом его действии будет вызываться &Button_name::fn_name # Не забудьте удалить после завершения операции. $self->{bot_db}->add({ UID => $self->{bot}->{uid}, BUTTON => "Button_name", FN => "fn_name", ARGS => "дополнительные аргументы", }); # вы сможете иметь доступ к данной информации сразу же по вызову. my $info = $attr->{step_info}; $info->{FN} = "execute_with_argument"; $self->{bot_db}->change($info); |
# Пример вызова API за авторизацией USERBOT. my ($res) = $self->{api}->fetch_api({ # если это GET, то использование METHOD не обязательно. METHOD => 'GET', PATH => '/user/pi/' }); if ($res->{errno}) { $self->{bot}->send_message({ text => "Случилась ошибка, вы не авторизованы." }); return 0; } $self->{bot}->send_message({ text => "Здравствуйте, " . $res->{FIO} . "!" }); |