- Реализовал обработку команд бота: добавление кофигурации, удаление конфигурации, просмотр списка подписок.
- Добавил использование callback queries - Выполнил рефакторинг общих модулей
This commit is contained in:
23
src/cf/CommonModules/БотОбщегоНазначения.xml
Normal file
23
src/cf/CommonModules/БотОбщегоНазначения.xml
Normal file
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.19">
|
||||
<CommonModule uuid="f7536eb7-75ea-449e-b9b4-7f3b5295fe84">
|
||||
<Properties>
|
||||
<Name>БотОбщегоНазначения</Name>
|
||||
<Synonym>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Бот общего назначения</v8:content>
|
||||
</v8:item>
|
||||
</Synonym>
|
||||
<Comment/>
|
||||
<Global>false</Global>
|
||||
<ClientManagedApplication>false</ClientManagedApplication>
|
||||
<Server>true</Server>
|
||||
<ExternalConnection>false</ExternalConnection>
|
||||
<ClientOrdinaryApplication>false</ClientOrdinaryApplication>
|
||||
<ServerCall>false</ServerCall>
|
||||
<Privileged>false</Privileged>
|
||||
<ReturnValuesReuse>DontUse</ReturnValuesReuse>
|
||||
</Properties>
|
||||
</CommonModule>
|
||||
</MetaDataObject>
|
||||
283
src/cf/CommonModules/БотОбщегоНазначения/Ext/Module.bsl
Normal file
283
src/cf/CommonModules/БотОбщегоНазначения/Ext/Module.bsl
Normal file
@@ -0,0 +1,283 @@
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
Процедура ОбработкаКомандыБота(Тело) Экспорт
|
||||
|
||||
МассивОбновленийТелеграм = ТелеграмОбщегоНазначения.ОбновленияТелеграм(Тело);
|
||||
Для каждого ОбновлениеТелеграм Из МассивОбновленийТелеграм Цикл
|
||||
ТелеграмОбщегоНазначения.СохранитьСообщениеВБазу(ОбновлениеТелеграм);
|
||||
|
||||
ДанныеПользователя = РаботаСОбновлениямиВызовСервера.ПолучитьДанныеПользователя(ОбновлениеТелеграм.ИдЧата);
|
||||
|
||||
Если ОбновлениеТелеграм.Свойство("ИдСообщения") Тогда
|
||||
Если ОбновлениеТелеграм.Сообщение.text = "/start" Тогда
|
||||
ОбработатьКомандуСтарт(ОбновлениеТелеграм);
|
||||
ИначеЕсли ОбновлениеТелеграм.Сообщение.text = "/subscribe" Тогда
|
||||
ОбработатьКомандуПодписки(ОбновлениеТелеграм);
|
||||
ИначеЕсли ОбновлениеТелеграм.Сообщение.text = "/add" Тогда
|
||||
ОбработатьКомандуДобавитьКонфигурацию(ОбновлениеТелеграм);
|
||||
ИначеЕсли ОбновлениеТелеграм.Сообщение.text = "/delete" Тогда
|
||||
ОбработатьКомандуУдалитьКонфигурацию(ОбновлениеТелеграм);
|
||||
ИначеЕсли ДанныеПользователя <> Неопределено
|
||||
И ДанныеПользователя.СтатусДиалога = Перечисления.ТелеграмСтатусДиалога.ОжиданиеВводаВерсии Тогда
|
||||
ОбработатьВводВерсииКонфигурации(ОбновлениеТелеграм, ДанныеПользователя);
|
||||
КонецЕсли;
|
||||
ИначеЕсли ОбновлениеТелеграм.Свойство("ИдКоллбэка") <> Неопределено Тогда
|
||||
Данные = ОбновлениеТелеграм.ДанныеКоллбэка;
|
||||
Если СтрНачинаетсяС(Данные, XMLСтрока(Перечисления.ВидыДанныхКоллбэков.AddVersion)) Тогда
|
||||
ДобавитьКонфигурациюВСписокОтслеживания(Данные, ОбновлениеТелеграм.ИдЧата);
|
||||
ИначеЕсли СтрНачинаетсяС(Данные, XMLСтрока(Перечисления.ВидыДанныхКоллбэков.DeleteVersion)) Тогда
|
||||
УдалитьКонфигурациюИзСпискаОтслеживания(Данные, ОбновлениеТелеграм.ИдЧата);
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Процедура ДобавитьКонфигурациюВСписокОтслеживания(ТекстСообщения, ИдЧата)
|
||||
|
||||
Команда = XMLСтрока(Перечисления.ВидыДанныхКоллбэков.AddVersion);
|
||||
|
||||
Если НЕ СтрНачинаетсяС(ТекстСообщения, Команда) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ИмяКонфигурации = СокрЛП(Сред(ТекстСообщения, СтрДлина(Команда) + 1));
|
||||
|
||||
Конфигурация = РаботаСОбновлениямиВызовСервера.КонфигурацияПоИмени(ИмяКонфигурации);
|
||||
|
||||
Если Конфигурация <> Неопределено Тогда
|
||||
ТекстОтвета = СтрШаблон("Отлично, добавляем в список конфигурацию ""%1"".", Конфигурация.Наименование) + Символы.ПС +
|
||||
Символы.ВК + Символы.ПС +
|
||||
"Для корректного отслеживания обновлений нужно ввести версию конфигурации (четыре группы цифр, разделённых точками):" +
|
||||
Символы.ПС +
|
||||
"Например: 3.1.30.197";
|
||||
РаботаСОбновлениямиВызовСервера.УстановитьСтатусДиалога(ИдЧата, Перечисления.ТелеграмСтатусДиалога.ОжиданиеВводаВерсии,
|
||||
ИмяКонфигурации);
|
||||
ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета,,);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура УдалитьКонфигурациюИзСпискаОтслеживания(ТекстСообщения, ИдЧата)
|
||||
|
||||
Команда = XMLСтрока(Перечисления.ВидыДанныхКоллбэков.DeleteVersion);
|
||||
Если НЕ СтрНачинаетсяС(ТекстСообщения, Команда) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ИмяКонфигурации = СокрЛП(Сред(ТекстСообщения, СтрДлина(Команда) + 1));
|
||||
|
||||
Конфигурация = РаботаСОбновлениямиВызовСервера.КонфигурацияПоИмени(ИмяКонфигурации);
|
||||
|
||||
Если Конфигурация <> Неопределено Тогда
|
||||
|
||||
МенеджерЗаписи = РегистрыСведений.ОтслеживаниеВерсийКонфигураций.СоздатьМенеджерЗаписи();
|
||||
МенеджерЗаписи.Конфигурация = Конфигурация;
|
||||
МенеджерЗаписи.ИдЧата = ИдЧата;
|
||||
Попытка
|
||||
МенеджерЗаписи.Удалить();
|
||||
ТекстОтвета = СтрШаблон("Конфигурация ""%1"" удалена из списка отслеживания", Конфигурация.Наименование);
|
||||
Исключение
|
||||
ТекстОтвета = "При удалении данных возникла ошибка";
|
||||
КонецПопытки;
|
||||
|
||||
ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета,,);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбработатьВводВерсииКонфигурации(ОбновлениеТелеграм, ДанныеПользователя)
|
||||
|
||||
ИдЧата = ОбновлениеТелеграм.ИдЧата;
|
||||
Версия = ОбновлениеТелеграм.Сообщение.text;
|
||||
|
||||
Если НЕ ВерсияКонфигурацииКорректна(Версия) Тогда
|
||||
ТекстОтвета = СтрШаблон("Вы ввели некорректный номер версии: %1%2Для корректного отслеживания обновлений нужно
|
||||
|ввести версию конфигурации(четыре группы цифр, разделённых точками):Например: 3.1.30.197.", Версия, Символы.ПС);
|
||||
ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета,,);
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Конфигурация = РаботаСОбновлениямиВызовСервера.КонфигурацияПоИмени(ДанныеПользователя.ДополнительнаяИнформация);
|
||||
Ответ = РаботаСОбновлениямиВызовСервера.АктуальнаяВерсияКонфигурации(Конфигурация, Версия);
|
||||
|
||||
Если НЕ Ответ.Успех Тогда
|
||||
ТекстОтвета = "При получении данных с сервера произошла ошибка";
|
||||
ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета,,);
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
АктуальнаяВерсия = Ответ["Тело"]["configurationUpdateResponse"]["configurationVersion"];
|
||||
|
||||
Если АктуальнаяВерсия = Неопределено Тогда
|
||||
ТекстОтвета = СтрШаблон("Для указанной версии: %1 нет данных по актуальности", Версия);
|
||||
ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета,,);
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
МенеджерЗаписи = РегистрыСведений.ОтслеживаниеВерсийКонфигураций.СоздатьМенеджерЗаписи();
|
||||
МенеджерЗаписи.Конфигурация = Конфигурация;
|
||||
МенеджерЗаписи.ИдЧата = ИдЧата;
|
||||
МенеджерЗаписи.ТекущаяВерсия = Версия;
|
||||
МенеджерЗаписи.АктуальнаяВерсия = АктуальнаяВерсия;
|
||||
Попытка
|
||||
МенеджерЗаписи.Записать();
|
||||
РаботаСОбновлениямиВызовСервера.УстановитьСтатусДиалога(ИдЧата, Перечисления.ТелеграмСтатусДиалога.НачальноеСостояние, "");
|
||||
ТекстОтвета = СтрШаблон("Версия: %1 успешно добавлена", Версия);
|
||||
Исключение
|
||||
ТекстОтвета = "При сохранении данных возникла ошибка";
|
||||
КонецПопытки;
|
||||
|
||||
ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета,,);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ВерсияКонфигурацииКорректна(Версия)
|
||||
|
||||
Попытка
|
||||
РегулярноеВыражение = "^\d+\.\d+\.\d+\.\d+$";
|
||||
Возврат СтрПодобнаПоРегулярномуВыражению(Версия, РегулярноеВыражение);
|
||||
Исключение
|
||||
МассивГруппЦифр = СтрРазделить(Версия, ".");
|
||||
Если МассивГруппЦифр.Количество() <> 4 Тогда
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
Для Каждого ГруппаЦифрВерсии Из МассивГруппЦифр Цикл
|
||||
Если Не ТолькоЦифрыВСтроке(ГруппаЦифрВерсии) Тогда
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Истина;
|
||||
КонецПопытки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ТолькоЦифрыВСтроке(Знач Значение, Знач ПробелыЗапрещены = Истина) Экспорт
|
||||
|
||||
Если ТипЗнч(Значение) <> Тип("Строка") Тогда
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
Если Не ПробелыЗапрещены Тогда
|
||||
Значение = СтрЗаменить(Значение, " ", "");
|
||||
КонецЕсли;
|
||||
|
||||
Если СтрДлина(Значение) = 0 Тогда
|
||||
Возврат Истина;
|
||||
КонецЕсли;
|
||||
|
||||
// Если содержит только цифры, то в результате замен должна быть получена пустая строка.
|
||||
// Проверять при помощи ПустаяСтрока нельзя, так как в исходной строке могут быть пробельные символы.
|
||||
Возврат СтрДлина(
|
||||
СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить(
|
||||
СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить(
|
||||
Значение, "0", ""), "1", ""), "2", ""), "3", ""), "4", ""), "5", ""), "6", ""), "7", ""), "8", ""), "9", "")) = 0;
|
||||
|
||||
КонецФункции
|
||||
|
||||
|
||||
Процедура ОбработатьКомандуСтарт(ОбновлениеТелеграм)
|
||||
|
||||
ТекстОтвета = "Привет! Я бот, который поможет тебе следить за обновлениями конфигураций 1С." + Символы.ПС +
|
||||
Символы.ВК + Символы.ПС +
|
||||
"Что я умею:" + Символы.ПС +
|
||||
"- Отслеживать новые релизы" + Символы.ПС +
|
||||
"- Присылать уведомления о выходе обновлений" + Символы.ПС +
|
||||
"- Показывать текущую версию" + Символы.ПС +
|
||||
Символы.ВК + Символы.ПС +
|
||||
"/subscribe - Список конфигураций для отслеживания" + Символы.ПС +
|
||||
"/add - Добавить конфигурацию в список отслеживания" + Символы.ПС +
|
||||
"/delete - Удалить конфигурацию из списка отслеживания";
|
||||
|
||||
ТелеграмМетодыВызовСервера.SendMessage(ОбновлениеТелеграм.ИдЧата, ТекстОтвета,,);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбработатьКомандуПодписки(ОбновлениеТелеграм)
|
||||
|
||||
СписокКонфигураций = РаботаСОбновлениямиВызовСервера.СписокКонфигураций(ОбновлениеТелеграм.ИдЧата);
|
||||
ТекстОтвета = "";
|
||||
|
||||
Если СписокКонфигураций.Количество() = 0 Тогда
|
||||
ТекстОтвета = "Не удалось получить список конфигураций";
|
||||
Иначе
|
||||
Для каждого ПунктМенюПодписки Из СписокКонфигураций Цикл
|
||||
ТекстОтвета = ТекстОтвета + СтрШаблон("%1 %2%3", ?(ПунктМенюПодписки.Подписка, "[X]", "[ ]"),
|
||||
ПунктМенюПодписки.Наименование,Символы.ПС);
|
||||
КонецЦикла;
|
||||
КонецЕсли;
|
||||
|
||||
ТелеграмМетодыВызовСервера.SendMessage(ОбновлениеТелеграм.ИдЧата, ТекстОтвета,,);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбработатьКомандуДобавитьКонфигурацию(ОбновлениеТелеграм)
|
||||
|
||||
ИдЧата = ОбновлениеТелеграм.ИдЧата;
|
||||
Команда = XMLСтрока(Перечисления.ВидыДанныхКоллбэков.AddVersion);
|
||||
|
||||
МассивРядов = МассивРядовСоСпискомКонфигураций(ИдЧата, Команда, Ложь);
|
||||
Если МассивРядов = Неопределено Тогда
|
||||
ТекстОтвета = "Не удалось получить список конфигураций";
|
||||
ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета);
|
||||
КонецЕсли;
|
||||
|
||||
Клавиатура = ТелеграмРаботаСКлавиатурой.КлавиатураВстроенная(МассивРядов);
|
||||
ТекстОтвета = "Выберите нужную конфигурацию для отслеживания обновлений";
|
||||
ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета,, Клавиатура);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбработатьКомандуУдалитьКонфигурацию(ОбновлениеТелеграм)
|
||||
|
||||
ИдЧата = ОбновлениеТелеграм.ИдЧата;
|
||||
Команда = XMLстрока(Перечисления.ВидыДанныхКоллбэков.DeleteVersion);
|
||||
|
||||
МассивРядов = МассивРядовСоСпискомКонфигураций(ИдЧата, Команда, Истина);
|
||||
Если МассивРядов = Неопределено Тогда
|
||||
ТекстОтвета = "Не удалось получить список конфигураций";
|
||||
ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета);
|
||||
КонецЕсли;
|
||||
|
||||
Клавиатура = ТелеграмРаботаСКлавиатурой.КлавиатураВстроенная(МассивРядов);
|
||||
|
||||
ТекстОтвета = "Выберите нужную конфигурацию для отмены отслеживания обновлений";
|
||||
ТелеграмМетодыВызовСервера.SendMessage(ИдЧата, ТекстОтвета,, Клавиатура);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
||||
Функция МассивРядовСоСпискомКонфигураций(ИдЧата, Команда, Подписка = Неопределено)
|
||||
|
||||
СписокКонфигураций = РаботаСОбновлениямиВызовСервера.СписокКонфигураций(ИдЧата);
|
||||
|
||||
Если СписокКонфигураций.Количество() = 0 Тогда
|
||||
Возврат Неопределено;
|
||||
Иначе
|
||||
МассивРядов = Новый Массив;
|
||||
Для каждого ПунктМенюПодписки Из СписокКонфигураций Цикл
|
||||
Если Подписка = Неопределено
|
||||
ИЛИ (Подписка И ПунктМенюПодписки.Подписка)
|
||||
ИЛИ (НЕ Подписка И НЕ ПунктМенюПодписки.Подписка) Тогда
|
||||
МассивКнопок = Новый Массив;
|
||||
МассивКнопок.Добавить(ТелеграмРаботаСКлавиатурой.КнопкаКлавиатурыВстроенной(
|
||||
ПунктМенюПодписки.Наименование
|
||||
,
|
||||
,
|
||||
СтрШаблон("%1 %2", Команда, ПунктМенюПодписки.Имя)
|
||||
));
|
||||
МассивРядов.Добавить(МассивКнопок);
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
Возврат МассивРядов;
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
Reference in New Issue
Block a user