You've already forked OpenIntegrations
mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-08-13 20:05:19 +02:00
TG: Оптимизация отправки файлов и медиагруп
This commit is contained in:
@@ -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_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Файл);
|
||||||
|
|
||||||
|
Возврат ИмяФайла;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user