1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2024-12-25 02:42:28 +02:00
OpenIntegrations/OInt/core/Modules/OPI_Slack.os
2024-04-17 17:07:02 +00:00

190 lines
8.6 KiB
Plaintext

// MIT License
// Copyright (c) 2023 Anton Tsitavets
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// 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
// SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations
// BSLLS:LatinAndCyrillicSymbolInWord-off
// BSLLS:IncorrectLineBreak-off
// Раскомментировать, если выполняется OneScript
#Использовать "../../tools"
#Область ПрограммныйИнтерфейс
#Область УправлениеИНастройки
// Получить информацию о боте
// Получает основную информацию о боте
//
// Параметры:
// Токен - Строка - Токен бота - token
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
Функция ПолучитьИнформациюОБоте(Знач Токен) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
URL = "https://slack.com/api/auth.test";
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Ответ = OPI_Инструменты.Get(URL, , Заголовки);
Возврат Ответ;
КонецФункции
// Получить список рабочих областей
// Получает список рабочих областей, в которых подключен бот
//
// Параметры:
// Токен - Строка - Токен бота - token
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
Функция ПолучитьСписокРабочихОбластей(Знач Токен) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
URL = "https://slack.com/api/auth.teams.list";
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Ответ = OPI_Инструменты.Get(URL, , Заголовки);
Возврат Ответ;
КонецФункции
#КонецОбласти
#Область РаботаСЧатами
// Отправить сообщение
// Отправляет сообщение в выбранный час
//
// Параметры:
// Токен - Строка - Токен бота - token
// Канал - Строка - Идентификатор канала - channel
// Текст - Строка - Текст сообщения - text
// МассивБлоков - Массив Из Структура - Массив описаний блоков - blocks - JSON массива описаний блоков
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
Функция ОтправитьСообщение(Знач Токен, Знач Канал, Знач Текст = "", Знач МассивБлоков = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Канал);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст);
ЕстьБлоки = ЗначениеЗаполнено(МассивБлоков);
URL = "https://slack.com/api/chat.postMessage";
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Параметры = Новый Структура;
Параметры.Вставить("channel", Канал);
Параметры.Вставить("text" , Текст);
Если ЕстьБлоки Тогда
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивБлоков);
Параметры.Вставить("blocks" , МассивБлоков);
КонецЕсли;
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
// Удалить сообщение
// Удаляет сообщение канала по timestamp
//
// Параметры:
// Токен - Строка - Токен бота - token
// Канал - Строка - Идентификатор канала - channel
// Отметка - Строка - Временная отметка сообщения - ts
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Slack
Функция УдалитьСообщение(Знач Токен, Знач Канал, Знач Отметка) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Канал);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Отметка);
URL = "https://slack.com/api/chat.delete";
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
Параметры = Новый Структура;
Параметры.Вставить("channel", Канал);
Параметры.Вставить("ts" , Отметка);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
#КонецОбласти
#Область ФормированиеБлоков
// Сформировать блок картинку
// Формирует блок с картинкой для добавления в массив блоков сообщения
//
// Параметры:
// URL - Строка - URL картинки
// АльтернативныйТекст - Строка - Альтернативный текст картинки
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - Блок картинки
Функция СформироватьБлокКартинку(Знач URL, Знач АльтернативныйТекст = "") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(URL);
OPI_ПреобразованиеТипов.ПолучитьСтроку(АльтернативныйТекст);
Блок = Новый Соответствие;
Блок.Вставить("type" , "image");
Блок.Вставить("image_url", URL);
Блок.Вставить("alt_text" , АльтернативныйТекст);
Возврат Блок;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ПолучитьЗаголовокАвторизации(Знач Токен)
Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "Bearer " + Токен);
Возврат Заголовки;
КонецФункции
#КонецОбласти