1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-01-24 05:36:29 +02:00

Telegram: функции форума

This commit is contained in:
Anton 2024-02-27 19:41:23 +03:00
parent 211c0b3847
commit e6d800fa3a
4 changed files with 416 additions and 133 deletions

View File

@ -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

View File

@ -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";

View File

@ -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").Равно(Истина);
КонецПроцедуры
#КонецОбласти
#Область ВК

View File

@ -26,7 +26,7 @@
<usePurposes>PersonalComputer</usePurposes>
<scriptVariant>Russian</scriptVariant>
<vendor>Bayselonarrend</vendor>
<version>1.3.0</version>
<version>1.3.1</version>
<detailedInformation>
<key>ru</key>
<value>Открытый пакет интеграций - набор библиотек для интеграции с некоторыми популярными API для 1C:Enterprise. Он состоит из общих модулей, каждый из которых отвечает за свой API, а также нескольких модулей-инструментов, общих для всех.</value>