Compare commits
2 Commits
bf54a89e2e
...
0172c538be
| Author | SHA1 | Date | |
|---|---|---|---|
| 0172c538be | |||
| 694e06f836 |
@@ -220,6 +220,90 @@
|
|||||||
<DataHistory>Use</DataHistory>
|
<DataHistory>Use</DataHistory>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Attribute>
|
</Attribute>
|
||||||
|
<Attribute uuid="7bc919dd-95d1-4865-9036-aa53d7f54290">
|
||||||
|
<Properties>
|
||||||
|
<Name>СтатусДиалога</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Статус диалога</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<Type>
|
||||||
|
<v8:Type>cfg:EnumRef.ТелеграмСтатусДиалога</v8:Type>
|
||||||
|
</Type>
|
||||||
|
<PasswordMode>false</PasswordMode>
|
||||||
|
<Format/>
|
||||||
|
<EditFormat/>
|
||||||
|
<ToolTip/>
|
||||||
|
<MarkNegatives>false</MarkNegatives>
|
||||||
|
<Mask/>
|
||||||
|
<MultiLine>false</MultiLine>
|
||||||
|
<ExtendedEdit>false</ExtendedEdit>
|
||||||
|
<MinValue xsi:nil="true"/>
|
||||||
|
<MaxValue xsi:nil="true"/>
|
||||||
|
<FillFromFillingValue>false</FillFromFillingValue>
|
||||||
|
<FillValue xsi:nil="true"/>
|
||||||
|
<FillChecking>DontCheck</FillChecking>
|
||||||
|
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
|
||||||
|
<ChoiceParameterLinks/>
|
||||||
|
<ChoiceParameters/>
|
||||||
|
<QuickChoice>Auto</QuickChoice>
|
||||||
|
<CreateOnInput>Auto</CreateOnInput>
|
||||||
|
<ChoiceForm/>
|
||||||
|
<LinkByType/>
|
||||||
|
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||||
|
<Use>ForItem</Use>
|
||||||
|
<Indexing>DontIndex</Indexing>
|
||||||
|
<FullTextSearch>Use</FullTextSearch>
|
||||||
|
<DataHistory>Use</DataHistory>
|
||||||
|
</Properties>
|
||||||
|
</Attribute>
|
||||||
|
<Attribute uuid="37de3f9a-734b-4c65-93e1-dabb9d75bf68">
|
||||||
|
<Properties>
|
||||||
|
<Name>ДополнительнаяИнформация</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Дополнительная информация</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<Type>
|
||||||
|
<v8:Type>xs:string</v8:Type>
|
||||||
|
<v8:StringQualifiers>
|
||||||
|
<v8:Length>0</v8:Length>
|
||||||
|
<v8:AllowedLength>Variable</v8:AllowedLength>
|
||||||
|
</v8:StringQualifiers>
|
||||||
|
</Type>
|
||||||
|
<PasswordMode>false</PasswordMode>
|
||||||
|
<Format/>
|
||||||
|
<EditFormat/>
|
||||||
|
<ToolTip/>
|
||||||
|
<MarkNegatives>false</MarkNegatives>
|
||||||
|
<Mask/>
|
||||||
|
<MultiLine>false</MultiLine>
|
||||||
|
<ExtendedEdit>false</ExtendedEdit>
|
||||||
|
<MinValue xsi:nil="true"/>
|
||||||
|
<MaxValue xsi:nil="true"/>
|
||||||
|
<FillFromFillingValue>false</FillFromFillingValue>
|
||||||
|
<FillValue xsi:type="xs:string"/>
|
||||||
|
<FillChecking>DontCheck</FillChecking>
|
||||||
|
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
|
||||||
|
<ChoiceParameterLinks/>
|
||||||
|
<ChoiceParameters/>
|
||||||
|
<QuickChoice>Auto</QuickChoice>
|
||||||
|
<CreateOnInput>Auto</CreateOnInput>
|
||||||
|
<ChoiceForm/>
|
||||||
|
<LinkByType/>
|
||||||
|
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||||
|
<Use>ForItem</Use>
|
||||||
|
<Indexing>DontIndex</Indexing>
|
||||||
|
<FullTextSearch>Use</FullTextSearch>
|
||||||
|
<DataHistory>Use</DataHistory>
|
||||||
|
</Properties>
|
||||||
|
</Attribute>
|
||||||
</ChildObjects>
|
</ChildObjects>
|
||||||
</Catalog>
|
</Catalog>
|
||||||
</MetaDataObject>
|
</MetaDataObject>
|
||||||
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", Команда, ПунктМенюПодписки.Имя)
|
||||||
|
));
|
||||||
|
МассивРядов.Добавить(МассивКнопок);
|
||||||
|
КонецЕсли;
|
||||||
|
КонецЦикла;
|
||||||
|
Возврат МассивРядов;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
@@ -52,6 +52,50 @@
|
|||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
|
Функция СписокКонфигураций(ИдЧата) Экспорт
|
||||||
|
|
||||||
|
Запрос = Новый Запрос;
|
||||||
|
Запрос.Текст =
|
||||||
|
"ВЫБРАТЬ РАЗЛИЧНЫЕ
|
||||||
|
| ОтслеживаниеВерсийКонфигураций.Конфигурация КАК Конфигурация,
|
||||||
|
| ОтслеживаниеВерсийКонфигураций.Конфигурация.Наименование КАК КонфигурацияНаименование,
|
||||||
|
| ОтслеживаниеВерсийКонфигураций.Конфигурация.Имя КАК КонфигурацияИмя,
|
||||||
|
| ИСТИНА КАК Подписка
|
||||||
|
|ПОМЕСТИТЬ ВТ_ОтслеживаемыеКонфигурации
|
||||||
|
|ИЗ
|
||||||
|
| РегистрСведений.ОтслеживаниеВерсийКонфигураций КАК ОтслеживаниеВерсийКонфигураций
|
||||||
|
|ГДЕ
|
||||||
|
| ОтслеживаниеВерсийКонфигураций.ИдЧата = &ИдЧата
|
||||||
|
|;
|
||||||
|
|
|
||||||
|
|////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|ВЫБРАТЬ
|
||||||
|
| Конфигурации.Наименование КАК Наименование,
|
||||||
|
| Конфигурации.Имя КАК Имя,
|
||||||
|
| ЕСТЬNULL(ВТ_ОтслеживаемыеКонфигурации.Подписка, ЛОЖЬ) КАК Подписка
|
||||||
|
|ИЗ
|
||||||
|
| Справочник.Конфигурации КАК Конфигурации
|
||||||
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОтслеживаемыеКонфигурации КАК ВТ_ОтслеживаемыеКонфигурации
|
||||||
|
| ПО (ВТ_ОтслеживаемыеКонфигурации.Конфигурация = Конфигурации.Ссылка)
|
||||||
|
|
|
||||||
|
|УПОРЯДОЧИТЬ ПО
|
||||||
|
| Подписка УБЫВ";
|
||||||
|
|
||||||
|
Запрос.УстановитьПараметр("ИдЧата", ИдЧата);
|
||||||
|
РезультатЗапроса = Запрос.Выполнить();
|
||||||
|
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
|
||||||
|
МассивКонфигураций = Новый Массив;
|
||||||
|
|
||||||
|
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
|
||||||
|
Конфигурация = Новый Структура("Наименование, Имя, Подписка", ВыборкаДетальныеЗаписи.Наименование,
|
||||||
|
ВыборкаДетальныеЗаписи.Имя, ВыборкаДетальныеЗаписи.Подписка);
|
||||||
|
|
||||||
|
МассивКонфигураций.Добавить(Конфигурация);
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат МассивКонфигураций;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
Функция АктуализироватьВерсииКонфигураций()Экспорт
|
Функция АктуализироватьВерсииКонфигураций()Экспорт
|
||||||
|
|
||||||
@@ -101,6 +145,87 @@
|
|||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
|
Функция КонфигурацияПоИмени(ИмяКонфигурации) Экспорт
|
||||||
|
|
||||||
|
Запрос = Новый Запрос;
|
||||||
|
Запрос.Текст =
|
||||||
|
"ВЫБРАТЬ
|
||||||
|
| Конфигурации.Ссылка КАК Конфигурация
|
||||||
|
|ИЗ
|
||||||
|
| Справочник.Конфигурации КАК Конфигурации
|
||||||
|
|ГДЕ
|
||||||
|
| Конфигурации.Имя = &Имя";
|
||||||
|
|
||||||
|
Запрос.УстановитьПараметр("Имя", ИмяКонфигурации);
|
||||||
|
|
||||||
|
РезультатЗапроса = Запрос.Выполнить();
|
||||||
|
|
||||||
|
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
|
||||||
|
|
||||||
|
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
|
||||||
|
Возврат ВыборкаДетальныеЗаписи.Конфигурация;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Неопределено;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Процедура УстановитьСтатусДиалога(ИдЧата, НовыйСтатус, ДополнительнаяИнформация) Экспорт
|
||||||
|
|
||||||
|
Запрос = Новый Запрос;
|
||||||
|
Запрос.Текст =
|
||||||
|
"ВЫБРАТЬ
|
||||||
|
| ТелеграмПользователь.Ссылка КАК Ссылка,
|
||||||
|
| ТелеграмПользователь.СтатусДиалога КАК СтатусДиалога
|
||||||
|
|ИЗ
|
||||||
|
| Справочник.ТелеграмПользователь КАК ТелеграмПользователь
|
||||||
|
|ГДЕ
|
||||||
|
| ТелеграмПользователь.id = &ИдЧата";
|
||||||
|
|
||||||
|
Запрос.УстановитьПараметр("ИдЧата", ИдЧата);
|
||||||
|
|
||||||
|
РезультатЗапроса = Запрос.Выполнить();
|
||||||
|
|
||||||
|
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
|
||||||
|
|
||||||
|
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
|
||||||
|
ПользовательОбъект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
|
||||||
|
Если ПользовательОбъект <> Неопределено Тогда
|
||||||
|
ПользовательОбъект.СтатусДиалога = НовыйСтатус;
|
||||||
|
ПользовательОбъект.ДополнительнаяИнформация = ДополнительнаяИнформация;
|
||||||
|
ПользовательОбъект.Записать();
|
||||||
|
КонецЕсли;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Функция ПолучитьДанныеПользователя(ИдЧата) Экспорт
|
||||||
|
|
||||||
|
Запрос = Новый Запрос;
|
||||||
|
Запрос.Текст =
|
||||||
|
"ВЫБРАТЬ
|
||||||
|
| ТелеграмПользователь.СтатусДиалога КАК СтатусДиалога,
|
||||||
|
| ТелеграмПользователь.ДополнительнаяИнформация КАК ДополнительнаяИнформация
|
||||||
|
|ИЗ
|
||||||
|
| Справочник.ТелеграмПользователь КАК ТелеграмПользователь
|
||||||
|
|ГДЕ
|
||||||
|
| ТелеграмПользователь.id = &ИдЧата";
|
||||||
|
|
||||||
|
Запрос.УстановитьПараметр("ИдЧата", ИдЧата);
|
||||||
|
|
||||||
|
РезультатЗапроса = Запрос.Выполнить();
|
||||||
|
|
||||||
|
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
|
||||||
|
|
||||||
|
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
|
||||||
|
Возврат Новый Структура("СтатусДиалога, ДополнительнаяИнформация", ВыборкаДетальныеЗаписи.СтатусДиалога,
|
||||||
|
ВыборкаДетальныеЗаписи.ДополнительнаяИнформация);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Неопределено;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
|
|
||||||
#Область СлужебныеПроцедурыИФункции
|
#Область СлужебныеПроцедурыИФункции
|
||||||
|
|||||||
@@ -66,7 +66,11 @@
|
|||||||
МассивСообщенийТелеграм.Добавить(ПараметрыСообщения)
|
МассивСообщенийТелеграм.Добавить(ПараметрыСообщения)
|
||||||
КонецЦикла;
|
КонецЦикла;
|
||||||
ИначеЕсли ЭтоОдиночноеОбновление(ДанныеОбновления) Тогда
|
ИначеЕсли ЭтоОдиночноеОбновление(ДанныеОбновления) Тогда
|
||||||
ПараметрыСообщения = СтруктураСообщенияТелеграм(Обновление);
|
Если ДанныеОбновления.Получить("message") <> Неопределено Тогда
|
||||||
|
ПараметрыСообщения = СтруктураСообщенияТелеграм(ДанныеОбновления);
|
||||||
|
ИначеЕсли ДанныеОбновления.Получить("callback_query") <> Неопределено Тогда
|
||||||
|
ПараметрыСообщения = СтруктураКоллбэкЗапроса(ДанныеОбновления);
|
||||||
|
КонецЕсли;
|
||||||
МассивСообщенийТелеграм.Добавить(ПараметрыСообщения)
|
МассивСообщенийТелеграм.Добавить(ПараметрыСообщения)
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
@@ -96,6 +100,33 @@
|
|||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
|
Функция СтруктураКоллбэкЗапроса(Обновление)
|
||||||
|
|
||||||
|
ДанныеСообщения = Обновление["callback_query"];
|
||||||
|
|
||||||
|
ПараметрыСообщения = Новый Структура;
|
||||||
|
ПараметрыСообщения.Вставить("ИдКоллбэкЗапроса", Обновление["update_id"]);
|
||||||
|
|
||||||
|
Автор = АвторСообщения(ДанныеСообщения["from"]);
|
||||||
|
ПараметрыСообщения.Вставить("Автор", Автор);
|
||||||
|
|
||||||
|
Если ДанныеСообщения.Получить("message") <> Неопределено Тогда
|
||||||
|
НовоеСообщение = ТелеграмСообщение(ДанныеСообщения["message"], Автор);
|
||||||
|
ПараметрыСообщения.Вставить("Сообщение", НовоеСообщение);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ПараметрыСообщения.Вставить("Дата", ТекущаяДатаСеанса());
|
||||||
|
|
||||||
|
ИдЧата = Автор.id;
|
||||||
|
ПараметрыСообщения.Вставить("ИдЧата", ИдЧата);
|
||||||
|
|
||||||
|
ДанныеКоллбэка = ДанныеСообщения["data"];
|
||||||
|
ПараметрыСообщения.Вставить("ДанныеКоллбэка", ДанныеКоллбэка);
|
||||||
|
|
||||||
|
Возврат ПараметрыСообщения;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
Процедура СохранитьСообщениеВБазу(СтруктураСообщения) Экспорт
|
Процедура СохранитьСообщениеВБазу(СтруктураСообщения) Экспорт
|
||||||
|
|
||||||
МенеджерЗаписи = РегистрыСведений.ТелеграмСообщения.СоздатьМенеджерЗаписи();
|
МенеджерЗаписи = РегистрыСведений.ТелеграмСообщения.СоздатьМенеджерЗаписи();
|
||||||
@@ -144,8 +175,9 @@
|
|||||||
|
|
||||||
ИдОбновления = СоответствиеОбновления.Получить("update_id");
|
ИдОбновления = СоответствиеОбновления.Получить("update_id");
|
||||||
Сообщение = СоответствиеОбновления.Получить("message");
|
Сообщение = СоответствиеОбновления.Получить("message");
|
||||||
|
КоллбэкЗапрос = СоответствиеОбновления.Получить("callback_query");
|
||||||
|
|
||||||
Если ИдОбновления <> Неопределено И Сообщение <> Неопределено Тогда
|
Если ИдОбновления <> Неопределено И (Сообщение <> Неопределено ИЛИ КоллбэкЗапрос <> Неопределено) Тогда
|
||||||
Возврат Истина;
|
Возврат Истина;
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,35 @@
|
|||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
Функция КнопкаКлавиатуры(Надпись) Экспорт
|
Функция КлавиатураВстроенная(Клавиатура) Экспорт
|
||||||
|
|
||||||
|
СоответствиеКлавиатуры = Новый Соответствие();
|
||||||
|
|
||||||
|
СоответствиеКлавиатуры.Вставить("inline_keyboard", Клавиатура);
|
||||||
|
|
||||||
|
Возврат СоответствиеКлавиатуры;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
|
||||||
|
Функция КнопкаКлавиатурыВстроенной(Надпись, Url = Неопределено, CallbackData = Неопределено) Экспорт
|
||||||
|
|
||||||
|
СоответствиеКнопка = Новый Соответствие;
|
||||||
|
СоответствиеКнопка.Вставить("text", ?(НЕ ЗначениеЗаполнено(Надпись), "<?>", Надпись));
|
||||||
|
|
||||||
|
Если Url <> Неопределено Тогда
|
||||||
|
СоответствиеКнопка.Вставить("url", Url);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если CallbackData <> Неопределено Тогда
|
||||||
|
СоответствиеКнопка.Вставить("callback_data", CallbackData);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат СоответствиеКнопка;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция КнопкаКлавиатурыОтвета(Надпись) Экспорт
|
||||||
|
|
||||||
СоответствиеКнопка = Новый Соответствие;
|
СоответствиеКнопка = Новый Соответствие;
|
||||||
СоответствиеКнопка.Вставить("text", ?(НЕ ЗначениеЗаполнено(Надпись), "<?>", Надпись));
|
СоответствиеКнопка.Вставить("text", ?(НЕ ЗначениеЗаполнено(Надпись), "<?>", Надпись));
|
||||||
@@ -34,7 +62,7 @@
|
|||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
Для каждого НадписьКнопки Из МассивНаименованийКнопок Цикл
|
Для каждого НадписьКнопки Из МассивНаименованийКнопок Цикл
|
||||||
Результат.Добавить(КнопкаКлавиатуры(НадписьКнопки));
|
Результат.Добавить(КнопкаКлавиатурыОтвета(НадписьКнопки));
|
||||||
КонецЦикла;
|
КонецЦикла;
|
||||||
|
|
||||||
Возврат Результат;
|
Возврат Результат;
|
||||||
|
|||||||
@@ -249,13 +249,14 @@
|
|||||||
<Subsystem>Обновления</Subsystem>
|
<Subsystem>Обновления</Subsystem>
|
||||||
<CommonPicture>КартинкаБот</CommonPicture>
|
<CommonPicture>КартинкаБот</CommonPicture>
|
||||||
<CommonModule>HttpОбщегоНазначения</CommonModule>
|
<CommonModule>HttpОбщегоНазначения</CommonModule>
|
||||||
|
<CommonModule>РаботаСОбновлениямиВызовСервера</CommonModule>
|
||||||
|
<CommonModule>РаботаСФайламиКлиентСервер</CommonModule>
|
||||||
<CommonModule>ТелеграмМетодыВызовСервера</CommonModule>
|
<CommonModule>ТелеграмМетодыВызовСервера</CommonModule>
|
||||||
<CommonModule>ТелеграмОбщегоНазначения</CommonModule>
|
<CommonModule>ТелеграмОбщегоНазначения</CommonModule>
|
||||||
<CommonModule>ТелеграмПовторноеИспользование</CommonModule>
|
<CommonModule>ТелеграмПовторноеИспользование</CommonModule>
|
||||||
<CommonModule>ТелеграмРегламент</CommonModule>
|
|
||||||
<CommonModule>РаботаСФайламиКлиентСервер</CommonModule>
|
|
||||||
<CommonModule>ТелеграмРаботаСКлавиатурой</CommonModule>
|
<CommonModule>ТелеграмРаботаСКлавиатурой</CommonModule>
|
||||||
<CommonModule>РаботаСОбновлениямиВызовСервера</CommonModule>
|
<CommonModule>ТелеграмРегламент</CommonModule>
|
||||||
|
<CommonModule>БотОбщегоНазначения</CommonModule>
|
||||||
<HTTPService>HTTPСервис_Telegram</HTTPService>
|
<HTTPService>HTTPСервис_Telegram</HTTPService>
|
||||||
<ScheduledJob>ПроверкаОбновленийТелеграм</ScheduledJob>
|
<ScheduledJob>ПроверкаОбновленийТелеграм</ScheduledJob>
|
||||||
<Constant>ТелеграмТокен</Constant>
|
<Constant>ТелеграмТокен</Constant>
|
||||||
@@ -269,6 +270,8 @@
|
|||||||
<Document>ЛогHttpЗапроса</Document>
|
<Document>ЛогHttpЗапроса</Document>
|
||||||
<Enum>МетодHTTPЗапроса</Enum>
|
<Enum>МетодHTTPЗапроса</Enum>
|
||||||
<Enum>ТелеграмРежимРазметки</Enum>
|
<Enum>ТелеграмРежимРазметки</Enum>
|
||||||
|
<Enum>ТелеграмСтатусДиалога</Enum>
|
||||||
|
<Enum>ВидыДанныхКоллбэков</Enum>
|
||||||
<DataProcessor>РаботаССообщениями</DataProcessor>
|
<DataProcessor>РаботаССообщениями</DataProcessor>
|
||||||
<DataProcessor>РаботаСОбновлениями</DataProcessor>
|
<DataProcessor>РаботаСОбновлениями</DataProcessor>
|
||||||
<InformationRegister>ТелеграмСообщения</InformationRegister>
|
<InformationRegister>ТелеграмСообщения</InformationRegister>
|
||||||
|
|||||||
@@ -11,47 +11,116 @@
|
|||||||
|
|
||||||
Ответ = ТелеграмМетодыВызовСервера.GetUpdates();
|
Ответ = ТелеграмМетодыВызовСервера.GetUpdates();
|
||||||
|
|
||||||
Если Ответ.Успех Тогда
|
БотОбщегоНазначения.ОбработкаКомандыБота(Ответ);
|
||||||
//МассивРядов = Новый Массив;
|
|
||||||
//МассивКнопок = ТелеграмРаботаСКлавиатурой.РядКнопок("один;два;три");
|
//Если Ответ.Успех Тогда
|
||||||
//МассивРядов.Добавить(МассивКнопок);
|
|
||||||
//МассивКнопок = ТелеграмРаботаСКлавиатурой.РядКнопок("Выбрать конфигурацию;Актуальная версия;Калькулятор обновлений");
|
|
||||||
//МассивРядов.Добавить(МассивКнопок);
|
|
||||||
//Клавиатура = ТелеграмРаботаСКлавиатурой.КлавиатураОтвета(МассивРядов, Истина, Истина);
|
|
||||||
//
|
|
||||||
// МассивСообщенийТелеграм = ТелеграмОбщегоНазначения.ОбновленияТелеграм(Ответ.Тело);
|
// МассивСообщенийТелеграм = ТелеграмОбщегоНазначения.ОбновленияТелеграм(Ответ.Тело);
|
||||||
// Для каждого СообщениеТелеграм Из МассивСообщенийТелеграм Цикл
|
// Для каждого СообщениеТелеграм Из МассивСообщенийТелеграм Цикл
|
||||||
// ТелеграмОбщегоНазначения.СохранитьСообщениеВБазу(СообщениеТелеграм);
|
// ТелеграмОбщегоНазначения.СохранитьСообщениеВБазу(СообщениеТелеграм);
|
||||||
// ТелеграмМетодыВызовСервера.SendMessage(СообщениеТелеграм.ИдЧата, СообщениеТелеграм.Сообщение.text, Клавиатура);
|
//
|
||||||
|
// Если СообщениеТелеграм.Сообщение.text = "/start" Тогда
|
||||||
|
// ТекстОтвета = "Привет! Я бот, который поможет тебе следить за обновлениями конфигураций 1С." + Символы.ПС +
|
||||||
|
// Символы.ВК + Символы.ПС +
|
||||||
|
// "Что я умею:" + Символы.ПС +
|
||||||
|
// "- Отслеживать новые релизы" + Символы.ПС +
|
||||||
|
// "- Присылать уведомления о выходе обновлений" + Символы.ПС +
|
||||||
|
// "- Показывать текущую версию" + Символы.ПС +
|
||||||
|
// Символы.ВК + Символы.ПС +
|
||||||
|
// "/subscribe - Список конфигураций для отслеживания" + Символы.ПС +
|
||||||
|
// "/add - Добавить конфигурацию в список отслеживания" + Символы.ПС +
|
||||||
|
// "/delete - Удалить конфигурацию из списка отслеживания" + Символы.ПС +
|
||||||
|
// Символы.ВК + Символы.ПС +
|
||||||
|
// "/help — Помощь";
|
||||||
|
//
|
||||||
|
// ТелеграмМетодыВызовСервера.SendMessage(СообщениеТелеграм.ИдЧата, ТекстОтвета,,);
|
||||||
|
// ИначеЕсли СообщениеТелеграм.Сообщение.text = "/subscribe" Тогда
|
||||||
|
// КонфигурацииДляВыбора = РаботаСОбновлениямиВызовСервера.КонфигурацииДляВыбора(СообщениеТелеграм.ИдЧата);
|
||||||
|
//
|
||||||
|
// Если КонфигурацииДляВыбора.Количество() = 0 Тогда
|
||||||
|
// ТекстОтвета = "Не удалось получить список конфигураций";
|
||||||
|
// Иначе
|
||||||
|
// ТекстОтвета = "";
|
||||||
|
// Для каждого ПунктМенюПодписки Из КонфигурацииДляВыбора Цикл
|
||||||
|
// ТекстОтвета = ТекстОтвета + СтрШаблон("%1 %2%3", ?(ПунктМенюПодписки.Подписка, "[X]", "[ ]"),
|
||||||
|
// ПунктМенюПодписки.Наименование,Символы.ПС);
|
||||||
// КонецЦикла;
|
// КонецЦикла;
|
||||||
|
// КонецЕсли;
|
||||||
МассивСообщенийТелеграм = ТелеграмОбщегоНазначения.ОбновленияТелеграм(Ответ.Тело);
|
//
|
||||||
Для каждого СообщениеТелеграм Из МассивСообщенийТелеграм Цикл
|
// ТелеграмМетодыВызовСервера.SendMessage(СообщениеТелеграм.ИдЧата, ТекстОтвета,,);
|
||||||
ТелеграмОбщегоНазначения.СохранитьСообщениеВБазу(СообщениеТелеграм);
|
// ИначеЕсли СообщениеТелеграм.Сообщение.text = "/add" Тогда
|
||||||
Если СообщениеТелеграм.Сообщение.text = "Конфигурации" Тогда
|
// КонфигурацииДляВыбора = РаботаСОбновлениямиВызовСервера.КонфигурацииДляВыбора(СообщениеТелеграм.ИдЧата);
|
||||||
ТекстОтвета = "Комплексная автоматизация" + Символы.ПС +
|
//
|
||||||
"Бухгалтерия предприятия" + Символы.ПС +
|
// Если КонфигурацииДляВыбора.Количество() = 0 Тогда
|
||||||
"Зарплата и управление персоналом" + Символы.ПС +
|
// ТекстОтвета = "Не удалось получить список конфигураций";
|
||||||
"Управление торговлей";
|
// Иначе
|
||||||
|
// МассивРядов = Новый Массив;
|
||||||
ТелеграмМетодыВызовСервера.SendMessage(СообщениеТелеграм.ИдЧата, ТекстОтвета);
|
// ТекстОтвета = "Выберите нужную конфигурацию для отслеживания обновлений";
|
||||||
ИначеЕсли СообщениеТелеграм.Сообщение.text = "Подписки" Тогда
|
// Для каждого ПунктМенюПодписки Из КонфигурацииДляВыбора Цикл
|
||||||
МассивПодписок = РаботаСОбновлениямиВызовСервера.КонфигурацииИзПодписки(СообщениеТелеграм.ИдЧата);
|
// Если НЕ ПунктМенюПодписки.Подписка Тогда
|
||||||
ТекстОтвета = "";
|
// МассивКнопок = Новый Массив;
|
||||||
Для каждого Конфигурация Из МассивПодписок Цикл
|
// МассивКнопок.Добавить(ТелеграмРаботаСКлавиатурой.КнопкаКлавиатуры
|
||||||
ТекстОтвета = ТекстОтвета + СтрШаблон("%1(%2)%3",Конфигурация.Наименование, Конфигурация.ТекущаяВерсия, Символы.ПС);
|
// ("/add_conf " + ПунктМенюПодписки.Наименование));
|
||||||
КонецЦикла;
|
// МассивРядов.Добавить(МассивКнопок);
|
||||||
ТелеграмМетодыВызовСервера.SendMessage(СообщениеТелеграм.ИдЧата, ТекстОтвета);
|
// КонецЕсли;
|
||||||
КонецЕсли;
|
// КонецЦикла;
|
||||||
//ТелеграмМетодыВызовСервера.SendMessage(СообщениеТелеграм.ИдЧата, СообщениеТелеграм.Сообщение.text);
|
// КонецЕсли;
|
||||||
КонецЦикла;
|
//
|
||||||
|
// Клавиатура = ТелеграмРаботаСКлавиатурой.КлавиатураОтвета(МассивРядов, Истина, Истина);
|
||||||
КонецЕсли;
|
// ТелеграмМетодыВызовСервера.SendMessage(СообщениеТелеграм.ИдЧата, ТекстОтвета,,Клавиатура);
|
||||||
|
// ИначеЕсли СтрНачинаетсяС(СообщениеТелеграм.Сообщение.text, "/add_conf") Тогда
|
||||||
|
// Результат = ДобавитьКонфигурациюВСписокОтслеживания(СообщениеТелеграм.Сообщение.text, СообщениеТелеграм.ИдЧата);
|
||||||
|
// КонецЕсли;
|
||||||
|
// КонецЦикла;
|
||||||
|
//КонецЕсли;
|
||||||
|
|
||||||
Возврат Ответ;
|
Возврат Ответ;
|
||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
|
//&НаСервереБезКонтекста
|
||||||
|
//Функция ДобавитьКонфигурациюВСписокОтслеживания(ТекстСообщения, ИдЧата)
|
||||||
|
//
|
||||||
|
// КомандаДобавленияКонфигурации = "/add_conf";
|
||||||
|
//
|
||||||
|
// Если НЕ СтрНачинаетсяС(ТекстСообщения, КомандаДобавленияКонфигурации) Тогда
|
||||||
|
// Возврат Ложь;
|
||||||
|
// КонецЕсли;
|
||||||
|
//
|
||||||
|
// НаименованиеКонфигурации = СокрЛП(Сред(ТекстСообщения, СтрДлина(КомандаДобавленияКонфигурации) + 1,
|
||||||
|
// СтрДлина(ТекстСообщения) - СтрДлина(КомандаДобавленияКонфигурации)+ 1));
|
||||||
|
//
|
||||||
|
// Запрос = Новый Запрос;
|
||||||
|
// Запрос.Текст =
|
||||||
|
// "ВЫБРАТЬ
|
||||||
|
// | Конфигурации.Ссылка КАК Конфигурация,
|
||||||
|
// | &ИдЧата КАК ИдЧата,
|
||||||
|
// | &ТекущаяВерсия КАК ТекущаяВерсия,
|
||||||
|
// | &АктуальнаяВерсия КАК АктуальнаяВерсия
|
||||||
|
// |ИЗ
|
||||||
|
// | Справочник.Конфигурации КАК Конфигурации
|
||||||
|
// |ГДЕ
|
||||||
|
// | Конфигурации.Наименование ПОДОБНО ""%"" + &Наименование + ""%""";
|
||||||
|
//
|
||||||
|
// Запрос.УстановитьПараметр("Наименование", НаименованиеКонфигурации);
|
||||||
|
// Запрос.УстановитьПараметр("ИдЧата", ИдЧата);
|
||||||
|
// Запрос.УстановитьПараметр("ТекущаяВерсия", "1.1.1.1");
|
||||||
|
// Запрос.УстановитьПараметр("АктуальнаяВерсия", "1.2.3.4");
|
||||||
|
//
|
||||||
|
// РезультатЗапроса = Запрос.Выполнить();
|
||||||
|
//
|
||||||
|
// ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
|
||||||
|
//
|
||||||
|
// Если ВыборкаДетальныеЗаписи.Следующий() Тогда
|
||||||
|
// МенеджерЗаписи = РегистрыСведений.ОтслеживаниеВерсийКонфигураций.СоздатьМенеджерЗаписи();
|
||||||
|
// ЗаполнитьЗначенияСвойств(МенеджерЗаписи, ВыборкаДетальныеЗаписи);
|
||||||
|
// МенеджерЗаписи.Записать();
|
||||||
|
// Возврат Истина;
|
||||||
|
// КонецЕсли;
|
||||||
|
//
|
||||||
|
// Возврат Ложь;
|
||||||
|
//
|
||||||
|
//КонецФункции
|
||||||
|
|
||||||
&НаКлиенте
|
&НаКлиенте
|
||||||
Процедура getWebhookInfo(Команда)
|
Процедура getWebhookInfo(Команда)
|
||||||
|
|
||||||
@@ -208,3 +277,4 @@
|
|||||||
Возврат БиблиотекаКартинок.КартинкаБот.ПолучитьДвоичныеДанные();
|
Возврат БиблиотекаКартинок.КартинкаБот.ПолучитьДвоичныеДанные();
|
||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
|
|||||||
67
src/cf/Enums/ВидыДанныхКоллбэков.xml
Normal file
67
src/cf/Enums/ВидыДанныхКоллбэков.xml
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
<?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">
|
||||||
|
<Enum uuid="49b74ca2-e1cc-4ac3-9da2-d2e3c99a5044">
|
||||||
|
<InternalInfo>
|
||||||
|
<xr:GeneratedType name="EnumRef.ВидыДанныхКоллбэков" category="Ref">
|
||||||
|
<xr:TypeId>faee0c1e-a312-43c8-8af2-20618cc53904</xr:TypeId>
|
||||||
|
<xr:ValueId>b6d6ee51-fdfe-47bd-bc31-3147751dc7fc</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="EnumManager.ВидыДанныхКоллбэков" category="Manager">
|
||||||
|
<xr:TypeId>268e63a6-adc9-4961-9d35-92c1ddc296e3</xr:TypeId>
|
||||||
|
<xr:ValueId>6e68fa9a-2345-462c-98d4-6c31908cb17b</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="EnumList.ВидыДанныхКоллбэков" category="List">
|
||||||
|
<xr:TypeId>6bf0eedb-c7aa-4a05-ae0f-3900e6b21ff7</xr:TypeId>
|
||||||
|
<xr:ValueId>7947dc7b-96c2-4672-8ebe-c48dba063c3e</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
</InternalInfo>
|
||||||
|
<Properties>
|
||||||
|
<Name>ВидыДанныхКоллбэков</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Виды данных коллбэков</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<UseStandardCommands>false</UseStandardCommands>
|
||||||
|
<Characteristics/>
|
||||||
|
<QuickChoice>true</QuickChoice>
|
||||||
|
<ChoiceMode>BothWays</ChoiceMode>
|
||||||
|
<DefaultListForm/>
|
||||||
|
<DefaultChoiceForm/>
|
||||||
|
<AuxiliaryListForm/>
|
||||||
|
<AuxiliaryChoiceForm/>
|
||||||
|
<ListPresentation/>
|
||||||
|
<ExtendedListPresentation/>
|
||||||
|
<Explanation/>
|
||||||
|
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||||
|
</Properties>
|
||||||
|
<ChildObjects>
|
||||||
|
<EnumValue uuid="e9994e9e-2232-4446-9340-1a27a3b395b1">
|
||||||
|
<Properties>
|
||||||
|
<Name>AddVersion</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Add version</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
</Properties>
|
||||||
|
</EnumValue>
|
||||||
|
<EnumValue uuid="cd9b7c80-8053-495b-aa4d-a1a7b838ee62">
|
||||||
|
<Properties>
|
||||||
|
<Name>DeleteVersion</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Delete version</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
</Properties>
|
||||||
|
</EnumValue>
|
||||||
|
</ChildObjects>
|
||||||
|
</Enum>
|
||||||
|
</MetaDataObject>
|
||||||
67
src/cf/Enums/ТелеграмСтатусДиалога.xml
Normal file
67
src/cf/Enums/ТелеграмСтатусДиалога.xml
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
<?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">
|
||||||
|
<Enum uuid="2493ff18-0aaf-485d-bb57-d22fb2391ca0">
|
||||||
|
<InternalInfo>
|
||||||
|
<xr:GeneratedType name="EnumRef.ТелеграмСтатусДиалога" category="Ref">
|
||||||
|
<xr:TypeId>cf2bd22c-53f7-4ac4-b9cd-481d538fa00e</xr:TypeId>
|
||||||
|
<xr:ValueId>6d902a2a-3f17-4fd5-b737-7026d967c7b8</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="EnumManager.ТелеграмСтатусДиалога" category="Manager">
|
||||||
|
<xr:TypeId>8db25e5c-a1bf-4d76-aec6-db62437baabf</xr:TypeId>
|
||||||
|
<xr:ValueId>70ab63bd-a1f5-4a77-9a44-aa12047391a8</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="EnumList.ТелеграмСтатусДиалога" category="List">
|
||||||
|
<xr:TypeId>392a66d6-1ea8-4044-b85f-a259b75aea29</xr:TypeId>
|
||||||
|
<xr:ValueId>f4d001cd-6eda-4cf1-b3a4-124be40377dd</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
</InternalInfo>
|
||||||
|
<Properties>
|
||||||
|
<Name>ТелеграмСтатусДиалога</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Телеграм статус диалога</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<UseStandardCommands>false</UseStandardCommands>
|
||||||
|
<Characteristics/>
|
||||||
|
<QuickChoice>true</QuickChoice>
|
||||||
|
<ChoiceMode>BothWays</ChoiceMode>
|
||||||
|
<DefaultListForm/>
|
||||||
|
<DefaultChoiceForm/>
|
||||||
|
<AuxiliaryListForm/>
|
||||||
|
<AuxiliaryChoiceForm/>
|
||||||
|
<ListPresentation/>
|
||||||
|
<ExtendedListPresentation/>
|
||||||
|
<Explanation/>
|
||||||
|
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||||
|
</Properties>
|
||||||
|
<ChildObjects>
|
||||||
|
<EnumValue uuid="98b22f32-3bf7-477a-9b02-e7633e1b63f2">
|
||||||
|
<Properties>
|
||||||
|
<Name>НачальноеСостояние</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Начальное состояние</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
</Properties>
|
||||||
|
</EnumValue>
|
||||||
|
<EnumValue uuid="9df045ba-f23b-466d-95da-56c46e2fcaf7">
|
||||||
|
<Properties>
|
||||||
|
<Name>ОжиданиеВводаВерсии</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Ожидание ввода версии</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
</Properties>
|
||||||
|
</EnumValue>
|
||||||
|
</ChildObjects>
|
||||||
|
</Enum>
|
||||||
|
</MetaDataObject>
|
||||||
@@ -2,7 +2,8 @@
|
|||||||
Функция ШаблонURL1PostGetUpdate(Запрос)
|
Функция ШаблонURL1PostGetUpdate(Запрос)
|
||||||
|
|
||||||
Попытка
|
Попытка
|
||||||
ТелеграмОбщегоНазначения.ОбработатьИСохранитьОбновленияТелеграм(Запрос.ПолучитьТелоКакСтроку());
|
//ТелеграмОбщегоНазначения.ОбработатьИСохранитьОбновленияТелеграм(Запрос.ПолучитьТелоКакСтроку());
|
||||||
|
БотОбщегоНазначения.ОбработкаКомандыБота(Запрос.ПолучитьТелоКакСтроку());
|
||||||
Ответ = HttpОбщегоНазначения.ОтветУспех();
|
Ответ = HttpОбщегоНазначения.ОтветУспех();
|
||||||
Возврат Ответ;
|
Возврат Ответ;
|
||||||
Исключение
|
Исключение
|
||||||
|
|||||||
@@ -19,6 +19,8 @@
|
|||||||
<xr:Item xsi:type="xr:MDObjectRef">DataProcessor.РаботаСОбновлениями</xr:Item>
|
<xr:Item xsi:type="xr:MDObjectRef">DataProcessor.РаботаСОбновлениями</xr:Item>
|
||||||
<xr:Item xsi:type="xr:MDObjectRef">InformationRegister.ОтслеживаниеВерсийКонфигураций</xr:Item>
|
<xr:Item xsi:type="xr:MDObjectRef">InformationRegister.ОтслеживаниеВерсийКонфигураций</xr:Item>
|
||||||
<xr:Item xsi:type="xr:MDObjectRef">Catalog.Конфигурации</xr:Item>
|
<xr:Item xsi:type="xr:MDObjectRef">Catalog.Конфигурации</xr:Item>
|
||||||
|
<xr:Item xsi:type="xr:MDObjectRef">Enum.ТелеграмСтатусДиалога</xr:Item>
|
||||||
|
<xr:Item xsi:type="xr:MDObjectRef">Enum.ВидыДанныхКоллбэков</xr:Item>
|
||||||
</Content>
|
</Content>
|
||||||
</Properties>
|
</Properties>
|
||||||
<ChildObjects/>
|
<ChildObjects/>
|
||||||
|
|||||||
@@ -29,6 +29,8 @@
|
|||||||
<xr:Item xsi:type="xr:MDObjectRef">Catalog.ТелеграмДокумент</xr:Item>
|
<xr:Item xsi:type="xr:MDObjectRef">Catalog.ТелеграмДокумент</xr:Item>
|
||||||
<xr:Item xsi:type="xr:MDObjectRef">CommonPicture.КартинкаБот</xr:Item>
|
<xr:Item xsi:type="xr:MDObjectRef">CommonPicture.КартинкаБот</xr:Item>
|
||||||
<xr:Item xsi:type="xr:MDObjectRef">Enum.ТелеграмРежимРазметки</xr:Item>
|
<xr:Item xsi:type="xr:MDObjectRef">Enum.ТелеграмРежимРазметки</xr:Item>
|
||||||
|
<xr:Item xsi:type="xr:MDObjectRef">Enum.ТелеграмСтатусДиалога</xr:Item>
|
||||||
|
<xr:Item xsi:type="xr:MDObjectRef">Enum.ВидыДанныхКоллбэков</xr:Item>
|
||||||
</Content>
|
</Content>
|
||||||
</Properties>
|
</Properties>
|
||||||
<ChildObjects/>
|
<ChildObjects/>
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<VERSION>6</VERSION>
|
<VERSION>8</VERSION>
|
||||||
|
|||||||
Reference in New Issue
Block a user