1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-08-13 20:05:19 +02:00

TG: Оптимизация отправки файлов и медиагруп

This commit is contained in:
Anton
2024-07-19 22:17:20 +03:00
parent 5e6d228b40
commit 8297b09b6b
2 changed files with 76 additions and 55 deletions

View File

@@ -400,6 +400,9 @@
// Отправить группу медиафайлов // Отправить группу медиафайлов
// Отправляет набор файлов в чат или канал. Варианты типов медиа: audio, document, photo, video // Отправляет набор файлов в чат или канал. Варианты типов медиа: audio, document, photo, video
// //
// Примечание:
// Соответствие файлов: Ключ - Файл, Значение - один из типов медиа
//
// Параметры: // Параметры:
// Токен - Строка - Токен бота - token // Токен - Строка - Токен бота - token
// IDЧата - Строка,Число - ID целевого чата или IDЧата*IDТемы - chat // IDЧата - Строка,Число - ID целевого чата или IDЧата*IDТемы - chat
@@ -431,19 +434,18 @@
OPI_Инструменты.ЗаменитьСпецсимволы(Текст, Разметка); OPI_Инструменты.ЗаменитьСпецсимволы(Текст, Разметка);
URL = "api.telegram.org/bot" + Токен + "/sendMediaGroup"; URL = "api.telegram.org/bot" + Токен + "/sendMediaGroup";
СтруктураФайлов = Новый Структура;
Медиа = Новый Массив; Медиа = Новый Массив;
Параметры = Новый Структура; Параметры = Новый Структура;
ДобавитьИдентификаторЧата(IDЧата, Параметры); ДобавитьИдентификаторЧата(IDЧата, Параметры);
СформироватьМассивМедиа(СоответствиеФайлов, Текст, СтруктураФайлов, Медиа); ПреобразоватьФайлыВМедиа(СоответствиеФайлов, Текст, Медиа);
OPI_Инструменты.ДобавитьПоле("parse_mode" , Разметка , Строка_ , Параметры); OPI_Инструменты.ДобавитьПоле("parse_mode" , Разметка , Строка_ , Параметры);
OPI_Инструменты.ДобавитьПоле("caption" , Текст , Строка_ , Параметры); OPI_Инструменты.ДобавитьПоле("caption" , Текст , Строка_ , Параметры);
OPI_Инструменты.ДобавитьПоле("media" , Медиа , Строка_ , Параметры); OPI_Инструменты.ДобавитьПоле("media" , Медиа , Строка_ , Параметры);
OPI_Инструменты.ДобавитьПоле("reply_markup", Клавиатура, "СтрокаФайла", Параметры); OPI_Инструменты.ДобавитьПоле("reply_markup", Клавиатура, "СтрокаФайла", Параметры);
Ответ = OPI_Инструменты.PostMultipart(URL, Параметры, СтруктураФайлов, "mixed"); Ответ = OPI_Инструменты.PostMultipart(URL, Параметры, СоответствиеФайлов, "mixed");
Возврат Ответ; Возврат Ответ;
@@ -1060,10 +1062,15 @@
Метод = ""; Метод = "";
ОпределитьМетодОтправки(Вид, Метод, Расширение); ОпределитьМетодОтправки(Вид, Метод, Расширение);
ПреобразоватьДанныеФайла(Файл, Расширение, Вид);
OPI_Инструменты.ЗаменитьСпецсимволы(Текст, Разметка); OPI_Инструменты.ЗаменитьСпецсимволы(Текст, Разметка);
ИмяФайла = ?(ЗначениеЗаполнено(ИмяФайла), Вид + "|" + ИмяФайла, Вид + Расширение); Если Не ЗначениеЗаполнено(ИмяФайла) Тогда
ИмяФайла = ПреобразоватьДанныеФайла(Файл, Вид, "");
Иначе
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
КонецЕсли;
ИмяФайла = Вид + "|" + ИмяФайла;
Параметры = Новый Структура; Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("parse_mode" , Разметка , "Строка" , Параметры); OPI_Инструменты.ДобавитьПоле("parse_mode" , Разметка , "Строка" , Параметры);
@@ -1102,8 +1109,7 @@
Иначе Иначе
Метод = "/createForumTopic"; Метод = "/createForumTopic";
КонецЕсли; КонецЕсли;
OPI_Инструменты.УдалитьПустыеПоляКоллекции(Параметры);
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + Метод, Параметры); Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + Метод, Параметры);
Возврат Ответ; Возврат Ответ;
@@ -1205,9 +1211,7 @@
КонецФункции КонецФункции
Процедура СформироватьМассивМедиа(Знач СоответствиеФайлов, Знач Текст, СтруктураФайлов, Медиа) Процедура ПреобразоватьФайлыВМедиа(СоответствиеФайлов, Текст, Медиа)
Счетчик = 0;
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(СоответствиеФайлов); OPI_ПреобразованиеТипов.ПолучитьКоллекцию(СоответствиеФайлов);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст); OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст);
@@ -1216,44 +1220,36 @@
// !OInt ВызватьИсключение("Не удалось получить информацию из json медиа!"); // !OInt ВызватьИсключение("Не удалось получить информацию из json медиа!");
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Для Каждого ТекущийФайл Из СоответствиеФайлов Цикл ВременноеСоответствие = Новый Соответствие;
Счетчик = 0;
Если Не ТипЗнч(ТекущийФайл.Ключ) = Тип("ДвоичныеДанные") Тогда
Для Каждого ТекущийФайл Из СоответствиеФайлов Цикл
Двоичные = ТекущийФайл.Ключ;
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Двоичные);
ЭтотФайл = Новый Файл(ТекущийФайл.Ключ);
ИмяМедиа = ТекущийФайл.Значение
+ Строка(Счетчик)
+ ?(ТекущийФайл.Значение = "document", ЭтотФайл.Расширение, "");
ПолноеИмяМедиа = СтрЗаменить(ИмяМедиа, ".", "___");
Иначе
Двоичные = ТекущийФайл.Ключ;
ИмяМедиа = ТекущийФайл.Значение + Строка(Счетчик);
ПолноеИмяМедиа = ИмяМедиа;
КонецЕсли;
СтруктураФайлов.Вставить(ПолноеИмяМедиа, Двоичные);
СтруктураМедиа = Новый Структура;
СтруктураМедиа.Вставить("type" , ТекущийФайл.Значение);
СтруктураМедиа.Вставить("media", "attach://" + ИмяМедиа);
Если Счетчик = 0 Тогда
СтруктураМедиа.Вставить("caption", Текст);
КонецЕсли;
Медиа.Добавить(СтруктураМедиа);
Счетчик = Счетчик + 1;
КонецЦикла;
Медиа = OPI_Инструменты.JSONСтрокой(Медиа); ТекущиеДанные = ТекущийФайл.Ключ;
ТипМедиа = ТекущийФайл.Значение;
Расширение = "";
ИмяМедиа = ПреобразоватьДанныеФайла(ТекущиеДанные, ТипМедиа, Счетчик);
ВременноеСоответствие.Вставить(ИмяМедиа + "|" + ИмяМедиа, ТекущиеДанные);
СтруктураМедиа = Новый Структура;
СтруктураМедиа.Вставить("type" , ТипМедиа);
СтруктураМедиа.Вставить("media", "attach://" + ИмяМедиа);
Если Счетчик = 0 Тогда
СтруктураМедиа.Вставить("caption", Текст);
КонецЕсли;
Медиа.Добавить(СтруктураМедиа);
Счетчик = Счетчик + 1;
КонецЦикла;
Медиа = OPI_Инструменты.JSONСтрокой(Медиа);
СоответствиеФайлов = ВременноеСоответствие;
КонецПроцедуры КонецПроцедуры
@@ -1294,18 +1290,25 @@
КонецПроцедуры КонецПроцедуры
Процедура ПреобразоватьДанныеФайла(Файл, Расширение, Вид) Функция ПреобразоватьДанныеФайла(Файл, Вид, Счетчик)
Если Не ТипЗнч(Файл) = Тип("ДвоичныеДанные") Тогда ИмяФайла = "";
Если ТипЗнч(Файл) = Тип("Строка") И Вид = "document" Тогда
ТекущийФайл = Новый Файл(Файл); ТекущийФайл = Новый Файл(Файл);
Расширение = ?(Вид = "document", ТекущийФайл.Расширение, Расширение); ИмяФайла = ТекущийФайл.Имя;
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
КонецЕсли; КонецЕсли;
Расширение = СтрЗаменить(Расширение, ".", "___");
КонецПроцедуры Если Не ЗначениеЗаполнено(ИмяФайла) Тогда
ИмяФайла = Вид + Строка(Счетчик);
КонецЕсли;
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
Возврат ИмяФайла;
КонецФункции
#КонецОбласти #КонецОбласти

