Compare commits

9 Commits

Author SHA1 Message Date
8a88dea2b9 Рефакторинг по замечаниям Sonarqube 2025-07-10 12:51:24 +03:00
78b1198f7a Добавил возможность сравнивания версий
- При уведомлении о неактуальных версиях производится сравнение версий
- При получении статуса конфигурации производится сравнение версий
- Вывод диагностики в случае когда текущая версия старше актуальной. Это считается ошибкой.
2025-07-10 12:25:11 +03:00
97427fb844 Отредактировал список команд в README 2025-07-09 18:50:44 +03:00
63ad60bdf8 Отредактировал список команд в README 2025-07-09 18:48:26 +03:00
869bd182cb Отредактировал список команд в README 2025-07-09 18:36:07 +03:00
ae3fe05e5d Отредактировал список команд в README 2025-07-09 18:33:02 +03:00
d904c25ce6 Отредактировал список команд в README 2025-07-09 18:30:29 +03:00
36cea3f0b0 Рефакторинг по замечаниям Sonarqube 2025-07-09 18:25:08 +03:00
ae881c62b7 Добавил новую команду в меню бота
- Добавил команду вывода справки
2025-07-09 18:17:21 +03:00
6 changed files with 146 additions and 43 deletions

View File

@@ -17,7 +17,7 @@
- 1С:Предприятие 8.3 - 1С:Предприятие 8.3
- HTTP-сервисы 1С - HTTP-сервисы 1С
- Telegram Bot API - Telegram Bot API
- Интеграция с официальным сайтом обновлений 1С (releases.1c.ru) - Интеграция по REST API с сайтом releases.1c.ru
- Проверка качества кода SonarQube - Проверка качества кода SonarQube
- Сборка проекта Jenkins - Сборка проекта Jenkins
- Отчёты Allure - Отчёты Allure
@@ -31,21 +31,18 @@
- Укажите путь к источнику: `tg_bot_1c\src\cf` - Укажите путь к источнику: `tg_bot_1c\src\cf`
- Зарегистрируйте Telegram-бота через @BotFather и получите токен. - Зарегистрируйте Telegram-бота через @BotFather и получите токен.
- Укажите токен в настройках конфигурации, раздел Администрирование. - Укажите токен в настройках конфигурации, раздел Администрирование.
- Есть возможность получать обновления в двух режимах: long polling и webhook. Режим устанавливается в настройках, раздел Администрирование. В случае использования webhook требуется публикация базы на веб-сервере. - Есть возможность получать обновления в двух режимах: `long polling` и `webhook`. Режим устанавливается в настройках, раздел Администрирование. В случае использования `webhook` требуется публикация базы на веб-сервере.
- В режиме предприятия выполните начальную инициализацию. Раздел Администрирование - Начальное заполнение данных. - В режиме предприятия выполните начальную инициализацию. Раздел Администрирование - Начальное заполнение данных.
## Поддерживаемые команды ## Поддерживаемые команды
Команда     Описание | **Команда** | **Описание** |
|:----------------- |:------------------------------------------- |
/start      Приветствие и справка | **/start** | Приветствие и справка |
| **/subscribe** | Список конфигураций для отслеживания |
/add        Подписка на отслеживание конфигурации по коду | **/add** | Добавить конфигурацию в список отслеживания |
| **/delete** | Удалить конфигурацию из списка отслеживания |
/remove     Удаление подписки | **/notify_on** | Включить уведомления о новых версиях |
| **/notify_off** | Выключить уведомления о новых версиях |
/list       Просмотр всех текущих подписок | **/status** | Вывести информацию о статусе конфигурации |
| **/help** | Вывести список поддерживаемых команд |
/check      Ручная проверка релизов
/help       Справка по командам

View File

@@ -42,7 +42,7 @@
ТелеграмРегламентВызовСервера.ЗапускПроверкиОбновлений(); ТелеграмРегламентВызовСервера.ЗапускПроверкиОбновлений();
КонецЕсли; КонецЕсли;
Если НЕ КэшЗначений.ТелеграмИспользоватьВебХук И ТекущийОбъект.ТелеграмИспользоватьВебХук Тогда Если ТекущийОбъект.ТелеграмИспользоватьВебХук Тогда
ТелеграмМетодыВызовСервера.SetWebHook(ТекущийОбъект.ТелеграмВебХук); ТелеграмМетодыВызовСервера.SetWebHook(ТекущийОбъект.ТелеграмВебХук);
КонецЕсли; КонецЕсли;

