diff --git a/OPI/src/CommonModules/OPI_Telegram/Module.bsl b/OPI/src/CommonModules/OPI_Telegram/Module.bsl
index e3d40dd852..d68fb1411e 100644
--- a/OPI/src/CommonModules/OPI_Telegram/Module.bsl
+++ b/OPI/src/CommonModules/OPI_Telegram/Module.bsl
@@ -37,7 +37,9 @@
// ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram
Функция ПолучитьИнформациюБота(Знач Токен) Экспорт
- Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/getMe");
+ URL = "api.telegram.org/bot" + Токен + "/getMe";
+ Ответ = OPI_Инструменты.Get(URL);
+
Возврат Ответ;
КонецФункции
@@ -51,7 +53,8 @@
// ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram
Функция ПолучитьОбновления(Знач Токен) Экспорт
- Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/getUpdates");
+ URL = "api.telegram.org/bot" + Токен + "/getUpdates";
+ Ответ = OPI_Инструменты.Get(URL);
Возврат Ответ;
КонецФункции
@@ -69,7 +72,9 @@
Параметры_ = Новый Структура;
Параметры_.Вставить("url", URL);
- Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/setWebHook", Параметры_);
+ URL = "api.telegram.org/bot" + Токен + "/setWebHook";
+ Ответ = OPI_Инструменты.Get(URL, Параметры_);
+
Возврат Ответ;
КонецФункции
@@ -83,7 +88,8 @@
// ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram
Функция УдалитьWebhook(Знач Токен) Экспорт
- Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/deleteWebHook");
+ URL = "api.telegram.org/bot" + Токен + "/deleteWebHook";
+ Ответ = OPI_Инструменты.Get(URL);
Возврат Ответ;
КонецФункции
@@ -201,15 +207,16 @@
Функция ОтправитьТекстовоеСообщение(Знач Токен, Знач IDЧата, Знач Текст, Знач Клавиатура = "") Экспорт
OPI_Инструменты.ЗаменитьСпецСимволы(Текст);
- IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
-
+
Параметры_ = Новый Структура;
- Параметры_.Вставить("parse_mode", "Markdown");
- Параметры_.Вставить("text", Текст);
- Параметры_.Вставить("chat_id", IDЧата);
+ Параметры_.Вставить("parse_mode" , "Markdown");
+ Параметры_.Вставить("text" , Текст);
Параметры_.Вставить("reply_markup", Клавиатура);
-
- Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/sendMessage", Параметры_);
+
+ ДобавитьИдентификаторЧата(IDЧата, Параметры_);
+
+ URL = "api.telegram.org/bot" + Токен + "/sendMessage";
+ Ответ = OPI_Инструменты.Get(URL, Параметры_);
Возврат Ответ;
@@ -323,56 +330,26 @@
OPI_Инструменты.ЗаменитьСпецсимволы(Текст);
+ URL = "api.telegram.org/bot" + Токен + "/sendMediaGroup";
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
- СтруктураФайлов = Новый Структура;
- Медиа = Новый Массив;
- Счетчик = 0;
+ СтруктураФайлов = Новый Структура;
+ Медиа = Новый Массив;
Параметры_ = Новый Структура;
- Параметры_.Вставить("parse_mode", "Markdown");
- Параметры_.Вставить("caption", Текст);
- Параметры_.Вставить("chat_id", IDЧата);
+ Параметры_.Вставить("parse_mode" , "Markdown");
+ Параметры_.Вставить("caption" , Текст);
Параметры_.Вставить("reply_markup", Клавиатура);
+
+ ДобавитьИдентификаторЧата(IDЧата, Параметры_);
+ СформироватьМассивМедиа(СоответствиеФайлов, Текст, СтруктураФайлов, Медиа);
+
+ Параметры_.Вставить("media", Медиа);
- Для Каждого ТекущийФайл Из СоответствиеФайлов Цикл
-
- Если Не ТипЗнч(ТекущийФайл.Ключ) = Тип("ДвоичныеДанные") Тогда
- ДД = Новый ДвоичныеДанные(ТекущийФайл.Ключ);
- ЭтотФайл = Новый Файл(ТекущийФайл.Ключ);
- ИмяМедиа = ТекущийФайл.Значение + Строка(Счетчик) + ?(ТекущийФайл.Значение = "document",
- ЭтотФайл.Расширение, "");
- ПолноеИмяМедиа = СтрЗаменить(ИмяМедиа, ".", "___");
- Иначе
- ДД = ТекущийФайл.Ключ;
- ИмяМедиа = ТекущийФайл.Значение + Строка(Счетчик);
- ПолноеИмяМедиа = ИмяМедиа;
- КонецЕсли;
-
- СтруктураФайлов.Вставить(ПолноеИмяМедиа, ДД);
-
- СтруктураМедиа = Новый Структура;
- СтруктураМедиа.Вставить("type", ТекущийФайл.Значение);
- СтруктураМедиа.Вставить("media", "attach://" + ИмяМедиа);
-
- Если Счетчик = 0 Тогда
- СтруктураМедиа.Вставить("caption", Текст);
- КонецЕсли;
-
- Медиа.Добавить(СтруктураМедиа);
-
- Счетчик = Счетчик + 1;
-
- КонецЦикла;
-
- Параметры_.Вставить("media", OPI_Инструменты.JSONСтрокой(Медиа));
-
- Ответ = OPI_Инструменты.PostMultipart("api.telegram.org/bot" + Токен + "/sendMediaGroup", Параметры_,
- СтруктураФайлов, "mixed");
+ Ответ = OPI_Инструменты.PostMultipart(URL, Параметры_, СтруктураФайлов, "mixed");
Возврат Ответ;
КонецФункции
-// BSLLS:Typo-on
// Отправить местоположение.
//
@@ -388,15 +365,17 @@
Функция ОтправитьМестоположение(Знач Токен, Знач IDЧата, Знач Широта, Знач Долгота, Знач Клавиатура = "") Экспорт
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
-
+ URL = "api.telegram.org/bot" + Токен + "/sendLocation";
+
Параметры_ = Новый Структура;
- Параметры_.Вставить("parse_mode", "Markdown");
- Параметры_.Вставить("chat_id", IDЧата);
- Параметры_.Вставить("latitude", OPI_Инструменты.ЧислоВСтроку(Широта));
- Параметры_.Вставить("longitude", OPI_Инструменты.ЧислоВСтроку(Долгота));
+ Параметры_.Вставить("parse_mode" , "Markdown");
+ Параметры_.Вставить("latitude" , OPI_Инструменты.ЧислоВСтроку(Широта));
+ Параметры_.Вставить("longitude" , OPI_Инструменты.ЧислоВСтроку(Долгота));
Параметры_.Вставить("reply_markup", Клавиатура);
+
+ ДобавитьИдентификаторЧата(IDЧата, Параметры_);
- Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/sendLocation", Параметры_);
+ Ответ = OPI_Инструменты.Get(URL, Параметры_);
Возврат Ответ;
@@ -417,16 +396,18 @@
Функция ОтправитьКонтакт(Знач Токен, Знач IDЧата, Знач Имя, Знач Фамилия, Знач Телефон, Знач Клавиатура = "") Экспорт
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
+ URL = "api.telegram.org/bot" + Токен + "/sendContact";
Параметры_ = Новый Структура;
- Параметры_.Вставить("parse_mode", "Markdown");
- Параметры_.Вставить("chat_id", IDЧата);
- Параметры_.Вставить("first_name", Имя);
- Параметры_.Вставить("last_name", Фамилия);
+ Параметры_.Вставить("parse_mode" , "Markdown");
+ Параметры_.Вставить("first_name" , Имя);
+ Параметры_.Вставить("last_name" , Фамилия);
Параметры_.Вставить("phone_number", Строка(Телефон));
Параметры_.Вставить("reply_markup", Клавиатура);
+
+ ДобавитьИдентификаторЧата(IDЧата, Параметры_);
- Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/sendContact", Параметры_);
+ Ответ = OPI_Инструменты.Get(URL, Параметры_);
Возврат Ответ;
@@ -447,18 +428,20 @@
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
Ответы = OPI_Инструменты.JSONСтрокой(МассивОтветов);
+ URL = "api.telegram.org/bot" + Токен + "/sendPoll";
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode", "Markdown");
- Параметры_.Вставить("chat_id", IDЧата);
- Параметры_.Вставить("question", Вопрос);
- Параметры_.Вставить("options", Ответы);
+ Параметры_.Вставить("question" , Вопрос);
+ Параметры_.Вставить("options" , Ответы);
Если Не Анонимный Тогда
Параметры_.Вставить("is_anonymous", Ложь);
- КонецЕсли;
+ КонецЕсли;
+
+ ДобавитьИдентификаторЧата(IDЧата, Параметры_);
- Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/sendPoll", Параметры_);
+ Ответ = OPI_Инструменты.Get(URL, Параметры_);
Возврат Ответ;
@@ -476,16 +459,18 @@
// ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram
Функция ПереслатьСообщение(Знач Токен, Знач IDОригинала, Знач ОткудаID, Знач КудаID) Экспорт
+ URL = "api.telegram.org/bot" + Токен + "/forwardMessage";
IDОригинала = OPI_Инструменты.ЧислоВСтроку(IDОригинала);
ОткудаID = OPI_Инструменты.ЧислоВСтроку(ОткудаID);
КудаID = OPI_Инструменты.ЧислоВСтроку(КудаID);
Параметры_ = Новый Структура;
- Параметры_.Вставить("chat_id", КудаID);
Параметры_.Вставить("from_chat_id", ОткудаID);
- Параметры_.Вставить("message_id", IDОригинала);
+ Параметры_.Вставить("message_id" , IDОригинала);
- Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/forwardMessage", Параметры_);
+ ДобавитьИдентификаторЧата(КудаID, Параметры_);
+
+ Ответ = OPI_Инструменты.Get(URL, Параметры_);
Возврат Ответ;
@@ -506,15 +491,16 @@
// ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram
Функция Бан(Знач Токен, Знач IDЧата, Знач IDПользователя) Экспорт
+ URL = "api.telegram.org/bot" + Токен + "/banChatMember";
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
IDПользователя = OPI_Инструменты.ЧислоВСтроку(IDПользователя);
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode", "Markdown");
- Параметры_.Вставить("chat_id", IDЧата);
- Параметры_.Вставить("user_id", IDПользователя);
+ Параметры_.Вставить("chat_id" , IDЧата);
+ Параметры_.Вставить("user_id" , IDПользователя);
- Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/banChatMember", Параметры_);
+ Ответ = OPI_Инструменты.Get(URL, Параметры_);
Возврат Ответ;
@@ -531,16 +517,17 @@
// ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram
Функция Разбан(Знач Токен, Знач IDЧата, Знач IDПользователя) Экспорт
+ URL = "api.telegram.org/bot" + Токен + "/unbanChatMember";
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
IDПользователя = OPI_Инструменты.ЧислоВСтроку(IDПользователя);
Параметры_ = Новый Структура;
- Параметры_.Вставить("parse_mode", "Markdown");
- Параметры_.Вставить("chat_id", IDЧата);
- Параметры_.Вставить("user_id", IDПользователя);
+ Параметры_.Вставить("parse_mode" , "Markdown");
+ Параметры_.Вставить("chat_id" , IDЧата);
+ Параметры_.Вставить("user_id" , IDПользователя);
Параметры_.Вставить("only_if_banned", Истина);
- Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/unbanChatMember", Параметры_);
+ Ответ = OPI_Инструменты.Get(URL, Параметры_);
Возврат Ответ;
@@ -557,15 +544,19 @@
//
// Возвращаемое значение:
// ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram
-Функция СоздатьСсылкуПриглашение(Знач Токен, Знач IDЧата, Знач Заголовок = "", Знач ДатаИстечения = "",
- Знач ЛимитПользователей = 0) Экспорт
+Функция СоздатьСсылкуПриглашение(Знач Токен
+ , Знач IDЧата
+ , Знач Заголовок = ""
+ , Знач ДатаИстечения = ""
+ , Знач ЛимитПользователей = 0) Экспорт
- IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
+ URL = "api.telegram.org/bot" + Токен + "/createChatInviteLink";
+ IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode", "Markdown");
- Параметры_.Вставить("chat_id", IDЧата);
- Параметры_.Вставить("name", Заголовок);
+ Параметры_.Вставить("chat_id" , IDЧата);
+ Параметры_.Вставить("name" , Заголовок);
Если ЗначениеЗаполнено(ДатаИстечения) Тогда
Параметры_.Вставить("expire_date", Формат(ДатаИстечения - Дата(1970, 1, 1, 1, 0, 0), "ЧГ=0"));
@@ -573,7 +564,7 @@
Параметры_.Вставить("member_limit", ЛимитПользователей);
- Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/createChatInviteLink", Параметры_);
+ Ответ = OPI_Инструменты.Get(URL, Параметры_);
Возврат Ответ;
@@ -590,16 +581,17 @@
// ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram
Функция ЗакрепитьСообщение(Знач Токен, Знач IDЧата, Знач IDСообщения) Экспорт
+ URL = "api.telegram.org/bot" + Токен + "/pinChatMessage";
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
IDСообщения = OPI_Инструменты.ЧислоВСтроку(IDСообщения);
Параметры_ = Новый Структура;
- Параметры_.Вставить("parse_mode", "Markdown");
- Параметры_.Вставить("chat_id", IDЧата);
- Параметры_.Вставить("message_id", IDСообщения);
+ Параметры_.Вставить("parse_mode" , "Markdown");
+ Параметры_.Вставить("chat_id" , IDЧата);
+ Параметры_.Вставить("message_id" , IDСообщения);
Параметры_.Вставить("disable_notification", Истина);
- Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/pinChatMessage", Параметры_);
+ Ответ = OPI_Инструменты.Get(URL, Параметры_);
Возврат Ответ;
@@ -616,15 +608,16 @@
// ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram
Функция ОткрепитьСообщение(Знач Токен, Знач IDЧата, Знач IDСообщения) Экспорт
+ URL = "api.telegram.org/bot" + Токен + "/unpinChatMessage";
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
IDСообщения = OPI_Инструменты.ЧислоВСтроку(IDСообщения);
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode", "Markdown");
- Параметры_.Вставить("chat_id", IDЧата);
+ Параметры_.Вставить("chat_id" , IDЧата);
Параметры_.Вставить("message_id", IDСообщения);
- Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/unpinChatMessage", Параметры_);
+ Ответ = OPI_Инструменты.Get(URL, Параметры_);
Возврат Ответ;
@@ -640,13 +633,14 @@
// ДвоичныеДанные, Неопределено, Произвольный - Получить число участников
Функция ПолучитьЧислоУчастников(Знач Токен, Знач IDЧата) Экспорт
- IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
+ URL = "api.telegram.org/bot" + Токен + "/getChatMemberCount";
+ IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode", "Markdown");
- Параметры_.Вставить("chat_id", IDЧата);
+ Параметры_.Вставить("chat_id" , IDЧата);
- Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/getChatMemberCount", Параметры_);
+ Ответ = OPI_Инструменты.Get(URL, Параметры_);
Возврат Ответ;
@@ -720,6 +714,106 @@
#КонецОбласти
+#Область РежимФорума
+
+// Получить список иконок аватаров.
+//
+// Параметры:
+// Токен - Строка - Токен
+//
+// Возвращаемое значение:
+// Соответствие Из КлючИЗначение - Список иконок аватаров
+Функция ПолучитьСписокИконокАватаров(Знач Токен) Экспорт
+
+ Result = "result";
+ URL = "api.telegram.org/bot" + Токен + "/getForumTopicIconStickers";
+ Ответ = OPI_Инструменты.Get(URL);
+ Иконки = Ответ[Result];
+ Коллекция = Новый Соответствие;
+
+ Для Каждого Иконка Из Иконки Цикл
+ Коллекция.Вставить(Иконка["custom_emoji_id"], Иконка["emoji"]);
+ КонецЦикла;
+
+ Возврат Коллекция;
+
+КонецФункции
+
+// Создать тему форума.
+//
+// Параметры:
+// Токен - Строка - Токен
+// IDЧата - Строка,Число - ID чата создания темы
+// Заголовок - Строка - Заголовок темы
+// IDИконки - Строка - См.ПолучитьСписокИконокАватаров
+//
+// Возвращаемое значение:
+// HTTPОтвет - Ответ сервера Telegram
+Функция СоздатьТемуФорума(Знач Токен, Знач IDЧата, Знач Заголовок, Знач IDИконки = "") Экспорт
+ Возврат УправлениеТемойФорума(Токен, IDЧата, Заголовок, IDИконки);
+КонецФункции
+
+// Изменить тему форума.
+//
+// Параметры:
+// Токен - Строка - Токен
+// IDЧата - Строка,Число - ID чата темы
+// IDТемы - Строка,Число - ID темы
+// Заголовок - Строка - Новый заголовок
+// IDИконки - Строка - См.ПолучитьСписокИконокАватаров
+//
+// Возвращаемое значение:
+// HTTPОтвет - Ответ сервера Telegram
+Функция ИзменитьТемуФорума(Знач Токен
+ , Знач IDЧата
+ , Знач IDТемы
+ , Знач Заголовок = Неопределено
+ , Знач IDИконки = Неопределено) Экспорт
+
+ Возврат УправлениеТемойФорума(Токен, IDЧата, Заголовок, IDИконки, IDТемы);
+КонецФункции
+
+// Закрыть тему форума.
+//
+// Параметры:
+// Токен - Строка - Токен
+// IDЧата - Строка,Число - ID чата темы
+// IDТемы - Строка,Число - ID темы
+//
+// Возвращаемое значение:
+// Неопределено, HTTPОтвет - Ответ сервера Telegram
+Функция ЗакрытьТемуФорума(Знач Токен, Знач IDЧата, Знач IDТемы) Экспорт
+ Возврат УправлениеСостояниемТемыФорума(Токен, IDЧата, IDТемы, 2);
+КонецФункции
+
+// Открыть тему форума.
+//
+// Параметры:
+// Токен - Строка - Токен
+// IDЧата - Строка,Число - ID чата темы
+// IDТемы - Строка,Число - ID темы
+//
+// Возвращаемое значение:
+// Неопределено, HTTPОтвет - Ответ сервера Telegram
+Функция ОткрытьТемуФорума(Знач Токен, Знач IDЧата, Знач IDТемы) Экспорт
+ Возврат УправлениеСостояниемТемыФорума(Токен, IDЧата, IDТемы, 1);
+КонецФункции
+
+// Удалить тему форума.
+//
+// Параметры:
+// Токен - Строка - Токен
+// IDЧата - Строка,Число - ID чата темы
+// IDТемы - Строка,Число - ID темы
+//
+// Возвращаемое значение:
+// Неопределено, HTTPОтвет - Ответ сервера Telegram
+Функция УдалитьТемуФорума(Знач Токен, Знач IDЧата, Знач IDТемы) Экспорт
+ Возврат УправлениеСостояниемТемыФорума(Токен, IDЧата, IDТемы, 3);
+КонецФункции
+
+#КонецОбласти
+
#Область Прочее
// Сформировать клавиатуру по массиву кнопок.
@@ -783,25 +877,12 @@
Функция ОтправитьФайл(Знач Токен, Знач IDЧата, Знач Текст, Знач Файл, Знач Вид, Знач Клавиатура)
+ IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
Расширение = "";
-
- Если Вид = "photo" Тогда
- Метод = "/sendPhoto";
- ИначеЕсли Вид = "video" Тогда
- Метод = "/sendVideo";
- ИначеЕсли Вид = "audio" Тогда
- Метод = "/sendAudio";
- ИначеЕсли Вид = "document" Тогда
- Метод = "/sendDocument";
- ИначеЕсли Вид = "animation" Тогда
- Метод = "/sendAnimation";
- Расширение = ".gif";
- Иначе
- Возврат "";
- КонецЕсли;
-
+ Метод = "";
+
+ ОпределитьМетодОтправки(Вид, Метод, Расширение);
OPI_Инструменты.ЗаменитьСпецсимволы(Текст);
- IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
Если Не ТипЗнч(Файл) = Тип("ДвоичныеДанные") Тогда
ТекущийФайл = Новый Файл(Файл);
@@ -812,20 +893,152 @@
Расширение = СтрЗаменить(Расширение, ".", "___");
Параметры_ = Новый Структура;
- Параметры_.Вставить("parse_mode", "Markdown");
- Параметры_.Вставить("caption", Текст);
- Параметры_.Вставить("chat_id", IDЧата);
+ Параметры_.Вставить("parse_mode" , "Markdown");
+ Параметры_.Вставить("caption" , Текст);
Параметры_.Вставить("reply_markup", Клавиатура);
+
+ ДобавитьИдентификаторЧата(IDЧата, Параметры_);
СтруктураФайлов = Новый Структура;
СтруктураФайлов.Вставить(Вид + Расширение, Файл);
- Ответ = OPI_Инструменты.PostMultipart("api.telegram.org/bot" + Токен + Метод, Параметры_, СтруктураФайлов, "mixed");
+ URL = "api.telegram.org/bot" + Токен + Метод;
+ Ответ = OPI_Инструменты.PostMultipart(URL, Параметры_, СтруктураФайлов, "mixed");
Возврат Ответ;
КонецФункции
+Функция УправлениеТемойФорума(Знач Токен
+ , Знач IDЧата
+ , Знач Заголовок = Неопределено
+ , Знач IDИконки = Неопределено
+ , Знач IDТемы = "")
+
+ IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
+
+ Параметры_ = Новый Структура;
+ Параметры_.Вставить("name" , Заголовок);
+ Параметры_.Вставить("chat_id" , IDЧата);
+ Параметры_.Вставить("icon_custom_emoji_id", IDИконки);
+
+ Если ЗначениеЗаполнено(IDТемы) Тогда
+
+ IDТемы = OPI_Инструменты.ЧислоВСтроку(IDТемы);
+ Метод = "/editForumTopic";
+
+ Параметры_.Вставить("message_thread_id", IDТемы);
+
+ Иначе
+
+ Метод = "/createForumTopic";
+
+ КонецЕсли;
+
+ OPI_Инструменты.УдалитьПустыеПоляКоллекции(Параметры_);
+ Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + Метод, Параметры_);
+
+ Возврат Ответ;
+
+КонецФункции
+
+Функция УправлениеСостояниемТемыФорума(Знач Токен, Знач IDЧата, Знач IDТемы, Знач Статус)
+
+ Если Статус = 1 Тогда
+ Метод = "/reopenForumTopic";
+ ИначеЕсли Статус = 2 Тогда
+ Метод = "/closeForumTopic";
+ ИначеЕсли Статус = 3 Тогда
+ Метод = "/deleteForumTopic";
+ Иначе
+ Возврат Неопределено;
+ КонецЕсли;
+
+ Параметры_ = Новый Структура;
+ Параметры_.Вставить("chat_id" , IDЧата);
+ Параметры_.Вставить("message_thread_id", IDТемы);
+
+ Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + Метод, Параметры_);
+
+ Возврат Ответ;
+
+КонецФункции
+
+Процедура СформироватьМассивМедиа(Знач СоответствиеФайлов, Знач Текст, СтруктураФайлов, Медиа)
+
+ Счетчик = 0;
+
+ Для Каждого ТекущийФайл Из СоответствиеФайлов Цикл
+
+ Если Не ТипЗнч(ТекущийФайл.Ключ) = Тип("ДвоичныеДанные") Тогда
+ ДД = Новый ДвоичныеДанные(ТекущийФайл.Ключ);
+ ЭтотФайл = Новый Файл(ТекущийФайл.Ключ);
+ ИмяМедиа = ТекущийФайл.Значение + Строка(Счетчик) + ?(ТекущийФайл.Значение = "document",
+ ЭтотФайл.Расширение, "");
+ ПолноеИмяМедиа = СтрЗаменить(ИмяМедиа, ".", "___");
+ Иначе
+ ДД = ТекущийФайл.Ключ;
+ ИмяМедиа = ТекущийФайл.Значение + Строка(Счетчик);
+ ПолноеИмяМедиа = ИмяМедиа;
+ КонецЕсли;
+
+ СтруктураФайлов.Вставить(ПолноеИмяМедиа, ДД);
+
+ СтруктураМедиа = Новый Структура;
+ СтруктураМедиа.Вставить("type", ТекущийФайл.Значение);
+ СтруктураМедиа.Вставить("media", "attach://" + ИмяМедиа);
+
+ Если Счетчик = 0 Тогда
+ СтруктураМедиа.Вставить("caption", Текст);
+ КонецЕсли;
+
+ Медиа.Добавить(СтруктураМедиа);
+
+ Счетчик = Счетчик + 1;
+
+ КонецЦикла;
+
+ Медиа = OPI_Инструменты.JSONСтрокой(Медиа);
+
+КонецПроцедуры
+
+Процедура ДобавитьИдентификаторЧата(Знач IDЧата, Параметры)
+
+ IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
+ МассивЧата = СтрРазделить(IDЧата, "*", Ложь);
+
+ Если МассивЧата.Количество() > 1 Тогда
+
+ IDЧата = МассивЧата[1];
+ IDТемы = МассивЧата[2];
+
+ Параметры.Вставить("message_thread_id", IDТемы);
+
+ КонецЕсли;
+
+ Параметры.Вставить("chat_id", IDЧата);
+
+КонецПроцедуры
+
+Процедура ОпределитьМетодОтправки(Знач Вид, Метод, Расширение)
+
+ Если Вид = "photo" Тогда
+ Метод = "/sendPhoto";
+ ИначеЕсли Вид = "video" Тогда
+ Метод = "/sendVideo";
+ ИначеЕсли Вид = "audio" Тогда
+ Метод = "/sendAudio";
+ ИначеЕсли Вид = "document" Тогда
+ Метод = "/sendDocument";
+ ИначеЕсли Вид = "animation" Тогда
+ Метод = "/sendAnimation";
+ Расширение = ".gif";
+ Иначе
+ ВызватьИсключение "Некорректный вид отправки";
+ КонецЕсли;
+
+КонецПроцедуры
+
#КонецОбласти
// BSLLS:Typo-on
\ No newline at end of file
diff --git a/OPI/src/CommonModules/OPI_Инструменты/Module.bsl b/OPI/src/CommonModules/OPI_Инструменты/Module.bsl
index 6a73e0761a..b0c881bc45 100644
--- a/OPI/src/CommonModules/OPI_Инструменты/Module.bsl
+++ b/OPI/src/CommonModules/OPI_Инструменты/Module.bsl
@@ -225,8 +225,6 @@
Параметры = Новый Структура;
КонецЕсли;
- Переадресация = 300;
- Ошибка = 400;
ТипДанных = ?(JSON, "application/json", "application/x-www-form-urlencoded");
СтруктураURL = РазбитьURL(URL);
Сервер = СтруктураURL["Сервер"];
@@ -237,10 +235,9 @@
УстановитьТелоЗапроса(Запрос, Параметры, JSON);
- Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос);
- ЭтоПереадресация = Ответ.КодСостояния >= Переадресация И Ответ.КодСостояния < Ошибка;
-
- Если ЭтоПереадресация Тогда
+ Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос);
+
+ Если ЭтоПереадресация(Ответ) Тогда
Ответ = ВыполнитьЗапросСТелом(Ответ.Заголовки["Location"], Вид, Параметры, ДопЗаголовки, JSON);
Иначе
ОбработатьОтвет(Ответ);
@@ -256,19 +253,15 @@
Параметры = Новый Структура;
КонецЕсли;
- Переадресация = 300;
- Ошибка = 400;
СтруктураURL = РазбитьURL(URL);
Сервер = СтруктураURL["Сервер"];
Адрес = СтруктураURL["Адрес"] + ПараметрыЗапросаВСтроку(Параметры);
Запрос = СоздатьЗапрос(Адрес, ДопЗаголовки);
- Соединение = СоздатьСоединение(Сервер);
-
- Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос);
- ЭтоПереадрисация = Ответ.КодСостояния >= Переадресация И Ответ.КодСостояния < Ошибка;
+ Соединение = СоздатьСоединение(Сервер);
+ Ответ = Соединение.ВызватьHTTPМетод(Вид, Запрос);
- Если ЭтоПереадрисация Тогда
+ Если ЭтоПереадресация(Ответ) Тогда
Ответ = ВыполнитьЗапросБезТела(Ответ.Заголовки["Location"], Вид, Параметры, ДопЗаголовки);
Иначе
ОбработатьОтвет(Ответ);
@@ -304,7 +297,6 @@
Запрос = СоздатьЗапрос(Адрес, ДопЗаголовки, ТипДанных);
Соединение = СоздатьСоединение(Сервер);
-
ТелоЗапроса = Запрос.ПолучитьТелоКакПоток();
ЗаписьТекста = Новый ЗаписьДанных(ТелоЗапроса, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, "", "", Ложь);
@@ -361,6 +353,17 @@
Возврат Новый HTTPСоединение(Сервер, 443, , , , 300, Новый ЗащищенноеСоединениеOpenSSL);
КонецФункции
+Функция ЭтоПереадресация(Знач Ответ)
+
+ Переадресация = 300;
+ Ошибка = 400;
+
+ ЭтоПереадресация = Ответ.КодСостояния >= Переадресация И Ответ.КодСостояния < Ошибка;
+
+ Возврат ЭтоПереадресация;
+
+КонецФункции
+
Процедура ОбработатьОтвет(Ответ)
GZip = "gzip";
diff --git a/OPI/src/CommonModules/YAX_Тесты/Module.bsl b/OPI/src/CommonModules/YAX_Тесты/Module.bsl
index 56e8353fbd..1646aaf7a2 100644
--- a/OPI/src/CommonModules/YAX_Тесты/Module.bsl
+++ b/OPI/src/CommonModules/YAX_Тесты/Module.bsl
@@ -25,14 +25,16 @@
.ДобавитьСерверныйТест("Телеграм_ПереслатьСообщение" , "Переслать сообщение")
.ДобавитьСерверныйТест("Телеграм_БанРазбан" , "Бан/Разбан")
.ДобавитьСерверныйТест("Телеграм_СоздатьСсылкуПриглашение" , "Создать ссылку-приглашение")
- .ДобавитьСерверныйТест("Телеграм_ЗакрепитьОткрепитьСообщение" , "Закрепить/открепить сообщение")
+ .ДобавитьСерверныйТест("Телеграм_ЗакрепитьОткрепитьСообщение" , "Закрепить/Открепить сообщение")
.ДобавитьСерверныйТест("Телеграм_ПолучитьЧислоУчастников" , "Получить число участников")
+ .ДобавитьСерверныйТест("Телеграм_ПолучитьСписокАватаровФорума", "Получить список аватаров форума")
+ .ДобавитьСерверныйТест("Телеграм_СоздатьУдалитьТемуФорума" , "Создать/Удалить тему форума")
.ДобавитьТестовыйНабор("ВКонтакте")
.ДобавитьСерверныйТест("ВК_СоздатьСсылкуТокена" , "Создать ссылку получения токена")
.ДобавитьСерверныйТест("ВК_СоздатьУдалитьПост" , "Создать/Удалить пост")
.ДобавитьСерверныйТест("ВК_СоздатьОпрос" , "Создать опрос")
- .ДобавитьСерверныйТест("ВК_СохранитьУдалитьКартинку" , "Добавить/удалить картинку и альбом")
+ .ДобавитьСерверныйТест("ВК_СохранитьУдалитьКартинку" , "Добавить/Удалить картинку и альбом")
.ДобавитьСерверныйТест("ВК_СоздатьИсторию" , "Создать историю")
.ДобавитьСерверныйТест("ВК_МетодыОбсуждений" , "Действия с обсуждениями")
.ДобавитьСерверныйТест("ВК_ЛайкРепостКоммент" , "Лайк/Репост/Комментарий")
@@ -65,8 +67,8 @@
.ДобавитьСерверныйТест("ГК_ПолучитьТокен" , "Получить токен")
.ДобавитьСерверныйТест("ГК_ОбновитьТокен" , "Обновить токен")
.ДобавитьСерверныйТест("ГК_ПолучитьСписокКалендарей" , "Получить список календарей")
- .ДобавитьСерверныйТест("ГК_СоздатьУдалитьКалендарь" , "Создать/удалить календарь")
- .ДобавитьСерверныйТест("ГК_СоздатьУдалитьСобытие" , "Создать/удалить событие")
+ .ДобавитьСерверныйТест("ГК_СоздатьУдалитьКалендарь" , "Создать/Удалить календарь")
+ .ДобавитьСерверныйТест("ГК_СоздатьУдалитьСобытие" , "Создать/Удалить событие")
.ДобавитьСерверныйТест("ГК_ПолучитьСписокСобытий" , "Получить список событий");
КонецПроцедуры
@@ -533,6 +535,71 @@
КонецПроцедуры
+Процедура Телеграм_ПолучитьСписокАватаровФорума() Экспорт
+
+ Токен = ПолучитьПараметр("Телеграм_Токен");
+ Результат = OPI_Telegram.ПолучитьСписокИконокАватаров(Токен);
+
+ ЮТест.ОжидаетЧто(Результат)
+ .ИмеетТип("Соответствие")
+ .Заполнено();
+
+КонецПроцедуры
+
+Процедура Телеграм_СоздатьУдалитьТемуФорума() Экспорт
+
+ Result = "result";
+ Токен = ПолучитьПараметр("Телеграм_Токен");
+ Чат = ПолучитьПараметр("Телеграм_Форум");
+ Имя = "Тестовая тема";
+ НовоеИмя = "Новый тестовый заголовок";
+ Иконка = "5357419403325481346";
+
+ Результат = OPI_Telegram.СоздатьТемуФорума(Токен, Чат, Имя, Иконка);
+ Тема = Результат[Result]["message_thread_id"];
+
+ ЮТест.ОжидаетЧто(Результат)
+ .ИмеетТип("Соответствие")
+ .Заполнено()
+ .Свойство("ok").Равно(Истина)
+ .Свойство("result.name").Равно(Имя)
+ .Свойство("result.icon_custom_emoji_id").Равно(Иконка);
+
+ Результат = OPI_Telegram.ИзменитьТемуФорума(Токен, Чат, Тема, НовоеИмя);
+
+ ЮТест.ОжидаетЧто(Результат)
+ .ИмеетТип("Соответствие")
+ .Заполнено()
+ .Свойство("ok").Равно(Истина)
+ .Свойство("result").Равно(Истина);
+
+ Результат = OPI_Telegram.ЗакрытьТемуФорума(Токен, Чат, Тема);
+
+ ЮТест.ОжидаетЧто(Результат)
+ .ИмеетТип("Соответствие")
+ .Заполнено()
+ .Свойство("ok").Равно(Истина)
+ .Свойство("result").Равно(Истина);
+
+ Результат = OPI_Telegram.ОткрытьТемуФорума(Токен, Чат, Тема);
+
+ ЮТест.ОжидаетЧто(Результат)
+ .ИмеетТип("Соответствие")
+ .Заполнено()
+ .Свойство("ok").Равно(Истина)
+ .Свойство("result").Равно(Истина);
+
+ Результат = OPI_Telegram.УдалитьТемуФорума(Токен, Чат, Тема);
+
+ ЮТест.ОжидаетЧто(Результат)
+ .ИмеетТип("Соответствие")
+ .Заполнено()
+ .Свойство("ok").Равно(Истина)
+ .Свойство("result").Равно(Истина);
+
+
+КонецПроцедуры
+
#КонецОбласти
#Область ВК
diff --git a/OPI/src/Configuration/Configuration.mdo b/OPI/src/Configuration/Configuration.mdo
index 1aeaeb3495..d0eb5357f5 100644
--- a/OPI/src/Configuration/Configuration.mdo
+++ b/OPI/src/Configuration/Configuration.mdo
@@ -26,7 +26,7 @@
PersonalComputer
Russian
Bayselonarrend
- 1.3.0
+ 1.3.1
ru
Открытый пакет интеграций - набор библиотек для интеграции с некоторыми популярными API для 1C:Enterprise. Он состоит из общих модулей, каждый из которых отвечает за свой API, а также нескольких модулей-инструментов, общих для всех.