-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Добавление параметров для отправки в telegram #31
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -73,10 +73,15 @@ | |
|
||
КонецЕсли; | ||
|
||
// При отпралке сообщений с parse_mode HTML, Markdown или MarkdownV2 | ||
// необходимо дополнительно экранировать сообщение | ||
// детали экранирования описаны https://core.telegram.org/bots/api#formatting-options | ||
ТекстСообщения = СтрЗаменить(Сообщение, Символы.ПС, "%0A"); | ||
|
||
ПараметрыСообщения = Новый Структура("chat_id, text", Адресат, ТекстСообщения); | ||
|
||
ОпределитьТипСообщения(ДополнительныеПараметры, ПараметрыСообщения); | ||
ЗаполнитьДоступныеПараметры(ДополнительныеПараметры, ПараметрыСообщения); | ||
|
||
Попытка | ||
ОтветHTTP = ВызватьМетодTelegramAPI("sendMessage", ПараметрыСообщения); | ||
|
@@ -166,13 +171,96 @@ | |
ДополнительныеПараметры.Свойство("ТипСообщения") Тогда | ||
ТипСообщения = НРег(ДополнительныеПараметры.ТипСообщения); | ||
Если ТипСообщения = "html" Тогда | ||
ПараметрыСообщения.Вставить("parse_mode", "html"); | ||
ПараметрыСообщения.Вставить("parse_mode", "HTML"); | ||
ИначеЕсли ТипСообщения = "markdown" или ТипСообщения = "md" Тогда | ||
ПараметрыСообщения.Вставить("parse_mode", "Markdown"); | ||
ИначеЕсли ТипСообщения = "markdown2" или ТипСообщения = "md2" Тогда | ||
ПараметрыСообщения.Вставить("parse_mode", "MarkdownV2"); | ||
Иначе | ||
Если ЗначениеЗаполнено(ТипСообщения) Тогда | ||
Сообщение = СтрШаблон("Передан неподдерживаемый тип сообщения %1", ТипСообщения); | ||
Сообщить(Сообщение); | ||
КонецЕсли; | ||
КонецЕсли; | ||
КонецЕсли; | ||
КонецПроцедуры | ||
|
||
|
||
// ЗаполнитьДоступныеПараметры | ||
// Метод заполнения ддоступных параметров отправки сообщения | ||
// Описаны по ссылке https://core.telegram.org/bots/api#sendmessage | ||
// | ||
// Параметры: | ||
// ДополнительныеПараметры - Структура - Набор дополнительных параметров | ||
// ПараметрыСообщения - Структура - Набор параметров сообщения | ||
// | ||
Процедура ЗаполнитьДоступныеПараметры(ДополнительныеПараметры, ПараметрыСообщения) | ||
|
||
Если НЕ ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда | ||
Возврат; | ||
КонецЕсли; | ||
|
||
// Отключает предварительный просмотр ссылок в этом сообщении | ||
Если ДополнительныеПараметры.Свойство("ОтключитьПрепросмотр") Тогда | ||
ПараметрыСообщения.Вставить("disable_web_page_preview", | ||
ВернутьПеревод(ДополнительныеПараметры.ОтключитьПрепросмотр)); | ||
КонецЕсли; | ||
|
||
// Отправляет сообщение молча. Пользователи получат уведомление без звука. | ||
Если ДополнительныеПараметры.Свойство("ОтключитьУведомление") Тогда | ||
ПараметрыСообщения.Вставить("disable_notification", | ||
ВернутьПеревод(ДополнительныеПараметры.ОтключитьУведомление)); | ||
КонецЕсли; | ||
|
||
// Защищает содержимое отправленного сообщения от пересылки и сохранения | ||
Если ДополнительныеПараметры.Свойство("ЗащищенныйКонтент") Тогда | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Неплохо бы документировать, какие вообще "дополнительные параметры" возможны. А лучше сделать не структуру, а специальный класс со всеми свойствами: ДопСвойства = Новый ПараметрыОтправки();
ДопСвойства.ЗащищенныйКонтент = Истина; There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Кстати, внутрь этого класса можно будет инкапсулировать и "вернуть перевод" и сами английские параметры фактической отправки. Получится There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. имеется ввиду сделать отдельный класс для всех Транспортов и инициализировать его на этапе использования библиотеки? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Я имел в виду, что Структура для пользователя библиотеки это черный ящик. Что в нее можно класть? Какие свойства поймет библиотека? Без залезания в код - не выяснить. Нужна или документация или класс с явными свойствами вместо Структуры. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ок. |
||
ПараметрыСообщения.Вставить("protect_content", | ||
ВернутьПеревод(ДополнительныеПараметры.ЗащищенныйКонтент)); | ||
КонецЕсли; | ||
|
||
// Если сообщение является ответом, ID исходного сообщения | ||
Если ДополнительныеПараметры.Свойство("СообщениеОснование") Тогда | ||
ПараметрыСообщения.Вставить("reply_to_message_id", ДополнительныеПараметры.СообщениеОснование); | ||
КонецЕсли; | ||
|
||
// Установить true, если сообщение должно быть отправлено, даже если указанное в reply_to_message_id не найдено | ||
Если ДополнительныеПараметры.Свойство("РазрешитьОтправкуБезОснования") Тогда | ||
ПараметрыСообщения.Вставить("allow_sending_without_reply", | ||
ВернутьПеревод(ДополнительныеПараметры.РазрешитьОтправкуБезОснования)); | ||
КонецЕсли; | ||
|
||
// Сериализованный в формате JSON список специальных сущностей, | ||
// которые появляются в тексте сообщения, который можно указать вместо parse_mode. | ||
// https://core.telegram.org/bots/api#messageentity | ||
Если ДополнительныеПараметры.Свойство("ДополнительныеСущности") Тогда | ||
ПараметрыСообщения.Вставить("entities", | ||
ДополнительныеПараметры.ДополнительныеСущности); | ||
КонецЕсли; | ||
|
||
// Дополнительные возможности интерфейса. Сериализованный объект JSON | ||
// для встроенной клавиатуры, настраиваемой клавиатуры для ответов, инструкций по | ||
// удалению клавиатуры для ответов или принудительному ответу пользователя. | ||
// https://core.telegram.org/bots/api#inlinekeyboardmarkup | ||
// https://core.telegram.org/bots/api#replykeyboardmarkup | ||
// https://core.telegram.org/bots/api#replykeyboardremove | ||
// https://core.telegram.org/bots/api#forcereply | ||
Если ДополнительныеПараметры.Свойство("ПараметрыОтвета") Тогда | ||
ПараметрыСообщения.Вставить("reply_markup", | ||
ДополнительныеПараметры.ПараметрыОтвета); | ||
КонецЕсли; | ||
|
||
КонецПроцедуры // ЗаполнитьДоступныеПараметры() | ||
|
||
|
||
Функция ВернутьПеревод(ВходящееЗначение) | ||
Если ВходящееЗначение = Истина Тогда | ||
Возврат "true"; | ||
ИначеЕсли ВходящееЗначение = Ложь Тогда | ||
Возврат "false"; | ||
Иначе | ||
Возврат "null"; | ||
КонецЕсли; | ||
КонецФункции | ||
/////////////////////////////////////////////////////////////////////////////////////////////// | ||
|
||
ПараметрыАвторизации = Неопределено; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
В PR 34 отпала необходимость экранивания.
Все параметры убраны в тело post-запроса.