View File

@@ -41,6 +41,8 @@
ОбработатьКомандуВыключитьОповещения(ОбновлениеТелеграм); ОбработатьКомандуВыключитьОповещения(ОбновлениеТелеграм);
ИначеЕсли КомандаДляОбработки = "/status" Тогда ИначеЕсли КомандаДляОбработки = "/status" Тогда
ОбработатьКомандуСтатусКонфигурации(ОбновлениеТелеграм); ОбработатьКомандуСтатусКонфигурации(ОбновлениеТелеграм);
ИначеЕсли КомандаДляОбработки = "/help" Тогда
ОбработатьКомандуВыводаПодсказки(ОбновлениеТелеграм);
ИначеЕсли ДанныеПользователя <> Неопределено И ДанныеПользователя.СтатусДиалога = ИначеЕсли ДанныеПользователя <> Неопределено И ДанныеПользователя.СтатусДиалога =
Перечисления.ТелеграмСтатусДиалога.ОжиданиеВводаВерсии Тогда Перечисления.ТелеграмСтатусДиалога.ОжиданиеВводаВерсии Тогда
ОбработатьВводВерсииКонфигурации(ОбновлениеТелеграм, ДанныеПользователя); ОбработатьВводВерсииКонфигурации(ОбновлениеТелеграм, ДанныеПользователя);
@@ -134,11 +136,29 @@
Возврат; Возврат;
КонецЕсли; КонецЕсли;
ТекстОтвета = СтрШаблон("&#8505 %1%2 %3 &#10145 %4", РезультатСравненияВерсий = РаботаСОбновлениямиВызовСервера.СравнитьВерсииКонфигураций(
ДанныеКонфигурации.ТекущаяВерсия,
ДанныеКонфигурации.АктуальнаяВерсия);
Если РезультатСравненияВерсий <> Неопределено Тогда
Если РезультатСравненияВерсий < 0 Тогда
Диагностика = "Необходимо обновить текущую версию.";
ИначеЕсли РезультатСравненияВерсий > 0 Тогда
Диагностика = "Текущая версия не может быть старше актуальной!";
Иначе
Диагностика = "Обновление текущей версии не требуется.";
КонецЕсли;
Иначе
Диагностика = "";
КонецЕсли;
ТекстОтвета = СтрШаблон("&#8505 %1%2<code>%3</code> &#8594 <code>%4</code>%5%6",
ДанныеКонфигурации.Наименование, ДанныеКонфигурации.Наименование,
Символы.ПС, Символы.ПС,
ДанныеКонфигурации.ТекущаяВерсия, ДанныеКонфигурации.ТекущаяВерсия,
ДанныеКонфигурации.АктуальнаяВерсия); ДанныеКонфигурации.АктуальнаяВерсия,
Символы.ПС,
Диагностика);
ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета, Перечисления.ТелеграмРежимРазметки.HTML); ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета, Перечисления.ТелеграмРежимРазметки.HTML);
Иначе Иначе
@@ -218,19 +238,16 @@
Процедура ОбработатьКомандуСтарт(ОбновлениеТелеграм) Процедура ОбработатьКомандуСтарт(ОбновлениеТелеграм)
ТекстОтвета = "Привет! Я бот, который поможет тебе следить за обновлениями конфигураций 1С." + Символы.ПС ТекстОтвета = "&#128075 Привет!"
+ Символы.ВК + Символы.ПС + Символы.ПС
+ "Я - бот, который поможет тебе следить за обновлениями конфигураций 1С."
+ Символы.ПС + Символы.ВК + Символы.ПС
+ "Что я умею:" + Символы.ПС + "Что я умею:" + Символы.ПС
+ "- Отслеживать новые релизы" + Символы.ПС + "- Отслеживать новые релизы" + Символы.ПС
+ "- Присылать уведомления о выходе обновлений" + Символы.ПС + "- Присылать уведомления о выходе обновлений" + Символы.ПС
+ "- Показывать текущую информацию о статусе конфигурации" + Символы.ПС + "- Показывать текущую информацию о статусе конфигурации" + Символы.ПС
+ Символы.ВК + Символы.ПС + Символы.ПС
+ "/subscribe - Список конфигураций для отслеживания" + Символы.ПС + СписокПоддерживаемыхКоманд();
+ "/add - Добавить конфигурацию в список отслеживания" + Символы.ПС
+ "/delete - Удалить конфигурацию из списка отслеживания" + Символы.ПС
+ "/notify_on - Включить уведомления о новых версиях" + Символы.ПС
+ "/notify_off - Выключить уведомления о новых версиях" + Символы.ПС
+ "/status - Вывести информацию о статусе конфигурации";
ТелеграмМетодыВызовСервера.SendMessage(ОбновлениеТелеграм.ИдЧата, ТекстОтвета, ТелеграмМетодыВызовСервера.SendMessage(ОбновлениеТелеграм.ИдЧата, ТекстОтвета,
Перечисления.ТелеграмРежимРазметки.HTML); Перечисления.ТелеграмРежимРазметки.HTML);
@@ -330,10 +347,33 @@
Процедура ОбработатьНеизвестнуюКоманду(ОбновлениеТелеграм) Процедура ОбработатьНеизвестнуюКоманду(ОбновлениеТелеграм)
ИдЧата = ОбновлениеТелеграм.ИдЧата;
ТекстОтвета = "Данная команда не поддерживается."; ТекстОтвета = "Данная команда не поддерживается.";
ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета); ТелеграмМетодыВызовСервера.SendMessage(ОбновлениеТелеграм.ИдЧата, ТекстОтвета);
КонецПроцедуры КонецПроцедуры
Процедура ОбработатьКомандуВыводаПодсказки(ОбновлениеТелеграм)
ТекстОтвета = СписокПоддерживаемыхКоманд();
ТелеграмМетодыВызовСервера.SendMessage(ОбновлениеТелеграм.ИдЧата, ТекстОтвета,
Перечисления.ТелеграмРежимРазметки.HTML);
КонецПроцедуры
Функция СписокПоддерживаемыхКоманд()
ТекстПодсказки = "Список поддерживаемых команд:"
+ Символы.ВК + Символы.ПС
+ "/subscribe - Список конфигураций для отслеживания" + Символы.ПС
+ "/add - Добавить конфигурацию в список отслеживания" + Символы.ПС
+ "/delete - Удалить конфигурацию из списка отслеживания" + Символы.ПС
+ "/notify_on - Включить уведомления о новых версиях" + Символы.ПС
+ "/notify_off - Выключить уведомления о новых версиях" + Символы.ПС
+ "/status - Вывести информацию о статусе конфигурации" + Символы.ПС
+ "/help - Вывести список поддерживаемых команд";
Возврат ТекстПодсказки;
КонецФункции
#КонецОбласти #КонецОбласти

