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

Деффекты SC и форматирование

This commit is contained in:
Anton 2024-01-20 14:05:03 +03:00
parent b1cf0ee23a
commit 7d6bcaa8b2

View File

@ -1,26 +1,26 @@
//MIT License // MIT License
//Copyright (c) 2023 Anton Tsitavets // Copyright (c) 2023 Anton Tsitavets
//Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
//of this software and associated documentation files (the "Software"), to deal // of this software and associated documentation files (the "Software"), to deal
//in the Software without restriction, including without limitation the rights // in the Software without restriction, including without limitation the rights
//to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
//copies of the Software, and to permit persons to whom the Software is // copies of the Software, and to permit persons to whom the Software is
//furnished to do so, subject to the following conditions: // furnished to do so, subject to the following conditions:
//The above copyright notice and this permission notice shall be included in all // The above copyright notice and this permission notice shall be included in all
//copies or substantial portions of the Software. // copies or substantial portions of the Software.
//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
//IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
//FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
//AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
//LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
//OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
//SOFTWARE. // SOFTWARE.
//https://github.com/Bayselonarrend/OpenIntegrations // https://github.com/Bayselonarrend/OpenIntegrations
#Область ПрограммныйИнтерфейс #Область ПрограммныйИнтерфейс
@ -38,7 +38,7 @@
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/getMe"); Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/getMe");
Возврат Ответ; Возврат Ответ;
Конецфункции КонецФункции
// Получить обновления. // Получить обновления.
// //
@ -63,11 +63,11 @@
// Возвращаемое значение: // Возвращаемое значение:
// ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram
Функция УстановитьWebhook(Знач Токен, Знач URL) Экспорт Функция УстановитьWebhook(Знач Токен, Знач URL) Экспорт
Параметры_ = Новый Структура; Параметры_ = Новый Структура;
Параметры_.Вставить("url", URL); Параметры_.Вставить("url", URL);
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/setWebHook", Параметры_); Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/setWebHook", Параметры_);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
@ -90,82 +90,85 @@
Функция ОбработатьДанные(Знач Запрос) Экспорт Функция ОбработатьДанные(Знач Запрос) Экспорт
// BSLLS:DuplicateStringLiteral-off // BSLLS:DuplicateStringLiteral-off
Message = "message"; Message = "message";
From = "from"; From = "from";
Chat = "chat"; Chat = "chat";
Id_ = "id"; Id_ = "id";
Username = "username"; Username = "username";
MessageId = "message_id"; MessageId = "message_id";
ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Запрос.ПолучитьТелоКакСтроку()); ЧтениеJSON.УстановитьСтроку(Запрос.ПолучитьТелоКакСтроку());
СтруктураПараметровВходная = ПрочитатьJSON(ЧтениеJSON); СтруктураПараметровВходная = ПрочитатьJSON(ЧтениеJSON);
СтруктураПараметровВыходная = Новый Структура; СтруктураПараметровВыходная = Новый Структура;
Если СтруктураПараметровВходная.Свойство(Message) Тогда Если СтруктураПараметровВходная.Свойство(Message) Тогда
СтруктураСообщения = СтруктураПараметровВходная[Message]; СтруктураСообщения = СтруктураПараметровВходная[Message];
СтруктураПользователя = СтруктураСообщения[From]; СтруктураПользователя = СтруктураСообщения[From];
СтруктураЧата = СтруктураСообщения[Chat]; СтруктураЧата = СтруктураСообщения[Chat];
СтруктураПараметровВыходная.Вставить("Вид" , "Сообщение"); СтруктураПараметровВыходная.Вставить("Вид" , "Сообщение");
СтруктураПараметровВыходная.Вставить("Никнейм" , СтруктураПользователя[Username]); СтруктураПараметровВыходная.Вставить("Никнейм" , СтруктураПользователя[Username]);
СтруктураПараметровВыходная.Вставить("IDПользователя" , СтруктураПользователя[Id_]); СтруктураПараметровВыходная.Вставить("IDПользователя" , СтруктураПользователя[Id_]);
СтруктураПараметровВыходная.Вставить("IDСообщения" , СтруктураСообщения[MessageId]); СтруктураПараметровВыходная.Вставить("IDСообщения" , СтруктураСообщения[MessageId]);
СтруктураПараметровВыходная.Вставить("IDЧата" , СтруктураЧата[Id_]); СтруктураПараметровВыходная.Вставить("IDЧата" , СтруктураЧата[Id_]);
СтруктураПараметровВыходная.Вставить("Сообщение" , СтруктураСообщения["text"]); СтруктураПараметровВыходная.Вставить("Сообщение" , СтруктураСообщения["text"]);
СтруктураПараметровВыходная.Вставить("Дата" , Дата(1970,1,1,1,0,0) + СтруктураСообщения["date"]); СтруктураПараметровВыходная.Вставить("Дата"
СтруктураПараметровВыходная.Вставить("БотОтключен" , Ложь); , Дата(1970, 1, 1, 1, 0, 0) + СтруктураСообщения["date"]);
ИначеЕсли СтруктураПараметровВходная.Свойство("my_chat_member") Тогда СтруктураПараметровВыходная.Вставить("БотОтключен" , Ложь);
СтруктураСообщения = СтруктураПараметровВходная["my_chat_member"]; ИначеЕсли СтруктураПараметровВходная.Свойство("my_chat_member") Тогда
СтруктураПользователя = СтруктураСообщения[From];
СтруктураЧата = СтруктураСообщения[Chat]; СтруктураСообщения = СтруктураПараметровВходная["my_chat_member"];
СтруктураПользователя = СтруктураСообщения[From];
СтруктураПараметровВыходная.Вставить("Вид" , "Запуск/Остановка"); СтруктураЧата = СтруктураСообщения[Chat];
СтруктураПараметровВыходная.Вставить("Никнейм" , СтруктураПользователя[Username]);
СтруктураПараметровВыходная.Вставить("IDПользователя" , СтруктураПользователя[Id_]); СтруктураПараметровВыходная.Вставить("Вид" , "Запуск/Остановка");
СтруктураПараметровВыходная.Вставить("IDСообщения" , ""); СтруктураПараметровВыходная.Вставить("Никнейм" , СтруктураПользователя[Username]);
СтруктураПараметровВыходная.Вставить("IDЧата" , СтруктураЧата[Id_]); СтруктураПараметровВыходная.Вставить("IDПользователя" , СтруктураПользователя[Id_]);
СтруктураПараметровВыходная.Вставить("Сообщение" , СтруктураСообщения["new_chat_member"]["status"]); СтруктураПараметровВыходная.Вставить("IDСообщения" , "");
СтруктураПараметровВыходная.Вставить("Дата" , Дата(1970,1,1,1,0,0) + СтруктураСообщения["date"]); СтруктураПараметровВыходная.Вставить("IDЧата" , СтруктураЧата[Id_]);
СтруктураПараметровВыходная.Вставить("БотОтключен" СтруктураПараметровВыходная.Вставить("Сообщение" , СтруктураСообщения["new_chat_member"]["status"]);
, ?(СтруктураСообщения["new_chat_member"]["status"] = "kicked", Истина, Ложь)); СтруктураПараметровВыходная.Вставить("Дата"
, Дата(1970, 1, 1, 1, 0, 0) + СтруктураСообщения["date"]);
СтруктураПараметровВыходная.Вставить("БотОтключен"
, ?(СтруктураСообщения["new_chat_member"]["status"] = "kicked", Истина, Ложь));
ИначеЕсли СтруктураПараметровВходная.Свойство("callback_query") Тогда ИначеЕсли СтруктураПараметровВходная.Свойство("callback_query") Тогда
СтруктураСообщения = СтруктураПараметровВходная["callback_query"];
СтруктураСообщения = СтруктураПараметровВходная["callback_query"]; СтруктураПользователя = СтруктураСообщения[From];
СтруктураПользователя = СтруктураСообщения[From];
СтруктураПараметровВыходная.Вставить("Вид" , "Кнопка под сообщением"); СтруктураПараметровВыходная.Вставить("Вид" , "Кнопка под сообщением");
СтруктураПараметровВыходная.Вставить("Никнейм" , СтруктураПользователя[Username]); СтруктураПараметровВыходная.Вставить("Никнейм" , СтруктураПользователя[Username]);
СтруктураПараметровВыходная.Вставить("IDПользователя" , СтруктураПользователя[Id_]); СтруктураПараметровВыходная.Вставить("IDПользователя" , СтруктураПользователя[Id_]);
СтруктураПараметровВыходная.Вставить("IDСообщения" , СтруктураСообщения[Message][MessageId]); СтруктураПараметровВыходная.Вставить("IDСообщения" , СтруктураСообщения[Message][MessageId]);
СтруктураПараметровВыходная.Вставить("IDЧата" , СтруктураСообщения[Message][Chat][Id_]); СтруктураПараметровВыходная.Вставить("IDЧата" , СтруктураСообщения[Message][Chat][Id_]);
СтруктураПараметровВыходная.Вставить("Сообщение" , СтруктураСообщения["data"]); СтруктураПараметровВыходная.Вставить("Сообщение" , СтруктураСообщения["data"]);
СтруктураПараметровВыходная.Вставить("БотОтключен" , Ложь); СтруктураПараметровВыходная.Вставить("БотОтключен" , Ложь);
СтруктураПараметровВыходная.Вставить("Дата" СтруктураПараметровВыходная.Вставить("Дата"
, Дата(1970,1,1,1,0,0) + СтруктураСообщения[Message]["date"]); , Дата(1970, 1, 1, 1, 0, 0) + СтруктураСообщения[Message]["date"]);
Иначе Иначе
СтруктураПараметровВыходная.Вставить("Вид", ""); СтруктураПараметровВыходная.Вставить("Вид" , "");
СтруктураПараметровВыходная.Вставить("Никнейм", ""); СтруктураПараметровВыходная.Вставить("Никнейм" , "");
СтруктураПараметровВыходная.Вставить("IDПользователя", ""); СтруктураПараметровВыходная.Вставить("IDПользователя" , "");
СтруктураПараметровВыходная.Вставить("IDСообщения", ""); СтруктураПараметровВыходная.Вставить("IDСообщения" , "");
СтруктураПараметровВыходная.Вставить("IDЧата", ""); СтруктураПараметровВыходная.Вставить("IDЧата" , "");
СтруктураПараметровВыходная.Вставить("Сообщение", ""); СтруктураПараметровВыходная.Вставить("Сообщение" , "");
СтруктураПараметровВыходная.Вставить("Дата", ТекущаяДатаСеанса()); СтруктураПараметровВыходная.Вставить("Дата" , ТекущаяДатаСеанса());
СтруктураПараметровВыходная.Вставить("БотОтключен", Ложь); СтруктураПараметровВыходная.Вставить("БотОтключен" , Ложь);
КонецЕсли; КонецЕсли;
Возврат СтруктураПараметровВыходная; Возврат СтруктураПараметровВыходная;
// BSLLS:DuplicateStringLiteral-on // BSLLS:DuplicateStringLiteral-on
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@ -291,22 +294,22 @@
// IDЧата - Строка,Число - ID целевого чата // IDЧата - Строка,Число - ID целевого чата
// Текст - Строка - Текст // Текст - Строка - Текст
// СоответствиеФайлов - Соответствие из Строка,ДвоичныеДанные - Коллекция файлов: // СоответствиеФайлов - Соответствие из Строка,ДвоичныеДанные - Коллекция файлов:
// * Ключ - ДвоичныеДанные,Строка - Файл // * Ключ - ДвоичныеДанные,Строка - Файл
// * Значение - Строка - Тип файла: audio, document, photo, video // * Значение - Строка - Тип файла: audio, document, photo, video
// Клавиатура - Строка - См. СформироватьКлавиатуруПоМассивуКнопок // Клавиатура - Строка - См. СформироватьКлавиатуруПоМассивуКнопок
// //
// Возвращаемое значение: // Возвращаемое значение:
// Произвольный, HTTPОтвет - Ответ сервера Telegram // Произвольный, HTTPОтвет - Ответ сервера Telegram
Функция ОтправитьМедиагруппу(Знач Токен Функция ОтправитьМедиагруппу(Знач Токен
, Знач IDЧата , Знач IDЧата
, Знач Текст , Знач Текст
, Знач СоответствиеФайлов , Знач СоответствиеФайлов
, Знач Клавиатура = "") Экспорт , Знач Клавиатура = "") Экспорт
//СоответствиеФайлов // СоответствиеФайлов
//Ключ - Файл, Значение - Тип // Ключ - Файл, Значение - Тип
//Типы: audio, document, photo, video // Типы: audio, document, photo, video
//Нельзя замешивать разные типы! // Нельзя замешивать разные типы!
OPI_Инструменты.ЗаменитьСпецсимволы(Текст); OPI_Инструменты.ЗаменитьСпецсимволы(Текст);
@ -320,8 +323,7 @@
Параметры_.Вставить("caption" , Текст); Параметры_.Вставить("caption" , Текст);
Параметры_.Вставить("chat_id" , IDЧата); Параметры_.Вставить("chat_id" , IDЧата);
Параметры_.Вставить("reply_markup" , Клавиатура); Параметры_.Вставить("reply_markup" , Клавиатура);
Для Каждого ТекущийФайл Из СоответствиеФайлов Цикл Для Каждого ТекущийФайл Из СоответствиеФайлов Цикл
Если Не ТипЗнч(ТекущийФайл.Ключ) = Тип("ДвоичныеДанные") Тогда Если Не ТипЗнч(ТекущийФайл.Ключ) = Тип("ДвоичныеДанные") Тогда
@ -340,7 +342,7 @@
СтруктураФайлов.Вставить(ПолноеИмяМедиа , ДД); СтруктураФайлов.Вставить(ПолноеИмяМедиа , ДД);
СтруктураМедиа = Новый Структура; СтруктураМедиа = Новый Структура;
СтруктураМедиа.Вставить("type", ТекущийФайл.Значение); СтруктураМедиа.Вставить("type" , ТекущийФайл.Значение);
СтруктураМедиа.Вставить("media", "attach://" + ИмяМедиа); СтруктураМедиа.Вставить("media", "attach://" + ИмяМедиа);
Если Счетчик = 0 Тогда Если Счетчик = 0 Тогда
@ -359,7 +361,6 @@
+ Токен + Токен
+ "/sendMediaGroup", Параметры_, СтруктураФайлов, "mixed"); + "/sendMediaGroup", Параметры_, СтруктураФайлов, "mixed");
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
@ -439,14 +440,14 @@
Ответы = OPI_Инструменты.JSONСтрокой(МассивОтветов); Ответы = OPI_Инструменты.JSONСтрокой(МассивОтветов);
Параметры_ = Новый Структура; Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode" , "Markdown"); Параметры_.Вставить("parse_mode" , "Markdown");
Параметры_.Вставить("chat_id" , IDЧата); Параметры_.Вставить("chat_id" , IDЧата);
Параметры_.Вставить("question" , Вопрос); Параметры_.Вставить("question" , Вопрос);
Параметры_.Вставить("options" , Ответы); Параметры_.Вставить("options" , Ответы);
Если Не Анонимный Тогда Если Не Анонимный Тогда
Параметры_.Вставить("is_anonymous" , Ложь); Параметры_.Вставить("is_anonymous", Ложь);
КонецЕсли; КонецЕсли;
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/sendPoll", Параметры_); Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/sendPoll", Параметры_);
@ -548,22 +549,22 @@
// Возвращаемое значение: // Возвращаемое значение:
// ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram // ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram
Функция СоздатьСсылкуПриглашение(Знач Токен Функция СоздатьСсылкуПриглашение(Знач Токен
, Знач IDЧата , Знач IDЧата
, Знач Заголовок = "" , Знач Заголовок = ""
, Знач ДатаИстечения = "" , Знач ДатаИстечения = ""
, Знач ЛимитПользователей = 0) Экспорт , Знач ЛимитПользователей = 0) Экспорт
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата); IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
Параметры_ = Новый Структура; Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode" , "Markdown"); Параметры_.Вставить("parse_mode", "Markdown");
Параметры_.Вставить("chat_id" , IDЧата); Параметры_.Вставить("chat_id" , IDЧата);
Параметры_.Вставить("name" , Заголовок); Параметры_.Вставить("name" , Заголовок);
Если ЗначениеЗаполнено(ДатаИстечения) Тогда Если ЗначениеЗаполнено(ДатаИстечения) Тогда
Параметры_.Вставить("expire_date" , Формат(ДатаИстечения - Дата(1970,1,1,1,0,0), "ЧГ=0")); Параметры_.Вставить("expire_date", Формат(ДатаИстечения - Дата(1970, 1, 1, 1, 0, 0), "ЧГ=0"));
КонецЕсли; КонецЕсли;
Параметры_.Вставить("member_limit", ЛимитПользователей); Параметры_.Вставить("member_limit", ЛимитПользователей);
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/createChatInviteLink", Параметры_); Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/createChatInviteLink", Параметры_);
@ -613,9 +614,9 @@
IDСообщения = OPI_Инструменты.ЧислоВСтроку(IDСообщения); IDСообщения = OPI_Инструменты.ЧислоВСтроку(IDСообщения);
Параметры_ = Новый Структура; Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode" , "Markdown"); Параметры_.Вставить("parse_mode" , "Markdown");
Параметры_.Вставить("chat_id" , IDЧата); Параметры_.Вставить("chat_id" , IDЧата);
Параметры_.Вставить("message_id" , IDСообщения); Параметры_.Вставить("message_id" , IDСообщения);
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/unpinChatMessage", Параметры_); Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/unpinChatMessage", Параметры_);
@ -636,8 +637,8 @@
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата); IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
Параметры_ = Новый Структура; Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode" , "Markdown"); Параметры_.Вставить("parse_mode", "Markdown");
Параметры_.Вставить("chat_id" , IDЧата); Параметры_.Вставить("chat_id" , IDЧата);
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/getChatMemberCount", Параметры_); Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/getChatMemberCount", Параметры_);
@ -658,58 +659,58 @@
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие из Строка - Обработанные данные с признаком достоверности // Соответствие из Строка - Обработанные данные с признаком достоверности
Функция ОбработатьДанныеTMA(Знач СтрокаДанных, Знач Токен) Экспорт Функция ОбработатьДанныеTMA(Знач СтрокаДанных, Знач Токен) Экспорт
СтрокаДанных = РаскодироватьСтроку(СтрокаДанных, СпособКодированияСтроки.КодировкаURL); СтрокаДанных = РаскодироватьСтроку(СтрокаДанных, СпособКодированияСтроки.КодировкаURL);
СтруктураДанных = OPI_Инструменты.ПараметрыЗапросаВСоответствие(СтрокаДанных); СтруктураДанных = OPI_Инструменты.ПараметрыЗапросаВСоответствие(СтрокаДанных);
Ключ = "WebAppData"; Ключ = "WebAppData";
Хэш = ""; Хэш = "";
Результат = OPI_Криптография.HMACSHA256(ПолучитьДвоичныеДанныеИзСтроки(Ключ) Результат = OPI_Криптография.HMACSHA256(ПолучитьДвоичныеДанныеИзСтроки(Ключ)
, ПолучитьДвоичныеДанныеИзСтроки(Токен)); , ПолучитьДвоичныеДанныеИзСтроки(Токен));
ТЗнач = Новый ТаблицаЗначений; ТЗнач = Новый ТаблицаЗначений;
ТЗнач.Колонки.Добавить("Ключ"); ТЗнач.Колонки.Добавить("Ключ");
ТЗнач.Колонки.Добавить("Значение"); ТЗнач.Колонки.Добавить("Значение");
Для Каждого Данные Из СтруктураДанных Цикл Для Каждого Данные Из СтруктураДанных Цикл
НоваяСтрока = ТЗнач.Добавить(); НоваяСтрока = ТЗнач.Добавить();
НоваяСтрока.Ключ = Данные.Ключ; НоваяСтрока.Ключ = Данные.Ключ;
НоваяСтрока.Значение = Данные.Значение; НоваяСтрока.Значение = Данные.Значение;
КонецЦикла; КонецЦикла;
ТЗнач.Сортировать("Ключ"); ТЗнач.Сортировать("Ключ");
СоответствиеВозврата = Новый Соответствие; СоответствиеВозврата = Новый Соответствие;
DCS = ""; DCS = "";
Для Каждого СтрокаТЗ Из ТЗнач Цикл Для Каждого СтрокаТЗ Из ТЗнач Цикл
Если СтрокаТЗ.Ключ <> "hash" Тогда Если СтрокаТЗ.Ключ <> "hash" Тогда
DCS = DCS + СтрокаТЗ.Ключ + "=" + СтрокаТЗ.Значение + Символы.ПС; DCS = DCS + СтрокаТЗ.Ключ + "=" + СтрокаТЗ.Значение + Символы.ПС;
СоответствиеВозврата.Вставить(СтрокаТЗ.Ключ, СтрокаТЗ.Значение); СоответствиеВозврата.Вставить(СтрокаТЗ.Ключ, СтрокаТЗ.Значение);
Иначе Иначе
Хэш = СтрокаТЗ.Значение; Хэш = СтрокаТЗ.Значение;
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
DCS = Лев(DCS, СтрДлина(DCS) - 1); DCS = Лев(DCS, СтрДлина(DCS) - 1);
Подпись = OPI_Криптография.HMACSHA256(Результат, ПолучитьДвоичныеДанныеИзСтроки(DCS)); Подпись = OPI_Криптография.HMACSHA256(Результат, ПолучитьДвоичныеДанныеИзСтроки(DCS));
Финал = ПолучитьHexСтрокуИзДвоичныхДанных(Подпись); Финал = ПолучитьHexСтрокуИзДвоичныхДанных(Подпись);
Если Финал = вРег(Хэш) Тогда Если Финал = вРег(Хэш) Тогда
Ответ = Истина; Ответ = Истина;
Иначе Иначе
Ответ = Ложь; Ответ = Ложь;
КонецЕсли; КонецЕсли;
СоответствиеВозврата.Вставить("passed", Ответ); СоответствиеВозврата.Вставить("passed", Ответ);
Возврат СоответствиеВозврата; Возврат СоответствиеВозврата;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@ -726,33 +727,33 @@
// Возвращаемое значение: // Возвращаемое значение:
// Строка - JSON клавиатуры // Строка - JSON клавиатуры
Функция СформироватьКлавиатуруПоМассивуКнопок(Знач МассивКнопок Функция СформироватьКлавиатуруПоМассивуКнопок(Знач МассивКнопок
, Знач ПодСообщением = Ложь , Знач ПодСообщением = Ложь
, Знач ОднаПодОдной = Истина) Экспорт , Знач ОднаПодОдной = Истина) Экспорт
Если ОднаПодОдной Тогда Если ОднаПодОдной Тогда
Строки = Новый Массив; Строки = Новый Массив;
Для Каждого Кнопка Из МассивКнопок Цикл Для Каждого Кнопка Из МассивКнопок Цикл
Кнопки = Новый Массив; Кнопки = Новый Массив;
Кнопка = OPI_Инструменты.ЧислоВСтроку(Кнопка); Кнопка = OPI_Инструменты.ЧислоВСтроку(Кнопка);
Кнопки.Добавить(Новый Структура("text,callback_data", Кнопка, Кнопка)); Кнопки.Добавить(Новый Структура("text,callback_data", Кнопка, Кнопка));
Строки.Добавить(Кнопки); Строки.Добавить(Кнопки);
КонецЦикла; КонецЦикла;
Иначе Иначе
Строки = Новый Массив; Строки = Новый Массив;
Кнопки = Новый Массив; Кнопки = Новый Массив;
Для Каждого Кнопка Из МассивКнопок Цикл Для Каждого Кнопка Из МассивКнопок Цикл
Кнопка = OPI_Инструменты.ЧислоВСтроку(Кнопка); Кнопка = OPI_Инструменты.ЧислоВСтроку(Кнопка);
Кнопки.Добавить(Новый Структура("text,callback_data", Кнопка, Кнопка)); Кнопки.Добавить(Новый Структура("text,callback_data", Кнопка, Кнопка));
КонецЦикла; КонецЦикла;
Строки.Добавить(Кнопки); Строки.Добавить(Кнопки);
КонецЕсли; КонецЕсли;
Если ПодСообщением Тогда Если ПодСообщением Тогда
СтруктураПараметра = Новый Структура("inline_keyboard,rows", Строки, 1); СтруктураПараметра = Новый Структура("inline_keyboard,rows", Строки, 1);
Иначе Иначе
@ -796,7 +797,7 @@
Если Не ТипЗнч(Файл) = Тип("ДвоичныеДанные") Тогда Если Не ТипЗнч(Файл) = Тип("ДвоичныеДанные") Тогда
ТекущийФайл = Новый Файл(Файл); ТекущийФайл = Новый Файл(Файл);
Расширение = ?(Вид = "document" или Вид = "animation", ТекущийФайл.Расширение, ""); Расширение = ?(Вид = "document" Или Вид = "animation", ТекущийФайл.Расширение, "");
Файл = Новый ДвоичныеДанные(Файл); Файл = Новый ДвоичныеДанные(Файл);
Иначе Иначе
Расширение = ""; Расширение = "";
@ -816,8 +817,7 @@
Ответ = OPI_Инструменты.PostMultipart("api.telegram.org/bot" Ответ = OPI_Инструменты.PostMultipart("api.telegram.org/bot"
+ Токен + Токен
+ Метод, Параметры_, СтруктураФайлов, "mixed"); + Метод, Параметры_, СтруктураФайлов, "mixed");
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции