From b003041f3faad2efad61fbec20a122cd3b9c4a0f Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 19 Jul 2024 22:25:39 +0300 Subject: [PATCH] OPI -> OInt --- src/ru/OInt/core/Modules/OPI_Telegram.os | 111 +++++++++--------- src/ru/OInt/lib.config | 30 ++--- .../OInt/tests/Modules/internal/OPI_Тесты.os | 20 +++- 3 files changed, 91 insertions(+), 70 deletions(-) diff --git a/src/ru/OInt/core/Modules/OPI_Telegram.os b/src/ru/OInt/core/Modules/OPI_Telegram.os index bf3e2a7d74..c047e7a1af 100644 --- a/src/ru/OInt/core/Modules/OPI_Telegram.os +++ b/src/ru/OInt/core/Modules/OPI_Telegram.os @@ -400,6 +400,9 @@ // Отправить группу медиафайлов // Отправляет набор файлов в чат или канал. Варианты типов медиа: audio, document, photo, video // +// Примечание: +// Соответствие файлов: Ключ - Файл, Значение - один из типов медиа +// // Параметры: // Токен - Строка - Токен бота - token // IDЧата - Строка,Число - ID целевого чата или IDЧата*IDТемы - chat @@ -431,19 +434,18 @@ OPI_Инструменты.ЗаменитьСпецсимволы(Текст, Разметка); URL = "api.telegram.org/bot" + Токен + "/sendMediaGroup"; - СтруктураФайлов = Новый Структура; Медиа = Новый Массив; Параметры = Новый Структура; ДобавитьИдентификаторЧата(IDЧата, Параметры); - СформироватьМассивМедиа(СоответствиеФайлов, Текст, СтруктураФайлов, Медиа); + ПреобразоватьФайлыВМедиа(СоответствиеФайлов, Текст, Медиа); OPI_Инструменты.ДобавитьПоле("parse_mode" , Разметка , Строка_ , Параметры); OPI_Инструменты.ДобавитьПоле("caption" , Текст , Строка_ , Параметры); OPI_Инструменты.ДобавитьПоле("media" , Медиа , Строка_ , Параметры); OPI_Инструменты.ДобавитьПоле("reply_markup", Клавиатура, "СтрокаФайла", Параметры); - Ответ = OPI_Инструменты.PostMultipart(URL, Параметры, СтруктураФайлов, "mixed"); + Ответ = OPI_Инструменты.PostMultipart(URL, Параметры, СоответствиеФайлов, "mixed"); Возврат Ответ; @@ -1060,10 +1062,15 @@ Метод = ""; ОпределитьМетодОтправки(Вид, Метод, Расширение); - ПреобразоватьДанныеФайла(Файл, Расширение, Вид); OPI_Инструменты.ЗаменитьСпецсимволы(Текст, Разметка); - ИмяФайла = ?(ЗначениеЗаполнено(ИмяФайла), Вид + "|" + ИмяФайла, Вид + Расширение); + Если Не ЗначениеЗаполнено(ИмяФайла) Тогда + ИмяФайла = ПреобразоватьДанныеФайла(Файл, Вид, ""); + Иначе + OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл); + КонецЕсли; + + ИмяФайла = Вид + "|" + ИмяФайла; Параметры = Новый Структура; OPI_Инструменты.ДобавитьПоле("parse_mode" , Разметка , "Строка" , Параметры); @@ -1102,8 +1109,7 @@ Иначе Метод = "/createForumTopic"; КонецЕсли; - - OPI_Инструменты.УдалитьПустыеПоляКоллекции(Параметры); + Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + Метод, Параметры); Возврат Ответ; @@ -1205,9 +1211,7 @@ КонецФункции -Процедура СформироватьМассивМедиа(Знач СоответствиеФайлов, Знач Текст, СтруктураФайлов, Медиа) - - Счетчик = 0; +Процедура ПреобразоватьФайлыВМедиа(СоответствиеФайлов, Текст, Медиа) OPI_ПреобразованиеТипов.ПолучитьКоллекцию(СоответствиеФайлов); OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст); @@ -1216,44 +1220,36 @@ ВызватьИсключение("Не удалось получить информацию из json медиа!"); Возврат; КонецЕсли; - - Для Каждого ТекущийФайл Из СоответствиеФайлов Цикл - - Если Не ТипЗнч(ТекущийФайл.Ключ) = Тип("ДвоичныеДанные") Тогда - - Двоичные = ТекущийФайл.Ключ; - OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Двоичные); - - ЭтотФайл = Новый Файл(ТекущийФайл.Ключ); - ИмяМедиа = ТекущийФайл.Значение - + Строка(Счетчик) - + ?(ТекущийФайл.Значение = "document", ЭтотФайл.Расширение, ""); - - ПолноеИмяМедиа = СтрЗаменить(ИмяМедиа, ".", "___"); - - Иначе - Двоичные = ТекущийФайл.Ключ; - ИмяМедиа = ТекущийФайл.Значение + Строка(Счетчик); - ПолноеИмяМедиа = ИмяМедиа; - КонецЕсли; - - СтруктураФайлов.Вставить(ПолноеИмяМедиа, Двоичные); - - СтруктураМедиа = Новый Структура; - СтруктураМедиа.Вставить("type" , ТекущийФайл.Значение); - СтруктураМедиа.Вставить("media", "attach://" + ИмяМедиа); - - Если Счетчик = 0 Тогда - СтруктураМедиа.Вставить("caption", Текст); - КонецЕсли; - - Медиа.Добавить(СтруктураМедиа); - - Счетчик = Счетчик + 1; - - КонецЦикла; + + ВременноеСоответствие = Новый Соответствие; + Счетчик = 0; + + Для Каждого ТекущийФайл Из СоответствиеФайлов Цикл - Медиа = OPI_Инструменты.JSONСтрокой(Медиа); + ТекущиеДанные = ТекущийФайл.Ключ; + ТипМедиа = ТекущийФайл.Значение; + Расширение = ""; + + ИмяМедиа = ПреобразоватьДанныеФайла(ТекущиеДанные, ТипМедиа, Счетчик); + + ВременноеСоответствие.Вставить(ИмяМедиа + "|" + ИмяМедиа, ТекущиеДанные); + + СтруктураМедиа = Новый Структура; + СтруктураМедиа.Вставить("type" , ТипМедиа); + СтруктураМедиа.Вставить("media", "attach://" + ИмяМедиа); + + Если Счетчик = 0 Тогда + СтруктураМедиа.Вставить("caption", Текст); + КонецЕсли; + + Медиа.Добавить(СтруктураМедиа); + + Счетчик = Счетчик + 1; + + КонецЦикла; + + Медиа = OPI_Инструменты.JSONСтрокой(Медиа); + СоответствиеФайлов = ВременноеСоответствие; КонецПроцедуры @@ -1294,18 +1290,25 @@ КонецПроцедуры -Процедура ПреобразоватьДанныеФайла(Файл, Расширение, Вид) +Функция ПреобразоватьДанныеФайла(Файл, Вид, Счетчик) - Если Не ТипЗнч(Файл) = Тип("ДвоичныеДанные") Тогда + ИмяФайла = ""; + + Если ТипЗнч(Файл) = Тип("Строка") И Вид = "document" Тогда ТекущийФайл = Новый Файл(Файл); - Расширение = ?(Вид = "document", ТекущийФайл.Расширение, Расширение); - OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл); + ИмяФайла = ТекущийФайл.Имя; КонецЕсли; - - Расширение = СтрЗаменить(Расширение, ".", "___"); -КонецПроцедуры + Если Не ЗначениеЗаполнено(ИмяФайла) Тогда + ИмяФайла = Вид + Строка(Счетчик); + КонецЕсли; + + OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл); + + Возврат ИмяФайла; + +КонецФункции #КонецОбласти diff --git a/src/ru/OInt/lib.config b/src/ru/OInt/lib.config index 92fd8c06d7..984bd2e070 100644 --- a/src/ru/OInt/lib.config +++ b/src/ru/OInt/lib.config @@ -1,21 +1,21 @@  - - - - - - - - - - - - - + + + + - - + + + + + + + + + + + diff --git a/src/ru/OInt/tests/Modules/internal/OPI_Тесты.os b/src/ru/OInt/tests/Modules/internal/OPI_Тесты.os index 672c6fccbc..441fb99282 100644 --- a/src/ru/OInt/tests/Modules/internal/OPI_Тесты.os +++ b/src/ru/OInt/tests/Modules/internal/OPI_Тесты.os @@ -185,6 +185,7 @@ OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("String" , ПараметрыТеста); OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Picture" , ПараметрыТеста); OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Video" , ПараметрыТеста); + OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Document" , ПараметрыТеста); Telegram_ОтправитьМеидагруппу(ПараметрыТеста); @@ -4143,10 +4144,27 @@ OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьМедиагруппу", "Telegram"); - Проверка_ТелеграмМедиагруппа(Результат); + Проверка_ТелеграмМедиагруппа(Результат); + + ДокументURL = ПараметрыФункции["Document"]; + ДокументПуть = ПолучитьИмяВременногоФайла("docx"); + IDКанала = ПараметрыФункции["Telegram_ChannelID"]; + + КопироватьФайл(ДокументURL, ДокументПуть); + + МедиаГруппа = Новый Соответствие; + Медиагруппа.Вставить(ДокументURL , "document"); + Медиагруппа.Вставить(ДокументПуть, "document"); + + Результат = OPI_Telegram.ОтправитьМедиагруппу(Токен, IDКанала, Текст, Медиагруппа); + + OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьМедиагруппу (доки)", "Telegram"); + + Проверка_ТелеграмМедиагруппа(Результат); УдалитьФайлы(ВидеоПуть); УдалитьФайлы(КартинкаПуть); + УдалитьФайлы(ДокументПуть); OPI_Инструменты.Пауза(5);