View File

@@ -21,17 +21,42 @@
ТекстСообщения = СтрШаблон("Следующие конфигурации имеют неактуальные версии:%1%2", Символы.ПС, Символы.ПС); ТекстСообщения = СтрШаблон("Следующие конфигурации имеют неактуальные версии:%1%2", Символы.ПС, Символы.ПС);
КонфигурацииСНекорректнымиВерсиями = Новый Массив;
Для каждого ДанныеКонфигурации Из КонфигурацииДляВывода Цикл Для каждого ДанныеКонфигурации Из КонфигурацииДляВывода Цикл
ТекстСообщения = ТекстСообщения + СтрШаблон("&#128293 %1%2 %3 &#10145 %4%5%6", Если ДанныеКонфигурации.РезультатСравнения = Неопределено Тогда
Продолжить;
ИначеЕсли ДанныеКонфигурации.РезультатСравнения > 0 Тогда
КонфигурацииСНекорректнымиВерсиями.Добавить(ДанныеКонфигурации);
Продолжить;
Иначе
ТекстСообщения = ТекстСообщения + ФорматСтрокиСообщенияОНеактуальнойВерсии("&#128293", ДанныеКонфигурации);
КонецЕсли;
КонецЦикла;
Если КонфигурацииСНекорректнымиВерсиями.Количество() > 0 Тогда
ТекстСообщения = ТекстСообщения + СтрШаблон("Внимание! Текущая конфигурация старше актуальной:%1%2",
Символы.ПС, Символы.ПС);
Для каждого ДанныеКонфигурации Из КонфигурацииСНекорректнымиВерсиями Цикл
ТекстСообщения = ТекстСообщения + ФорматСтрокиСообщенияОНеактуальнойВерсии("&#128683", ДанныеКонфигурации);
КонецЦикла;
КонецЕсли;
Возврат ТекстСообщения;
КонецФункции
Функция ФорматСтрокиСообщенияОНеактуальнойВерсии(Эмодзи, ДанныеКонфигурации)
Возврат СтрШаблон("%1 %2%3 <code>%4</code> &#8594 <code>%5</code>%6%7",
Эмодзи,
ДанныеКонфигурации.КонфигурацияПредставление, ДанныеКонфигурации.КонфигурацияПредставление,
Символы.ПС, Символы.ПС,
ДанныеКонфигурации.ТекущаяВерсия, ДанныеКонфигурации.ТекущаяВерсия,
ДанныеКонфигурации.АктуальнаяВерсия, ДанныеКонфигурации.АктуальнаяВерсия,
Символы.ПС, Символы.ПС,
Символы.ПС); Символы.ПС);
КонецЦикла;
Возврат ТекстСообщения;
КонецФункции КонецФункции