View File

@@ -185,6 +185,7 @@
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("String" , ПараметрыТеста); OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("String" , ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Picture" , ПараметрыТеста); OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Picture" , ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Video" , ПараметрыТеста); OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Video" , ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Document" , ПараметрыТеста);
Telegram_ОтправитьМеидагруппу(ПараметрыТеста); Telegram_ОтправитьМеидагруппу(ПараметрыТеста);
@@ -4143,10 +4144,27 @@
// !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьМедиагруппу", "Telegram"); // !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьМедиагруппу", "Telegram");
Проверка_ТелеграмМедиагруппа(Результат); Проверка_ТелеграмМедиагруппа(Результат);
ДокументURL = ПараметрыФункции["Document"];
ДокументПуть = ПолучитьИмяВременногоФайла("docx");
IDКанала = ПараметрыФункции["Telegram_ChannelID"];
КопироватьФайл(ДокументURL, ДокументПуть);
МедиаГруппа = Новый Соответствие;
Медиагруппа.Вставить(ДокументURL , "document");
Медиагруппа.Вставить(ДокументПуть, "document");
Результат = OPI_Telegram.ОтправитьМедиагруппу(Токен, IDКанала, Текст, Медиагруппа);
// !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьМедиагруппу (доки)", "Telegram");
Проверка_ТелеграмМедиагруппа(Результат);
УдалитьФайлы(ВидеоПуть); УдалитьФайлы(ВидеоПуть);
УдалитьФайлы(КартинкаПуть); УдалитьФайлы(КартинкаПуть);
УдалитьФайлы(ДокументПуть);
OPI_Инструменты.Пауза(5); OPI_Инструменты.Пауза(5);