Создание хранилища конфигурации
This commit is contained in:
256
src/cf/CommonModules/ТелеграмОбщегоНазначения/Ext/Module.bsl
Normal file
256
src/cf/CommonModules/ТелеграмОбщегоНазначения/Ext/Module.bsl
Normal file
@@ -0,0 +1,256 @@
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
Функция ИдПоследнегоСообщения() Экспорт
|
||||
|
||||
Запрос = Новый Запрос;
|
||||
Запрос.Текст =
|
||||
"ВЫБРАТЬ
|
||||
| ЕСТЬNULL(МАКСИМУМ(ТелеграмСообщения.ИдСообщения), 0) КАК ИдСообщения
|
||||
|ИЗ
|
||||
| РегистрСведений.ТелеграмСообщения КАК ТелеграмСообщения";
|
||||
|
||||
РезультатЗапроса = Запрос.Выполнить();
|
||||
|
||||
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
|
||||
|
||||
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
|
||||
Возврат ВыборкаДетальныеЗаписи.ИдСообщения;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат 0;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Получить обновления, пришедшие от вебхука и сохранить в базу
|
||||
Процедура ОбработатьИСохранитьОбновленияТелеграм(ТелоЗапроса) Экспорт
|
||||
|
||||
ДанныеОбновления = HttpОбщегоНазначения.СтрокаJsonВОбъект(ТелоЗапроса);
|
||||
|
||||
Если ДанныеОбновления = Неопределено Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Если ЭтоМассивОбновлений(ДанныеОбновления) Тогда
|
||||
МассивОбновлений = ДанныеОбновления["result"];
|
||||
Для каждого Обновление Из МассивОбновлений Цикл
|
||||
ПараметрыСообщения = СтруктураСообщенияТелеграм(Обновление);
|
||||
СохранитьСообщениеВБазу(ПараметрыСообщения);
|
||||
КонецЦикла;
|
||||
ИначеЕсли ЭтоОдиночноеОбновление(ДанныеОбновления) Тогда
|
||||
ПараметрыСообщения = СтруктураСообщенияТелеграм(ДанныеОбновления);
|
||||
СохранитьСообщениеВБазу(ПараметрыСообщения);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ОбновленияТелеграм(ТелоЗапроса) Экспорт
|
||||
|
||||
ДанныеОбновления = HttpОбщегоНазначения.СтрокаJsonВОбъект(ТелоЗапроса);
|
||||
|
||||
МассивСообщенийТелеграм = Новый Массив;
|
||||
|
||||
Если ДанныеОбновления = Неопределено Тогда
|
||||
Возврат МассивСообщенийТелеграм;
|
||||
КонецЕсли;
|
||||
|
||||
Если ЭтоМассивОбновлений(ДанныеОбновления) Тогда
|
||||
МассивОбновлений = ДанныеОбновления["result"];
|
||||
Для каждого Обновление Из МассивОбновлений Цикл
|
||||
ПараметрыСообщения = СтруктураСообщенияТелеграм(Обновление);
|
||||
МассивСообщенийТелеграм.Добавить(ПараметрыСообщения)
|
||||
КонецЦикла;
|
||||
ИначеЕсли ЭтоОдиночноеОбновление(ДанныеОбновления) Тогда
|
||||
ПараметрыСообщения = СтруктураСообщенияТелеграм(Обновление);
|
||||
МассивСообщенийТелеграм.Добавить(ПараметрыСообщения)
|
||||
КонецЕсли;
|
||||
|
||||
Возврат МассивСообщенийТелеграм;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СтруктураСообщенияТелеграм(Обновление)
|
||||
|
||||
ДанныеСообщения = Обновление["message"];
|
||||
|
||||
ПараметрыСообщения = Новый Структура;
|
||||
ПараметрыСообщения.Вставить("ИдСообщения", Обновление["update_id"]);
|
||||
|
||||
Автор = АвторСообщения(ДанныеСообщения["from"]);
|
||||
ПараметрыСообщения.Вставить("Автор", Автор);
|
||||
|
||||
НовоеСообщение = ТелеграмСообщение(ДанныеСообщения, Автор);
|
||||
ПараметрыСообщения.Вставить("Сообщение", НовоеСообщение);
|
||||
|
||||
ПараметрыСообщения.Вставить("Дата", ТекущаяДатаСеанса());
|
||||
|
||||
ИдЧата = ДанныеСообщения["chat"]["id"];
|
||||
ПараметрыСообщения.Вставить("ИдЧата", ИдЧата);
|
||||
|
||||
Возврат ПараметрыСообщения;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура СохранитьСообщениеВБазу(СтруктураСообщения) Экспорт
|
||||
|
||||
МенеджерЗаписи = РегистрыСведений.ТелеграмСообщения.СоздатьМенеджерЗаписи();
|
||||
ЗаполнитьЗначенияСвойств(МенеджерЗаписи, СтруктураСообщения);
|
||||
МенеджерЗаписи.Записать();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ПолучитьФайлССервераТелеграм(ПутьКФайлуНаСервере) Экспорт
|
||||
|
||||
АдресРесурса = СтрШаблон("file/bot%1/%2", ТелеграмПовторноеИспользование.ТелеграмТокен(), ПутьКФайлуНаСервере);
|
||||
Возврат HttpОбщегоНазначения.ВыполнитьGetЗапрос(АдресРесурса,, Истина);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ДанныеДокументаПоИд(ИдДокумента) Экспорт
|
||||
|
||||
Ответ = ТелеграмМетодыВызовСервера.GetFile(ИдДокумента);
|
||||
|
||||
Если Ответ = Неопределено Тогда
|
||||
Возврат Ответ;
|
||||
КонецЕсли;
|
||||
|
||||
ДанныеФайла = HttpОбщегоНазначения.СтрокаJsonВОбъект(Ответ);
|
||||
|
||||
//Если ДанныеФайла.Получить("ok") <> Неопределено Тогда
|
||||
// Если ДанныеФайла["ok"] И ДанныеФайла.Получить["result"] <> Неопределено Тогда
|
||||
// ПутьКФайлуНаСервереТелеграм = ДанныеФайла["result"]["file_path"];
|
||||
// Возврат ПолучитьФайлССервераТелеграм(ПутьКФайлуНаСервереТелеграм);
|
||||
// Иначе
|
||||
// ЗаписьЖурналаРегистрации("Телеграм.Ошибка", УровеньЖурналаРегистрации.Ошибка,,,
|
||||
// СтрШаблон("Не удалось получить файл по id. Код ошибки %1, описание: %2", , ДанныеФайла["error_code"],
|
||||
// ДанныеФайла["description"]));
|
||||
// КонецЕсли;
|
||||
//КонецЕсли;
|
||||
|
||||
Если ДанныеФайла.Получить("result") <> Неопределено Тогда
|
||||
Возврат ПолучитьФайлССервераТелеграм(ДанныеФайла["result"]["file_path"]);
|
||||
Иначе
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция ЭтоМассивОбновлений(СоответствиеОбновления)
|
||||
|
||||
Результат = СоответствиеОбновления.Получить("ok");
|
||||
|
||||
Если Результат <> Неопределено Тогда
|
||||
Возврат Результат;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЭтоОдиночноеОбновление(СоответствиеОбновления)
|
||||
|
||||
ИдОбновления = СоответствиеОбновления.Получить("update_id");
|
||||
Сообщение = СоответствиеОбновления.Получить("message");
|
||||
|
||||
Если ИдОбновления <> Неопределено И Сообщение <> Неопределено Тогда
|
||||
Возврат Истина;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция АвторСообщения(СоответствиеОт)
|
||||
|
||||
Если СоответствиеОт.Получить("id") = Неопределено Тогда
|
||||
Возврат Справочники.ТелеграмПользователь.НеОпределен;
|
||||
КонецЕсли;
|
||||
|
||||
Автор = Справочники.ТелеграмПользователь.НайтиПоРеквизиту("id", СоответствиеОт["id"]);
|
||||
|
||||
Если Не ЗначениеЗаполнено(Автор) Тогда
|
||||
НовыйПользователь = Справочники.ТелеграмПользователь.СоздатьЭлемент();
|
||||
НовыйПользователь.Наименование = СоответствиеОт["first_name"];
|
||||
НовыйПользователь.id = СоответствиеОт["id"];
|
||||
НовыйПользователь.last_name = СоответствиеОт["last_name"];
|
||||
НовыйПользователь.username = СоответствиеОт["username"];
|
||||
НовыйПользователь.Записать();
|
||||
Автор = НовыйПользователь.Ссылка;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Автор;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ТелеграмСообщение(СообщениеДляОбработки, Автор)
|
||||
|
||||
ИдСообщения = СообщениеДляОбработки.Получить("message_id");
|
||||
|
||||
Если ИдСообщения = Неопределено Тогда
|
||||
Возврат Справочники.ТелеграмСообщение.ПустаяСсылка();
|
||||
КонецЕсли;
|
||||
|
||||
ИтоговоеСообщение = Справочники.ТелеграмСообщение.НайтиПоРеквизиту("id", ИдСообщения);
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(ИтоговоеСообщение) Тогда
|
||||
НовоеСообщение = Справочники.ТелеграмСообщение.СоздатьЭлемент();
|
||||
НовоеСообщение.Наименование = "Сообщение № " + ИдСообщения + " от " + Автор;
|
||||
НовоеСообщение.id = ИдСообщения;
|
||||
НовоеСообщение.Автор = Автор;
|
||||
Если СообщениеДляОбработки.Получить("text") <> Неопределено Тогда
|
||||
НовоеСообщение.text = СообщениеДляОбработки["text"];
|
||||
КонецЕсли;
|
||||
Если СообщениеДляОбработки.Получить("document") <> Неопределено Тогда
|
||||
НовоеСообщение.document = СформироватьДокумент(СообщениеДляОбработки["document"]);
|
||||
КонецЕсли;
|
||||
НовоеСообщение.date = TimeStampToDate(СообщениеДляОбработки["date"]);
|
||||
НовоеСообщение.Записать();
|
||||
ИтоговоеСообщение = НовоеСообщение.Ссылка;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ИтоговоеСообщение;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СформироватьДокумент(СоответствиеДокумент)
|
||||
|
||||
ИдДокумента = СоответствиеДокумент.Получить("file_unique_id");
|
||||
|
||||
Если ИдДокумента = Неопределено Тогда
|
||||
Возврат Справочники.ТелеграмДокумент.ПустаяСсылка();
|
||||
КонецЕсли;
|
||||
|
||||
ИтоговыйДокумент = Справочники.ТелеграмДокумент.НайтиПоРеквизиту("id", ИдДокумента);
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(ИтоговыйДокумент) Тогда
|
||||
НовыйДокумент = Справочники.ТелеграмДокумент.СоздатьЭлемент();
|
||||
НовыйДокумент.Наименование = СоответствиеДокумент["file_name"];
|
||||
НовыйДокумент.id = ИдДокумента;
|
||||
|
||||
НовыйДокумент.file_name = СоответствиеДокумент["file_name"];
|
||||
НовыйДокумент.mime_type = СоответствиеДокумент["mime_type"];
|
||||
НовыйДокумент.file_size = СоответствиеДокумент["file_size"];
|
||||
|
||||
ДанныеДокумента = ДанныеДокументаПоИд(СоответствиеДокумент["file_id"]);
|
||||
Если ДанныеДокумента <> Неопределено Тогда
|
||||
НовыйДокумент.ДанныеФайла = Новый ХранилищеЗначения(ДанныеДокумента);
|
||||
КонецЕсли;
|
||||
|
||||
НовыйДокумент.Записать();
|
||||
ИтоговыйДокумент = НовыйДокумент.Ссылка;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ИтоговыйДокумент;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция TimeStampToDate(ЮниксТайм)
|
||||
|
||||
Возврат Дата(1970,1,1,1,0,0) + СмещениеСтандартногоВремени(ЧасовойПоясСеанса()) + ЮниксТайм;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
Reference in New Issue
Block a user