View File

@@ -255,10 +255,14 @@
ДанныеВерсийКонфигураций = Новый Массив; ДанныеВерсийКонфигураций = Новый Массив;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ВерсииКонфигурации = Новый Структура("КонфигурацияПредставление, ТекущаяВерсия, АктуальнаяВерсия", ВерсииКонфигурации = Новый Структура;
ВыборкаДетальныеЗаписи.КонфигурацияПредставление, ВерсииКонфигурации.Вставить("КонфигурацияПредставление", ВыборкаДетальныеЗаписи.КонфигурацияПредставление);
ВыборкаДетальныеЗаписи.ТекущаяВерсия, ВерсииКонфигурации.Вставить("ТекущаяВерсия", ВыборкаДетальныеЗаписи.ТекущаяВерсия);
ВерсииКонфигурации.Вставить("АктуальнаяВерсия", ВыборкаДетальныеЗаписи.АктуальнаяВерсия);
РезультатСравнения = СравнитьВерсииКонфигураций(ВыборкаДетальныеЗаписи.ТекущаяВерсия,
ВыборкаДетальныеЗаписи.АктуальнаяВерсия); ВыборкаДетальныеЗаписи.АктуальнаяВерсия);
ВерсииКонфигурации.Вставить("РезультатСравнения", РезультатСравнения);
ДанныеВерсийКонфигураций.Добавить(ВерсииКонфигурации); ДанныеВерсийКонфигураций.Добавить(ВерсииКонфигурации);
КонецЦикла; КонецЦикла;
@@ -270,6 +274,43 @@
КонецФункции КонецФункции
// Возвращает результат сравнения двух версий конфигураций: текущей и актуальной.
//
// Параметры:
// ТекущаяВерсия - Строка - версия, установленная у пользователя
// АктуальнаяВерсия - Строка - версия, полученная с сайта вендора
//
// Возвращаемое значение:
// Отрицательное число - текущая версия меньше актуальной
// Положительное число - актуальная версия меньше текущей
// Ноль - номера версий одинаковые
//
Функция СравнитьВерсииКонфигураций(ТекущаяВерсия, АктуальнаяВерсия) Экспорт
НаборГруппТекущаяВерсия = СтрРазделить(ТекущаяВерсия, ".");
НаборГруппАктуальнаяВерсия = СтрРазделить(АктуальнаяВерсия, ".");
Если НаборГруппТекущаяВерсия.Количество() = 0 ИЛИ НаборГруппАктуальнаяВерсия.Количество() = 0 Тогда
Возврат Неопределено;
КонецЕсли;
МаксИндексТекущаяВерсия = НаборГруппТекущаяВерсия.ВГраница();
МаксИндексАктуальнаяВерсия = НаборГруппАктуальнаяВерсия.ВГраница();
Для Индекс = 0 По Макс(МаксИндексТекущаяВерсия, МаксИндексАктуальнаяВерсия) Цикл
ГруппаТекущаяВерсия = ?(Индекс <= МаксИндексТекущаяВерсия, Число(НаборГруппТекущаяВерсия[Индекс]), 0);
ГруппаАктуальнаяВерсия = ?(Индекс <= МаксИндексАктуальнаяВерсия, Число(НаборГруппАктуальнаяВерсия[Индекс]), 0);
Компаратор = ГруппаТекущаяВерсия - ГруппаАктуальнаяВерсия;
Если Компаратор <> 0 Тогда
Возврат Компаратор;
КонецЕсли;
КонецЦикла;
Возврат 0;
КонецФункции
#КонецОбласти #КонецОбласти
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции

View File

@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<VERSION>40</VERSION> <VERSION>44</VERSION>