/// <summary>
 ///		Отправка широковещательного ответа всем пользователям, подписанных на получение оповещений об изменениях в Active Directory
 /// </summary>
 /// <param name="message"></param>
 private async void SendBroadCastMessage(AdNotifyMessage message)
 {
     await Task.Run(() =>
     {
         var users = _config.TelegramUsers.Where(x => x.Allowed).Select(x => x.TelegramId).ToList();
         var msg   = FormatMessage(message);
         foreach (var u in users)
         {
             _bot.SendTextMessageAsync(u, msg);
         }
     });
 }
        /// <summary>
        ///		Объединение разных частей ответа в одну строку
        /// </summary>
        /// <param name="message"></param>
        /// <returns></returns>
        private string FormatMessage(AdNotifyMessage message)
        {
            var msg = new StringBuilder();

            msg.AppendLine($"[{message.SchemeClass.ToUpper()}] {message.Name}");
            var props  = message.Property?.Split(new[] { Environment.NewLine }, StringSplitOptions.None);
            var values = message.Value?.Split(new[] { Environment.NewLine }, StringSplitOptions.None);

            if (props == null || props.Length < 1 || values == null || values.Length < 1)
            {
                return(msg.ToString());
            }

            // Ищет, есть ли в ответе элементы, представляющие собой битовую маску, если есть, формирует строковое "человеко-понятное" значение
            for (var i = 0; i < props.Length; i++)
            {
                var val = values[i];
                if (props[i] == "samaccounttype")
                {
                    val = $"({values[i]}) " + (AdType.SamAccountType) int.Parse(values[i]);
                }
                else if (props[i] == "useraccountcontrol")
                {
                    val = $"({values[i]}) " + (AdType.UserAccountControl) int.Parse(values[i]);
                }
                else if (props[i] == "primarygroupid")
                {
                    val = $"({values[i]}) " + (AdType.PrimaryGroupId) int.Parse(values[i]);
                }
                if (!string.IsNullOrEmpty(props[i]))
                {
                    msg.AppendLine($"[{props[i]}] => {val}");
                }
            }

            return(msg.ToString());
        }
 /// <summary>
 ///		Отправить широковещательный ответ при возникновении события-оповещения об изменении в Active Directory
 /// </summary>
 /// <param name="message"></param>
 private void AdNotifySender_OnBroadcastMessage(AdNotifyMessage message)
 {
     SendBroadCastMessage(message);
 }