Также вы можете форматировать текст, для Telegram доступно HTML.
https://core.telegram.org/bots/api#html-style
Code Block |
---|
language | perl |
---|
title | Шаблон файлаПример простой кнопки без стейт машины |
---|
|
package Telegram::buttons::Button_name;
use strict;
use warnings FATAL => 'all';
#**********************************************************
=head2 new($Botapi)
=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 10;
}
1; |
Code Block |
---|
language | perl |
---|
title | Отправка сообщения |
---|
|
#Создаем текст сообщения, для кавычек обязательно тройное экранирование
my $message = "Пример сообщения\n";
$message .= "<b>Жирный текст</b>\n";
$message .= "<a href=\\\"google.com\\\">Пример ссылки</a>";
#Отправляем сообщение$selfсообщение
$self->{bot}->send_message({
text => $message,
parse_mode => 'HTML'
}); |
...
Code Block |
---|
language | perl |
---|
title | Отправка сообщения с встроеной кнопкой |
---|
|
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 => [[{
text =\@keyboard,
}
});
# После нажатия этой кнопки бот запустит функцию fn_name из кнопки Button_name. |
Code Block |
---|
language | perl |
---|
title | Отправка сообщения с ссылкой |
---|
|
my @keyboard = ();
my $button = {
text => "Кнопка вс сообщенииссылкой",
url => "http://abills.net.ua"
};
# 1 кнопка в ряду. Telegram использует двухмерные массивы, callback_dataдля обозначения расположения кнопок.
push (@keyboard, [$button]);
$self->{bot}->send_message({
text => "button_name&fn_name"Текст сообщения",
reply_markup => {
}]]inline_keyboard => \@keyboard,
}
}); |
Code Block |
---|
language | perl |
---|
title | Отправка сообщения с ссылкой |
---|
| $selfзаменой клавиатуры (многоуровневая операция/FSM) |
|
# Внимание! Для использование многоуровневых операций (FSM) необходимо понимать что это такое.
# Иначе вы рискуете сделать бота полностью неработоспособным.
use Encode qw/encode_utf8/;
sub click {
my $self = shift;
my ($attr) = @_;
$self->{bot}->send_message({
text => "Текст сообщения",
'Отправьте текст или нажмите <b>Отменить</b>',
reply_markup => {
inline_keyboard => [[{
text => "Отменить",
}]],
resize_keyboard => "Кнопка с ссылкой",
true",
},
});
# Запоминаем состояние.
$self->{bot_db}->add({
USER_ID => $self->{bot}->{chat_id},
BUTTON => "Button_name",
FN url => "http://abills.net.ua"
}]]"second_step",
# Можете хранить и не JSON, но базово рекомендуем так.
ARGS => '{"message":{"text":""}}',
});
# Сообщаем, что операция не закончилась, и юзеру не нужно показывать меню.
return 1;
}
sub second_step {
my $self = shift;
my ($attr); |
Code Block |
---|
language | perl |
---|
title | Отправка сообщения с заменой клавиатуры (многоуровневая операция) |
---|
|
# Внимание! Для использование многоуровневых операций необходимо полностью понимать что это такое.
# Иначе вы рискуете сделать бота полностью неработоспособным. = @_;
my $text = $attr->{message}->{text};
# Проверяем, ли пользователь не нажал кнопку "Отменить"
if ($text && encode_utf8($text) eq "Отменить") {
# Удаляем информацию со стейт машины.
$self->{bot_db}->del($self->{bot}->{chat_id});
$self->{bot}->send_message({ text => $self->{bot}{lang}{CANCELED} });
# Операция завершена
return 0;
}
return 0;
}
$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 USER_ID => $self->{bot}->{uidchat_id},
BUTTON => "Button_name",
FN => "fn_name",
ARGS => "дополнительные аргументы",
});
# вы сможете иметь доступ к данной информации сразу же по вызову.
my $info = $attr->{step_info};
$info->{FN} = "execute_with_argument";
$self->{bot_db}->change($info); |
Code Block |
---|
language | perl |
---|
title | Пример вызова через API |
---|
|
# Пример вызова 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} . "!"
}); |