private async void ButtonBase_OnClick(object sender, RoutedEventArgs e) { IResult <InstaUserInfo> userinfo = await _instaApi.GetUserInfoByIdAsync(_userSession.LoggedInUder.Pk); IResult <InstaUser> user = await _instaApi.GetUserAsync("aeroflot"); IResult <InstaUserInfo> info = await _instaApi.GetUserInfoByIdAsync(user.Value.Pk); IResult <InstaUserShortList> folows = await _instaApi.GetUserFollowersAsync(_userSession.UserName, PaginationParameters.Empty); IResult <InstaMedia> userinfo2 = await _instaApi.GetMediaByIdAsync(folows.Value[43].ProfilePictureId); using (HttpClient client = new HttpClient()) { HttpResponseMessage imageResponse = await client.GetAsync(userinfo2.Value.Images[0].URI); //InMemoryRandomAccessStream randomAccess = new InMemoryRandomAccessStream(); //DataWriter writer = new DataWriter(randomAccess.GetOutputStreamAt(0)); //writer.WriteBytes(await imageResponse.Content.ReadAsByteArrayAsync()); //await writer.StoreAsync(); //BitmapImage bm = new BitmapImage(); //await bm.SetSourceAsync(randomAccess); //myImg.Source = bm; } }
private async void UpdateProfilInfo() { IResult <InstaUserInfo> userinfo = await _instaApi.GetUserInfoByIdAsync(_userSession.LoggedInUder.Pk); FollowersCount.Text = userinfo.Value.FollowerCount.ToString(); FollowingCount.Text = userinfo.Value.FollowingCount.ToString(); ProfilPhoto.Source = BitmapFrame.Create(new Uri(userinfo.Value.ProfilePicUrl)); //IResult<InstaUser> user = await _instaApi.GetUserAsync("aeroflot"); //IResult<InstaUserInfo> info = await _instaApi.GetUserInfoByIdAsync(user.Value.Pk); //IResult<InstaUserShortList> folows = await _instaApi.GetUserFollowersAsync(_userSession.UserName, PaginationParameters.Empty); //IResult<InstaMedia> userinfo2 = await _instaApi.GetMediaByIdAsync(folows.Value[43].ProfilePictureId); }
public async Task <InstaUserShort> GetUserByUserID(long id) { var user = (await _instaApi.GetUserInfoByIdAsync(id)).Value; return(new InstaUserShort() { FullName = user.FullName, UserName = user.Username, IsPrivate = false, IsVerified = false, Pk = user.Pk, ProfilePicture = user.ProfilePicUrl, ProfilePictureId = null }); }
private async void UserControl_Loaded(object sender, RoutedEventArgs e) { var user = await Api.GetUserInfoByIdAsync(this.PK); if (user.Succeeded) { profileImage.Fill = new ImageBrush(new BitmapImage(new Uri(user.Value.ProfilePicUrl))); lblDisplayName.Content = user.Value.FullName; lblUserName.Content = user.Value.Username; lblPostCount.Content = user.Value.MediaCount; lblFollowingCount.Content = user.Value.FollowingCount; lblFollowersCount.Content = user.Value.FollowerCount; textBiography.Text = user.Value.Biography; var posts = await Api.GetUserMediaAsync(user.Value.Username, PaginationParameters.MaxPagesToLoad(1)); if (posts.Succeeded) { posts.Value.ForEach(p => pnlPosts.Children.Add(new PostView(p, Api))); progressBar.Visibility = Visibility.Hidden; } } }
async void IdLogin() { string[] baseId = null; try { baseId = File.ReadAllLines(setting.Convert_OriginalFileName); } catch { info.File = "Ошибка чтения из в файла, пожалуйста, проверьте корректность введенных данных"; } LoginID = new List <string>(); int progress = 0; info.Progress = $"{progress}/{baseId.Length}"; info.Status = "Выполняется"; info.File = setting.Convert_OriginalFileName; EventUpdateGrid(this, new UpdateGridAudience(info)); if (baseId != null) { foreach (string strId in baseId) { if (_source == null || _source.IsCancellationRequested) { break; } ew.WaitOne(); IResult <InstaUserInfo> infoUser = null; try { infoUser = await api.GetUserInfoByIdAsync(Convert.ToInt64(strId)); Thread.Sleep(600); } catch { continue; } try { LoginID.Add(infoUser.Value.Username); progress++; } catch { Thread.Sleep(6000); continue; } info.Progress = $"{progress}/{baseId.Length}"; EventUpdateGrid(this, new UpdateGridAudience(info)); } } try { File.WriteAllLines(setting.Convert_SaveFileName, LoginID.ToArray()); } catch { info.File = "Ошибка записи в файл, пожалуйста, проверьте корректность введенных данных"; } info.Status = "Выполнено"; EventUpdateGrid(this, new UpdateGridAudience(info)); }
public async void Run(IBackgroundTaskInstance taskInstance) { deferral_ = taskInstance.GetDeferral(); Debug.WriteLine("NotifyTask started"); try { var file = await ApplicationData.Current.LocalFolder.CreateFileAsync("UserSession.dat", CreationCollisionOption.OpenIfExists); var r = await FileIO.ReadTextAsync(file); if (string.IsNullOrEmpty(r)) { return; } if (r.Length < 100) { return; } string User = "******"; string Pass = "******"; InstaApi = InstaApiBuilder.CreateBuilder() .SetUser(new UserSessionData { UserName = User, Password = Pass }) .UseLogger(new DebugLogger(LogLevel.Exceptions)) .Build(); InstaApi.LoadStateDataFromStream(r); if (!InstaApi.IsUserAuthenticated) { await InstaApi.LoginAsync(); } if (!InstaApi.IsUserAuthenticated) { return; } var activities = await InstaApi.GetRecentActivityAsync(PaginationParameters.MaxPagesToLoad(1)); Notifies = await Load(); if (Notifies == null) { Notifies = new NotifyList(); } if (activities.Succeeded) { const int MAX = 9; int ix = 0; foreach (var item in activities.Value.Items) { var text = item.Text; if (item.Text.Contains(" ")) { text = text.Substring(text.IndexOf(" ") + 1); text = text.TrimStart(); } if (!Notifies.IsExists(text)) { try { var n = new NotifyClass { IsShowing = false, ProfileId = item.ProfileId, ProfilePicture = item.ProfileImage, Text = text, TimeStamp = item.TimeStamp.ToString(), Type = item.Type, }; if (item.InlineFollow == null) { var user = await InstaApi.GetUserInfoByIdAsync(item.ProfileId); if (user.Succeeded) { n.Username = user.Value.Username; } } else { n.Username = item.InlineFollow.User.UserName; n.IsFollowingYou = item.InlineFollow.IsFollowing; } Notifies.Add(n); } catch { } } ix++; if (ix > MAX) { break; } } var list = Notifies; list.Reverse(); for (int i = 0; i < list.Count; i++) { var item = list[i]; if (!string.IsNullOrEmpty(item.Username)) { if (!item.IsShowing) { NotifyHelper.CreateNotifyAction($"@{item.Username}", item.Text, item.ProfilePicture); Notifies[i].IsShowing = true; } } } } } catch (Exception ex) { Debug.WriteLine("Notify ex: " + ex.Message); Debug.WriteLine("Source: " + ex.Source); Debug.WriteLine("StackTrace: " + ex.StackTrace); } await Save(); await Task.Delay(1000); deferral_.Complete(); }
async void MassLike() { Stat = true; userInfoLog = await api.GetCurrentUserAsync(); EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}][{Info()}] Масслайкинг запущен")); EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now:HH:mm:ss}][{Info()}] Загружаю базу.")); try { foreach (string str in File.ReadAllLines(setting.FileNameBase)) { try { usersID.Add(Convert.ToInt64(str)); usersIDcopy.Add(Convert.ToInt64(str)); } catch { continue; } } } catch (Exception e) { EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}][{Info()}] ОШИБКА: {e.Message}")); } EventUpdateGrid(this, new UpdateGridEvent( $"{userInfoLog.Value.UserName}:Лайкинг:{CountLikes}/{usersID.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Выполняется")); foreach (long id in usersID) { try { if (_source == null || _source.IsCancellationRequested) { break; } if (setting.ChekedSkipSubscriber) { var x = await api.GetCurrentUserFollowersAsync(PaginationParameters.MaxPagesToLoad(10)); var o = new InstaUserShort(); o.Pk = id; if (x.Value.IndexOf(o) != -1) { EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}][{Info()}] Подписчик с id: {id} пропущен")); usersIDcopy.Remove(id); Thread.Sleep(500); continue; } } int pages = (int)setting.LikeAtUserMax; var userInfo = await api.GetUserInfoByIdAsync(id); Thread.Sleep(100); var media = await api.GetUserMediaAsync( userInfo.Value.Username, PaginationParameters.MaxPagesToLoad(pages % 18 == 0 ? pages : pages + 1)); //Учет загруки страаниц var mediaList = media.Value.ToList(); int random = rnd.Next((int)setting.LikeAtUserMin - 1, (int)setting.LikeAtUserMax); for (int i = 0; i < random; i++) //Учет кол-во лайков на пользователя { if (mediaList.Count > i && setting.LikeUnderPublicMin <= mediaList[i].LikesCount && mediaList[i].LikesCount <= setting.LikeUnderPublicMax) //Учет настройки лайков под публикацией { if (_source == null || _source.IsCancellationRequested) { break; } await api.LikeMediaAsync(mediaList[i].Pk); CountLikes++; CountPause++; EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}][{Info()}] Поставил лайк пользователю {userInfo.Value.Username}. Кол-во лайков: {CountLikes}")); EventUpdateGrid(this, new UpdateGridEvent( $"{userInfoLog.Value.UserName}:Лайкинг:{CountLikes}/{usersID.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Выполняется")); if (setting.ChekedDeleteInBaseAfterLike) { usersIDcopy.Remove(id); } Delay(); if (setting.ChekedPause) { if (CountPause >= setting.PauseLimit) { CountPause = 0; EventUpdateGrid(this, new UpdateGridEvent($"{userInfoLog.Value.UserName}:Лайкинг:{CountLikes}/{usersID.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Пауза")); EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}][{Info()}] Пауза на " + setting.PauseTime + " минут ")); if (timer != null) { timer.Dispose(); } timer = new Timer(CancelDelay, null, 60000 * (int)setting.PauseTime, Timeout.Infinite); ew.Reset(); ew.WaitOne(); } } } else { EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}][{Info()}] Недостаточно лайков под постом пользователя {userInfo.Value.Username}. Пропуск")); if (setting.ChekedDeleteInBaseAfterLike) { usersIDcopy.Remove(id); } Thread.Sleep(1000); } } } catch (Exception e) { EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}][{Info()}] ОШИБКА : {e.Message}")); continue; } } EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}][{Info()}] Выполнено")); EventUpdateGrid(this, new UpdateGridEvent( $"{userInfoLog.Value.UserName}:Лайкинг:{CountLikes}/{usersID.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Завершено")); Stat = false; Save(); }
async void UnSubscribeToList(IInstaApi api, SettingTaskUnSubscribe setting) { userInfoLog = await api.GetCurrentUserAsync(); EventFromMyClass(this, new MyEventMessage($"[{(await api.GetCurrentUserAsync()).Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] Массотписка запущена")); EventUpdateGrid(this, new UpdateGridEvent($"{userInfoLog.Value.UserName}:Отписка:{CountUnSubscribe}/{usersID.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Выполняется")); try { string[] stringID = System.IO.File.ReadAllLines(setting.FileNameBaseId); foreach (string str in stringID) { try { usersID.Add(Convert.ToInt64(str)); usersIDcopy.Add(Convert.ToInt64(str)); } catch { continue; } } } catch (Exception e) { EventFromMyClass(this, new MyEventMessage($"[{DateTime.Now.ToString("HH:mm:ss")}] ОШИБКА: {e.Message} {e.TargetSite} {DateTime.Now}")); } foreach (long id in usersID) { try { if (_source == null || _source.IsCancellationRequested) { break; } var userInfo = await api.GetUserInfoByIdAsync(id); if (setting.FileNameBaseId != null && setting.FileNameDontUnSubscribeId.Length != 0) //Учет не отписки от определнных пользователей { var stringId = setting.FileNameDontUnSubscribeId.Split(' '); foreach (string idDont in stringId) { if (id == Convert.ToInt64(idDont)) { EventFromMyClass(null, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] Пропущен пользователь {userInfo.Value.Username}. Является исключением")); Delay(); continue; } } } if (setting.ChekedUnSubscribeBlock) //Учёт отписки через блокировку { await api.BlockUserAsync(id); } else { await api.UnFollowUserAsync(id); } CountUnSubscribe++; CountPause++; EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] Отписался от пользователя с ником {userInfo.Value.Username}. Kоличество отписок: {CountUnSubscribe}")); EventUpdateGrid(this, new UpdateGridEvent($"{userInfoLog.Value.UserName}:Отписка:{CountUnSubscribe}/{usersID.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Выполняется")); if (_source == null || _source.IsCancellationRequested) { break; } Delay(); if (setting.LimitUnSubscribe <= CountUnSubscribe) //Учет лимита отписок { EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] Превышен лимит подписок")); EventUpdateGrid(this, new UpdateGridEvent($"{userInfoLog.Value.UserName}:Отписка:{CountUnSubscribe}/{usersID.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Завершено")); Save(); return; } if (setting.CheckedPause) //Учет паузы { if (setting.PauseLimit <= CountPause) { CountPause = 0; EventUpdateGrid(this, new UpdateGridEvent($"{userInfoLog.Value.UserName}:Отписка:{CountUnSubscribe}/{usersID.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Пауза")); EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] Пауза на " + setting.PauseTime + " минут")); if (timer != null) { timer.Dispose(); } timer = new Timer(CancelDelay, null, 60000 * setting.PauseTime, Timeout.Infinite); ew.Reset(); ew.WaitOne(); } } } catch (Exception e) { EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] ОШИБКА: {e.Message}")); } } EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] Выполнено")); EventUpdateGrid(this, new UpdateGridEvent($"{userInfoLog.Value.UserName}:Отписка:{CountUnSubscribe}/{usersID.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Завершено")); Save(); Stat = false; }
public async void Pause() { EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now:HH:mm:ss}][{Info()}] Поставлено на паузу.")); EventUpdateGrid(this, new UpdateGridEvent($"{userInfoLog.Value.UserName}:Отписка:{CountUnSubscribe}/{usersID.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Пауза")); Save(); if (timer != null) { timer.Dispose(); } ew.Reset(); }
async void UnSubscribeDontFollow(IInstaApi api, SettingTaskUnSubscribe setting) { userInfoLog = await api.GetCurrentUserAsync(); var follow = await api.GetCurrentUserFollowersAsync(PaginationParameters.MaxPagesToLoad(2)); var x = await api.GetUserFollowingAsync(userInfoLog.Value.UserName, PaginationParameters.MaxPagesToLoad(2)); var z = await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk); EventUpdateGrid(this, new UpdateGridEvent( $"{userInfoLog.Value.UserName}:Отписка(кто не подписан):{CountUnSubscribe}/{z.Value.FollowingCount}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Выполняется")); EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] Массотписка запущена")); foreach (InstaUserShort user in x.Value) { try { if (_source == null || _source.IsCancellationRequested) { break; } if (setting.FileNameBaseId != null && setting.FileNameDontUnSubscribeId.Length != 0) //Учет не отписки от определнных пользователей { var stringId = setting.FileNameDontUnSubscribeId.Split(' '); foreach (string id in stringId) { if (user.Pk == Convert.ToInt64(id)) { EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] Пропущен пользователь {user.UserName}. Является исключением")); Delay(); continue; } } } var userShort = new InstaUserShort(); userShort.Pk = user.Pk; if (follow.Value.IndexOf(userShort) == -1) { if (setting.ChekedUnSubscribeBlock) //Учёт отписки через блокировку { await api.BlockUserAsync(user.Pk); } else { await api.UnFollowUserAsync(user.Pk); } CountUnSubscribe++; CountPause++; EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] Отписался от пользователя с ником: {user.UserName}. Kоличество отписок: {CountUnSubscribe}")); EventUpdateGrid(this, new UpdateGridEvent( $"{userInfoLog.Value.UserName}:Отписка(кто не подписан):{CountUnSubscribe}/{z.Value.FollowingCount}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Выполняется")); if (_source == null || _source.IsCancellationRequested) { break; } Delay(); // Учет задержки if (CountUnSubscribe >= setting.LimitUnSubscribe) //Учет лимита отписок { EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{ DateTime.Now.ToString("HH:mm:ss") }] Превышен лимит подписок")); EventUpdateGrid(this, new UpdateGridEvent( $"{userInfoLog.Value.UserName}:Отписка(кто не подписан):{CountUnSubscribe}/{z.Value.FollowingCount}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Завершено")); return; } if (setting.CheckedPause) //Учет паузы { if (setting.PauseLimit <= CountUnSubscribe) { CountPause = 0; EventUpdateGrid(this, new UpdateGridEvent( $"{userInfoLog.Value.UserName}:Отписка(кто не подписан):{CountUnSubscribe}/{z.Value.FollowingCount}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Пауза")); EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] Пауза на " + setting.PauseTime + " минут")); if (timer != null) { timer.Dispose(); } timer = new Timer(CancelDelay, null, 60000 * setting.PauseTime, Timeout.Infinite); ew.Reset(); ew.WaitOne(); } } } } catch (Exception e) { EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] ОШИБКА: {e.Message}")); } } EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] Выполнено")); EventUpdateGrid(this, new UpdateGridEvent( $"{userInfoLog.Value.UserName}:Отписка(кто не подписан):{CountUnSubscribe}/{z.Value.FollowingCount}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Завершено")); Stat = false; }
async System.Threading.Tasks.Task MassDirect() { Stat = true; userInfoLog = await api.GetCurrentUserAsync(); EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}][{Info()}] Рассылка сообщений запущена")); EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now:HH:mm:ss}][{Info()}] Загружаю базу.")); try { string[] stringID = System.IO.File.ReadAllLines(setting.FileNameBaseId); foreach (string str in stringID) { try { usersID.Add(Convert.ToInt64(str)); usersIDcopy.Add(Convert.ToInt64(str)); } catch { continue; } } } catch (Exception e) { EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] ОШИБКА: {e.Message}")); } EventUpdateGrid(this, new UpdateGridEvent($"{userInfoLog.Value.UserName}:МассДирект:{CountMessage}/{usersID.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Выполняется")); foreach (long id in usersID) { try { if (_source == null || _source.IsCancellationRequested) { break; } int random = rnd.Next(0, setting.Messages.Count); var x = await api.SendDirectMessage(id.ToString(), null, setting.Messages[random]); CountMessage++; CountPause++; EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}][{Info()}] Oтправил сообщение пользователю {(await api.GetUserInfoByIdAsync(id)).Value.Username}. Kоличество сообщений: {CountMessage}")); EventUpdateGrid(this, new UpdateGridEvent( $"{userInfoLog.Value.UserName}:МассДирект:{CountMessage}/{usersID.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Выполняется")); if (setting.ChekedDeleteBase) { usersIDcopy.Remove(id); } Delay(); if (setting.CheckedPause) //Учет паузы { if (setting.PauseLimit <= CountPause) { CountPause = 0; EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}][{Info()}] Пауза на " + setting.PauseTime + " минут")); EventUpdateGrid(this, new UpdateGridEvent( $"{userInfoLog.Value.UserName}:МассДирект:{CountMessage}/{usersID.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Пауза")); if (timer != null) { timer.Dispose(); } timer = new Timer(CancelDelay, null, 60000 * setting.PauseTime, Timeout.Infinite); ew.Reset(); ew.WaitOne(); } } } catch (Exception e) { EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}][{Info()}] ОШИБКА: {e.Message}")); } } EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}][{Info()}] Выполнено")); EventUpdateGrid(this, new UpdateGridEvent($"{userInfoLog.Value.UserName}:МассДирект:{CountMessage}/{usersID.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Завершено")); Stat = false; Save(); }
private async Task DownloadUserMediaAsync(string input, InputUserType userType, int downloadLimit) { var downloadCount = 0; var downloadFolder = _mediaFilter.CustomFolder ? $@"{_downloadFolder}\{input}" : _downloadFolder; var statsFile = $@"{_statsDirectory}\{input}.csv"; if (!File.Exists(statsFile)) { using (var csv = new Csv(statsFile, _delimiter)) { csv.WriteHeader(); } } IResult <InstaUserInfo> userNameFromId = null; if (userType == InputUserType.Id) { userNameFromId = await _instaApi.GetUserInfoByIdAsync(long.Parse(input)); if (!userNameFromId.Succeeded) { return; } } var username = userNameFromId == null ? input : userNameFromId.Value.Username; var maxId = ""; do { var userInformation = await _instaApi.GetUserMediaAsync(username, PaginationParameters.MaxPagesToLoad(1).StartFromId(maxId)); if (!userInformation.Succeeded) { return; } maxId = userInformation.Value.NextId; foreach (var m in userInformation.Value) { _cancellationToken.ThrowIfCancellationRequested(); if (_mediaFilter.CheckFilters(m)) { continue; } if (CheckTotalDownloads() && CheckDownloadLimit(downloadCount++, downloadLimit)) { await DownloadInstaMediaAsync(m, statsFile, downloadFolder); } else { return; } } } while (maxId != null); }
async System.Threading.Tasks.Task StartSubscribe() { Stat = true; userInfoLog = await api.GetCurrentUserAsync(); EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now:HH:mm:ss}][{Info()}] Массфоловинг запущен.")); EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now:HH:mm:ss}][{Info()}] Загружаю базу.")); try { string[] stringID = System.IO.File.ReadAllLines(setting.FileNameBaseId); foreach (string str in stringID) { try { usersID.Add(Convert.ToInt64(str)); usersIDcopy.Add(Convert.ToInt64(str)); } catch { continue; } } EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now:HH:mm:ss}][{Info()}] База загружена.")); } catch (Exception e) { EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}][{Info()}] ОШИБКА: {e.Message}")); } EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now:HH:mm:ss}][{Info()}] Начинаю подписку.")); foreach (long id in usersID) { try { userInfoLog = await api.GetCurrentUserAsync(); var userInfo = await api.GetUserInfoByIdAsync(id); if (_source == null || _source.IsCancellationRequested) { break; } if (setting.ChekedSkipSubscriber) //Пропуск подписчиков { var x = await api.GetCurrentUserFollowersAsync(PaginationParameters.MaxPagesToLoad(100)); var o = new InstaUserShort(); o.Pk = id; if (x.Value.IndexOf(o) != -1) { EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}][{Info()}] Подписчик с ником: {userInfo.Value.Username} пропущен")); if (setting.ChekedDeleteAdfter) { usersIDcopy.Remove(id); } Delay(); continue; } } if (!setting.ChekedSendPrivateUser) //Учет приватных пользователей { if (userInfo.Value.IsPrivate) { EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}][{Info()}] Приватный аккаунт {userInfo.Value.Username} пропущен")); Delay(); continue; } } await api.FollowUserAsync(id); //Подписка CountSubscribe++; CountPause++; EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}][{Info()}] " + $"Подписался на пользователя с ником {userInfo.Value.Username}. " + $"Количество подписок: {CountSubscribe}")); EventUpdateGrid(this, new UpdateGridEvent($"{userInfoLog.Value.UserName}:Подписка:{CountSubscribe}/{usersID.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Выполняется")); Delay(); ew.WaitOne(); if (setting.ChekedLikingBySubscribe) //Учет лайков при подписке { int pages = setting.LikingMax; var media = await api.GetUserMediaAsync( userInfo.Value.Username, PaginationParameters.MaxPagesToLoad(pages % 18 == 0 ? pages : pages + 1)); //Учет загруки страниц var mediaList = media.Value.ToList(); int random = rnd.Next(setting.LikingMin, setting.LikingMax + 1); for (int i = 0; i < random; i++) { if (_source == null || _source.IsCancellationRequested) { break; } await api.LikeMediaAsync(mediaList[i].Pk); EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}][{Info()}] Поставил лайк пользователю с ником {userInfo.Value.Username}")); int randomLikeDelay = rnd.Next(setting.DelayLikeMin, setting.DelayLikeMax + 1); EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}][{Info()}] Задержка на {randomLikeDelay} сек")); if (timer != null) { timer.Dispose(); } timer = new Timer(CancelDelay, null, 1000 * randomLikeDelay, Timeout.Infinite); ew.Reset(); ew.WaitOne(); } } if (setting.ChekedDeleteAdfter) { usersIDcopy.Remove(id); } if (setting.ChekedPause) //Учет паузы { if (CountPause >= setting.PauseLimit) { CountPause = 0; EventUpdateGrid(this, new UpdateGridEvent($"{userInfoLog.Value.UserName}:Подписка:{CountSubscribe}/{usersID.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Пауза")); EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}][{Info()}] Пауза на " + setting.PauseTime + " минут ")); if (timer != null) { timer.Dispose(); } timer = new Timer(CancelDelay, null, 60000 * setting.PauseTime, Timeout.Infinite); ew.Reset(); ew.WaitOne(); } } if (CountSubscribe >= setting.LimitSubscribe) //Учет лимита подписок { EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now:HH:mm:ss}][{Info()}] Превышен лимит подписок")); EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now:HH:mm:ss}] Выполнено")); EventUpdateGrid(this, new UpdateGridEvent( $"{userInfoLog.Value.UserName}:Подписка:{CountSubscribe}/{usersID.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Завершено")); return; } } catch (Exception e) { EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now:HH:mm:ss}][{Info()}] ОШИБКА: {e.Message}")); } } EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now:HH:mm:ss}][{Info()}] Задача завершена")); EventUpdateGrid(this, new UpdateGridEvent( $"{userInfoLog.Value.UserName}:Подписка:{CountSubscribe}/{usersID.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Завершено")); Stat = false; Save(); }
async void ClearBots() { Stat = true; userInfoLog = await api.GetCurrentUserAsync(); EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] Чистка от ботов запущена")); try { if (setting.FileNameExceptionId.Length != 0) { string[] stringID = System.IO.File.ReadAllLines(setting.FileNameExceptionId); foreach (string str in stringID) { try { usersID.Add(Convert.ToInt64(str)); } catch { continue; } } } } catch (Exception e) { EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] ОШИБКА: {e.Message}")); } var userInfo = await api.GetCurrentUserAsync(); IResult <InstaUserShortList> x = null; if (setting.WhomClear.Equals("Подписчиков")) { x = await api.GetUserFollowersAsync(userInfo.Value.UserName, PaginationParameters.MaxPagesToLoad(2)); } if (setting.WhomClear.Equals("Подписки")) { x = await api.GetUserFollowingAsync(userInfo.Value.UserName, PaginationParameters.MaxPagesToLoad(2)); } if (x.Succeeded) { count = x.Value.Count; EventUpdateGrid(this, new UpdateGridEvent( $"{userInfoLog.Value.UserName}:Чистка от ботов:{CountBlock}/{x.Value.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Выполняется")); foreach (InstaUserShort user in x.Value) { try { if (_source == null || _source.IsCancellationRequested) { break; } if (usersID.Count != 0) //Учет не отписки от определнных пользователей { bool flag = false; foreach (long id in usersID) { if (user.Pk == id) { EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] Пользователь {user.UserName} пропущен. Запрет на отписку.")); Delay(); flag = true; break; } } if (flag) { continue; } } if (setting.LimitBlock <= CountBlock) //Учет лимита блокировок { EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] Превышен лимит блокировок. Останавливаю процесс.")); EventUpdateGrid(this, new UpdateGridEvent( $"{userInfoLog.Value.UserName}:Чистка от ботов:{CountBlock}/{x.Value.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Завершено")); return; } if (setting.ChekedPause) //Учет паузы { if (setting.PauseLimit <= CountPause) { CountPause = 0; EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] Пауза на " + setting.PauseTime + " минут")); EventUpdateGrid(this, new UpdateGridEvent( $"{userInfoLog.Value.UserName}:Чистка от ботов:{CountBlock}/{x.Value.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Пауза")); if (timer != null) { timer.Dispose(); } timer = new Timer(CancelDelay, null, 60000 * (int)setting.PauseTime, Timeout.Infinite); ew.Reset(); ew.WaitOne(); } } var info = await api.GetUserInfoByIdAsync(user.Pk); if (info.Succeeded == false) { Thread.Sleep(500); continue; } if (setting.CheckedNoAvatarUser) //Если нет автарки { if (info.Value.HasAnonymousProfilePicture) { await api.BlockUserAsync(user.Pk); CountBlock++; CountPause++; EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] Заблокирован пользователя с ником: {user.UserName}. Количество блокировок: {CountBlock}")); EventUpdateGrid(this, new UpdateGridEvent( $"{userInfoLog.Value.UserName}:Чистка от ботов:{CountBlock}/{x.Value.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Выполняется")); if (!setting.ChekedUserBlock) { await api.UnBlockUserAsync(user.Pk); EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] Разблокирован пользователь с ником: {user.UserName}")); } Delay(); //Учет задержки continue; } } if (setting.CheckedPublicCountLess) //Публикаций меньше { int countPublic = Convert.ToInt32(info.Value.MediaCount); if (countPublic < setting.PublicCountLess) { await api.BlockUserAsync(user.Pk); CountBlock++; CountPause++; EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] Заблокирован пользователь с ником: {user.UserName}. Количество блокировок: {CountBlock}")); EventUpdateGrid(this, new UpdateGridEvent( $"{userInfoLog.Value.UserName}:Чистка от ботов:{CountBlock}/{x.Value.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Выполняется")); if (!setting.ChekedUserBlock) { await api.UnBlockUserAsync(user.Pk); EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] Разблокирован пользователь с ником: {user.UserName}")); } Delay(); //Учет задержки continue; } } if (setting.ChekedFollowsCountLess) { int countFollower = Convert.ToInt32(info.Value.FollowerCount); if (countFollower < setting.FollowsCountLess) { await api.BlockUserAsync(user.Pk); CountBlock++; CountPause++; EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] Заблокирован пользователь с ником: {user.UserName}. Количество блокировок: {CountBlock}")); EventUpdateGrid(this, new UpdateGridEvent( $"{userInfoLog.Value.UserName}:Чистка от ботов:{CountBlock}/{x.Value.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Выполняется")); if (!setting.ChekedUserBlock) { await api.UnBlockUserAsync(user.Pk); EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] Разблокирован пользователь с ником: {user.UserName}")); } Delay(); //Учет задержки continue; } } if (setting.ChekedSubscriptionsLess) { int countSubscriptions = Convert.ToInt32(info.Value.FollowingCount); if (countSubscriptions < setting.SubscriptionsLess) { await api.BlockUserAsync(user.Pk); CountBlock++; CountPause++; EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] Заблокирован пользователь с ником: {user.UserName}. Количество блокировок: {CountBlock}")); EventUpdateGrid(this, new UpdateGridEvent( $"{userInfoLog.Value.UserName}:Чистка от ботов:{CountBlock}/{x.Value.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Выполняется")); if (!setting.ChekedUserBlock) { await api.UnBlockUserAsync(user.Pk); EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] Разблокирован пользователь с ником: {user.UserName}")); } Delay(); //Учет задержки continue; } } if (setting.ChekedSubscriptionsMore) { int countSubscriptions = Convert.ToInt32(info.Value.FollowingCount); if (countSubscriptions > setting.SubscriptionMore) { await api.BlockUserAsync(user.Pk); CountBlock++; CountPause++; EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] Заблокирован пользователь с ником: {user.UserName}. Количество блокировок: {CountBlock}")); EventUpdateGrid(this, new UpdateGridEvent( $"{userInfoLog.Value.UserName}:Чистка от ботов:{CountBlock}/{x.Value.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Выполняется")); if (!setting.ChekedUserBlock) { await api.UnBlockUserAsync(user.Pk); EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] Разблокирован пользователь с ником: {user.UserName}")); } Delay(); //Учет задержки continue; } } Thread.Sleep(1000); } catch (Exception e) { EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}] ОШИБКА: {e.Message}")); } } } EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{ DateTime.Now.ToString("HH:mm:ss")}] Выполнено.")); EventUpdateGrid(this, new UpdateGridEvent( $"{userInfoLog.Value.UserName}:Чистка от ботов:{CountBlock}/{x.Value.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Завершено")); Stat = false; }
async System.Threading.Tasks.Task MassComment() { Stat = true; userInfoLog = await api.GetCurrentUserAsync(); EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}][{Info()}] Комментирование запущено")); EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now:HH:mm:ss}][{Info()}] Загружаю базу.")); try { string[] stringID = System.IO.File.ReadAllLines(setting.FileNameBaseId); foreach (string str in stringID) { try { usersID.Add(Convert.ToInt64(str)); usersIDcopy.Add(Convert.ToInt64(str)); } catch { continue; } } } catch (Exception e) { EventFromMyClass(null, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}][{Info()}] ОШИБКА: {e.Message}")); } EventUpdateGrid(this, new UpdateGridEvent($"{userInfoLog.Value.UserName}:Комментинг:{CountComment}/{usersID.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Выполняется")); foreach (long id in usersID) { try { if (_source == null || _source.IsCancellationRequested) { break; } var infoUser = await api.GetUserInfoByIdAsync(id); int pages = setting.CountCommnetUnderPublish; Thread.Sleep(100); var media = await api.GetUserMediaAsync( infoUser.Value.Username, PaginationParameters.MaxPagesToLoad(pages % 18 == 0 ? pages : pages + 1)); //Учет загруки страниц var mediaList = media.Value.ToList(); for (int i = 0; i < setting.CountPublishComment; i++) { if (_source == null || _source.IsCancellationRequested) { break; } for (int y = 0; y < setting.CountCommnetUnderPublish; y++) { if (_source == null || _source.IsCancellationRequested) { break; } int random = rnd.Next(0, setting.Message.Length); await api.CommentMediaAsync(mediaList[0].Pk, setting.Message[random]); CountComment++; CountPause++; EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}][{Info()}] Прокомментировал запись пользователя: {infoUser.Value.Username}. Количество комментариев: {CountComment}")); EventUpdateGrid(this, new UpdateGridEvent($"{userInfoLog.Value.UserName}:Комментинг:{CountComment}/{usersID.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Выполняется")); if (y != setting.CountCommnetUnderPublish - 1) { int randomDelayUser = rnd.Next(setting.DelayOneUserMin, setting.DelayOneUserMax + 1); EventFromMyClass(this, new MyEventMessage( $"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}][{Info()}] Задержка на пользователя {randomDelayUser} сек")); if (timer != null) { timer.Dispose(); } timer = new Timer(CancelDelay, null, 1000 * randomDelayUser, Timeout.Infinite); ew.Reset(); ew.WaitOne(); } //Учет задержки на пользователя } } if (setting.ChekedDeleteBase) { usersIDcopy.Remove(id); } Delay(); //Задержка в сек. if (setting.CommentCountMax <= CountComment) //Проверка лимита комментариев { EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}][{Info()}] Превышено максимальное количество комментариев. Завершение задачи.")); Save(); EventUpdateGrid(this, new UpdateGridEvent($"{userInfoLog.Value.UserName}:Комментинг:{CountComment}/{usersID.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Завершено")); return; } if (setting.CheckedPause) //Учет паузы { if (setting.PauseLimit <= CountPause) { CountPause = 0; EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}][{Info()}] Пауза на " + setting.PauseTime + " минут")); EventUpdateGrid(this, new UpdateGridEvent($"{userInfoLog.Value.UserName}:Комментинг:{CountComment}/{usersID.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Пауза")); if (timer != null) { timer.Dispose(); } timer = new Timer(CancelDelay, null, 1000 * setting.PauseTime, Timeout.Infinite); ew.Reset(); ew.WaitOne(); } } } catch (Exception e) { EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}][{Info()}] ОШИБКА: {e.Message}")); continue; } } Stat = false; EventFromMyClass(this, new MyEventMessage($"[{userInfoLog.Value.UserName}][{DateTime.Now.ToString("HH:mm:ss")}][{Info()}] Выполнено")); EventUpdateGrid(this, new UpdateGridEvent($"{userInfoLog.Value.UserName}:Комментинг:{CountComment}/{usersID.Count}:{UpdateInfoUser(await api.GetUserInfoByIdAsync(userInfoLog.Value.Pk))}:" + $"Завершено")); Save(); }