/// <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); }