From a110d46fa5a0c9695385a8d7b3cdb0aac8d81b40 Mon Sep 17 00:00:00 2001 From: 8095tores <42864922+8095tores@users.noreply.github.com> Date: Mon, 25 Apr 2022 10:11:56 +0300 Subject: [PATCH 1/4] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B0=D1=87?= =?UTF-8?q?=D0=B8=20=D0=B4=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD=D0=B8=D1=82=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D1=8B=D1=85=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC?= =?UTF-8?q?=D0=B5=D1=82=D1=80=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\265\320\263\321\200\320\260\320\274.os" | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git "a/src/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\321\213/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\320\242\320\265\320\273\320\265\320\263\321\200\320\260\320\274.os" "b/src/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\321\213/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\320\242\320\265\320\273\320\265\320\263\321\200\320\260\320\274.os" index c425a2e..79fa550 100644 --- "a/src/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\321\213/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\320\242\320\265\320\273\320\265\320\263\321\200\320\260\320\274.os" +++ "b/src/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\321\213/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\320\242\320\265\320\273\320\265\320\263\321\200\320\260\320\274.os" @@ -77,6 +77,7 @@ ПараметрыСообщения = Новый Структура("chat_id, text", Адресат, ТекстСообщения); ОпределитьТипСообщения(ДополнительныеПараметры, ПараметрыСообщения); + ЗаполнитьДоступныеПараметры(ДополнительныеПараметры, ПараметрыСообщения); Попытка ОтветHTTP = ВызватьМетодTelegramAPI("sendMessage", ПараметрыСообщения); @@ -173,6 +174,82 @@ КонецЕсли; КонецПроцедуры + +// ЗаполнитьДоступныеПараметры +// Метод заполнения ддоступных параметров отправки сообщения +// Описаны по ссылке https://core.telegram.org/bots/api#sendmessage +// +// Параметры: +// ДополнительныеПараметры - Структура - Набор дополнительных параметров +// ПараметрыСообщения - Структура - Набор параметров сообщения +// +Процедура ЗаполнитьДоступныеПараметры(ДополнительныеПараметры, ПараметрыСообщения) + + Если НЕ ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда + Возврат; + КонецЕсли; + + // Отключает предварительный просмотр ссылок в этом сообщении + Если ДополнительныеПараметры.Свойство("ОтключитьПрепросмотр") Тогда + ПараметрыСообщения.Вставить("disable_web_page_preview", + ВернутьПеревод(ДополнительныеПараметры.ОтключитьПрепросмотр)); + КонецЕсли; + + // Отправляет сообщение молча. Пользователи получат уведомление без звука. + Если ДополнительныеПараметры.Свойство("ОтключитьУведомление") Тогда + ПараметрыСообщения.Вставить("disable_notification", + ВернутьПеревод(ДополнительныеПараметры.ОтключитьУведомление)); + КонецЕсли; + + // Защищает содержимое отправленного сообщения от пересылки и сохранения + Если ДополнительныеПараметры.Свойство("ЗащищенныйКонтент") Тогда + ПараметрыСообщения.Вставить("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"; + КонецЕсли; +КонецФункции /////////////////////////////////////////////////////////////////////////////////////////////// ПараметрыАвторизации = Неопределено; From 83de86d449aa5bb57ce672d02a5fab2462fc7377 Mon Sep 17 00:00:00 2001 From: 8095tores <42864922+8095tores@users.noreply.github.com> Date: Mon, 25 Apr 2022 10:26:31 +0300 Subject: [PATCH 2/4] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA?= =?UTF-8?q?=D0=B0=20MarkdownV2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...265\320\273\320\265\320\263\321\200\320\260\320\274.os" | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git "a/src/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\321\213/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\320\242\320\265\320\273\320\265\320\263\321\200\320\260\320\274.os" "b/src/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\321\213/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\320\242\320\265\320\273\320\265\320\263\321\200\320\260\320\274.os" index 79fa550..990acc5 100644 --- "a/src/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\321\213/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\320\242\320\265\320\273\320\265\320\263\321\200\320\260\320\274.os" +++ "b/src/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\321\213/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\320\242\320\265\320\273\320\265\320\263\321\200\320\260\320\274.os" @@ -167,9 +167,14 @@ ДополнительныеПараметры.Свойство("ТипСообщения") Тогда ТипСообщения = НРег(ДополнительныеПараметры.ТипСообщения); Если ТипСообщения = "html" Тогда - ПараметрыСообщения.Вставить("parse_mode", "html"); + ПараметрыСообщения.Вставить("parse_mode", "HTML"); ИначеЕсли ТипСообщения = "markdown" или ТипСообщения = "md" Тогда ПараметрыСообщения.Вставить("parse_mode", "Markdown"); + ИначеЕсли ТипСообщения = "markdown2" или ТипСообщения = "md2" Тогда + ПараметрыСообщения.Вставить("parse_mode", "MarkdownV2"); + Иначе + Сообщение = СтрШаблон("Передан неподдерживаемый тип сообщения %1", ТипСообщения); + Сообщить(Сообщение); КонецЕсли; КонецЕсли; КонецПроцедуры From eeec4b82d1e55c066b76484f2cc24629a36b3874 Mon Sep 17 00:00:00 2001 From: 8095tores <42864922+8095tores@users.noreply.github.com> Date: Mon, 25 Apr 2022 16:24:41 +0300 Subject: [PATCH 3/4] =?UTF-8?q?=D0=B4=D0=BE=D0=BF=20=D0=BF=D0=B0=D1=80?= =?UTF-8?q?=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D1=8B=20=D0=B2=20public=20api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packagedef | 2 +- ...5\320\275\320\264\320\266\320\265\321\200_v2.os" | 13 +++++++++++-- ...\273\320\265\320\263\321\200\320\260\320\274.os" | 10 ++++++++-- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/packagedef b/packagedef index b8b8dae..bfd2816 100644 --- a/packagedef +++ b/packagedef @@ -1,5 +1,5 @@ Описание.Имя("messenger") - .Версия("2.0.8") + .Версия("2.0.18") .ЗависитОт("json") .ВключитьФайл("readme.md") .ВключитьФайл("src") diff --git "a/src/\320\234\320\265\321\201\321\201\320\265\320\275\320\264\320\266\320\265\321\200_v2.os" "b/src/\320\234\320\265\321\201\321\201\320\265\320\275\320\264\320\266\320\265\321\200_v2.os" index faab4e6..a77032f 100644 --- "a/src/\320\234\320\265\321\201\321\201\320\265\320\275\320\264\320\266\320\265\321\200_v2.os" +++ "b/src/\320\234\320\265\321\201\321\201\320\265\320\275\320\264\320\266\320\265\321\200_v2.os" @@ -40,8 +40,14 @@ // Сообщение - Строка - Текст отправляемого сообщения // ТемаСообщения - Строка - Тема сообщения, воспринимается не всеми транспортами // ТипСообщения - Строка - Тип сообщения, воспринимается не всеми транспортами +// ДополнительныеПараметры - Струкутра дополнительных параметров, иницициализированная на этапе приложения // -Процедура ОтправитьСообщение(ИмяТранспорта, Адресат, Сообщение, ТемаСообщения = "", ТипСообщения = "") Экспорт +Процедура ОтправитьСообщение(ИмяТранспорта, + Адресат, + Сообщение, + ТемаСообщения = "", + ТипСообщения = "", + Знач ДополнительныеПараметры = Неопределено) Экспорт Транспорт = Неопределено; Если Не Транспорты.Свойство(ИмяТранспорта, Транспорт) Тогда @@ -50,7 +56,10 @@ КонецЕсли; - ДополнительныеПараметры = Новый Структура; + Если ДополнительныеПараметры = Неопределено Тогда + ДополнительныеПараметры = Новый Структура; + КонецЕсли; + ДополнительныеПараметры.Вставить("ТемаСообщения", ТемаСообщения); ДополнительныеПараметры.Вставить("ТипСообщения", ТипСообщения); Транспорт.ОтправитьСообщение(Адресат, Сообщение, ДополнительныеПараметры); diff --git "a/src/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\321\213/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\320\242\320\265\320\273\320\265\320\263\321\200\320\260\320\274.os" "b/src/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\321\213/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\320\242\320\265\320\273\320\265\320\263\321\200\320\260\320\274.os" index 990acc5..08fddfa 100644 --- "a/src/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\321\213/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\320\242\320\265\320\273\320\265\320\263\321\200\320\260\320\274.os" +++ "b/src/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\321\213/\320\242\321\200\320\260\320\275\321\201\320\277\320\276\321\200\321\202\320\242\320\265\320\273\320\265\320\263\321\200\320\260\320\274.os" @@ -73,7 +73,11 @@ КонецЕсли; + // При отпралке сообщений с parse_mode HTML, Markdown или MarkdownV2 + // необходимо дополнительно экранировать сообщение + // детали экранирования описаны https://core.telegram.org/bots/api#formatting-options ТекстСообщения = СтрЗаменить(Сообщение, Символы.ПС, "%0A"); + ПараметрыСообщения = Новый Структура("chat_id, text", Адресат, ТекстСообщения); ОпределитьТипСообщения(ДополнительныеПараметры, ПараметрыСообщения); @@ -173,8 +177,10 @@ ИначеЕсли ТипСообщения = "markdown2" или ТипСообщения = "md2" Тогда ПараметрыСообщения.Вставить("parse_mode", "MarkdownV2"); Иначе - Сообщение = СтрШаблон("Передан неподдерживаемый тип сообщения %1", ТипСообщения); - Сообщить(Сообщение); + Если ЗначениеЗаполнено(ТипСообщения) Тогда + Сообщение = СтрШаблон("Передан неподдерживаемый тип сообщения %1", ТипСообщения); + Сообщить(Сообщение); + КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры From e5ee791408b0490bca2b1e546bf257f433545742 Mon Sep 17 00:00:00 2001 From: 8095tores <42864922+8095tores@users.noreply.github.com> Date: Mon, 25 Apr 2022 16:29:08 +0300 Subject: [PATCH 4/4] =?UTF-8?q?=D1=83=D0=BC=D0=B5=D0=BD=D1=8C=D1=88=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packagedef | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packagedef b/packagedef index bfd2816..3b65527 100644 --- a/packagedef +++ b/packagedef @@ -1,5 +1,5 @@ Описание.Имя("messenger") - .Версия("2.0.18") + .Версия("2.0.9") .ЗависитОт("json") .ВключитьФайл("readme.md") .ВключитьФайл("src")