public UserInfoPopup(Common.UserInfoData data) { InitializeComponent(); TopMost = Common.AppSettings.WindowTopMost; Common.AppSettings.WindowTopMostChanged += (s, e) => { TopMost = Common.AppSettings.WindowTopMost; }; lblCreatedAt.Text = ""; lblViews.Text = ""; setControlFont(this); Task.Run(() => { try { //var request = WebRequest.Create($"https://api.twitch.tv/kraken/channels/{data.UserName}?client_id={Common.IrcManager.DefaultClientID}"); var request = WebRequest.Create($"https://api.twitch.tv/helix/users?login={data.UserName}") .AuthorizeHelix(); if (AppSettings.IgnoreSystemProxy) { request.Proxy = null; } using (var response = request.GetResponse()) using (var stream = response.GetResponseStream()) { var parser = new JsonParser(); dynamic json = parser.Parse(stream); dynamic user = json["data"]?[0]; string logo = user["profile_image_url"]; //string createdAt = user["created_at"]; //string followerCount = user["followers"]; string viewCount = user["view_count"]; lblViews.Invoke(() => lblViews.Text = $"Channel Views: {viewCount}"); DateTime createAtTime; //if (DateTime.TryParse(createdAt, out createAtTime)) //{ // lblCreatedAt.Invoke(() => lblCreatedAt.Text = $"Created at: {createAtTime.ToString()}"); //} Task.Run(() => { try { var req = WebRequest.Create(logo); if (AppSettings.IgnoreSystemProxy) { request.Proxy = null; } using (var res = req.GetResponse()) using (var s = res.GetResponseStream()) { var image = Image.FromStream(s); picAvatar.Invoke(() => picAvatar.Image = image); } } catch { } }); } } catch { } }); string displayName; if (!data.Channel.Users.TryGetValue(data.UserName, out displayName)) { displayName = data.UserName; } lblUsername.Text = data.UserName; btnCopyUsername.Font = Fonts.GdiSmall; btnCopyUsername.Click += (s, e) => { try { Clipboard.SetText(displayName); } catch { } }; btnCopyUsername.SetTooltip("Copy Username"); btnBan.SetTooltip("Ban User"); btnFollow.SetTooltip("Follow User"); btnIgnore.SetTooltip("Ignore User"); btnMessage.SetTooltip("Send Private Message"); btnProfile.SetTooltip("Show Profile"); btnUnban.SetTooltip("Unban User"); btnWhisper.SetTooltip("Whisper User"); btnPurge.SetTooltip("Timeout User for 1 Second"); btnTimeout2Hours.SetTooltip("Timeout User for 2 Hours"); btnTimeout30Mins.SetTooltip("Timeout User for 30 Minutes"); btnTimeout5Min.SetTooltip("Timeout User for 5 Minutes"); btnTimeout1Day.SetTooltip("Timeout User for 1 Day"); btnTimeout3Days.SetTooltip("Timeout User for 3 Days"); btnTimeout7Days.SetTooltip("Timeout User for 7 Days"); btnTimeout1Month.SetTooltip("Timeout User for 1 Month"); btnPurge.Click += (s, e) => data.Channel.SendMessage($"/timeout {data.UserName} 1"); btnTimeout5Min.Click += (s, e) => data.Channel.SendMessage($"/timeout {data.UserName} 300"); btnTimeout30Mins.Click += (s, e) => data.Channel.SendMessage($"/timeout {data.UserName} 1800"); btnTimeout2Hours.Click += (s, e) => data.Channel.SendMessage($"/timeout {data.UserName} 7200"); btnTimeout1Day.Click += (s, e) => data.Channel.SendMessage($"/timeout {data.UserName} 86400"); btnTimeout3Days.Click += (s, e) => data.Channel.SendMessage($"/timeout {data.UserName} 259200"); btnTimeout7Days.Click += (s, e) => data.Channel.SendMessage($"/timeout {data.UserName} 604800"); btnTimeout1Month.Click += (s, e) => data.Channel.SendMessage($"/timeout {data.UserName} 2592000"); // show profile btnProfile.Click += (s, e) => { Common.GuiEngine.Current.HandleLink(new Common.Link(Common.LinkType.Url, "https://www.twitch.tv/" + data.UserName)); }; if (Common.IrcManager.Account.IsAnon || string.Equals(data.UserName, Common.IrcManager.Account.Username, StringComparison.OrdinalIgnoreCase)) { btnBan.Visible = false; btnUnban.Visible = false; btnMessage.Visible = false; btnWhisper.Visible = false; btnIgnore.Visible = false; btnFollow.Visible = false; btnPurge.Visible = false; btnMod.Visible = false; btnUnmod.Visible = false; btnIgnoreHighlights.Visible = false; btnTimeout1Day.Visible = false; btnTimeout1Month.Visible = false; btnTimeout2Hours.Visible = false; btnTimeout30Mins.Visible = false; btnTimeout3Days.Visible = false; btnTimeout5Min.Visible = false; btnTimeout7Days.Visible = false; btnPurge.Visible = false; } else { if (data.Channel.IsModOrBroadcaster && !string.Equals(data.UserName, data.Channel.Name, StringComparison.OrdinalIgnoreCase)) { } else { btnBan.Visible = false; btnUnban.Visible = false; btnTimeout1Day.Visible = false; btnTimeout1Month.Visible = false; btnTimeout2Hours.Visible = false; btnTimeout30Mins.Visible = false; btnTimeout3Days.Visible = false; btnTimeout5Min.Visible = false; btnTimeout7Days.Visible = false; btnPurge.Visible = false; } if (data.Channel.IsBroadcaster && !string.Equals(data.UserName, data.Channel.Name, StringComparison.OrdinalIgnoreCase)) { btnMod.Click += (s, e) => { data.Channel.SendMessage("/mod " + data.UserName); }; btnUnmod.Click += (s, e) => { data.Channel.SendMessage("/unmod " + data.UserName); }; } else { btnMod.Visible = false; btnUnmod.Visible = false; } // ban btnBan.Click += (s, e) => { data.Channel.SendMessage("/ban " + data.UserName); }; btnUnban.Click += (s, e) => { data.Channel.SendMessage("/unban " + data.UserName); }; // purge user btnPurge.Click += (s, e) => { data.Channel.SendMessage("/timeout " + data.UserName + " 1"); }; // ignore user btnIgnore.Text = Common.IrcManager.IsIgnoredUser(data.UserName) ? "Unignore" : "Ignore"; btnIgnore.Click += (s, e) => { if (Common.IrcManager.IsIgnoredUser(data.UserName)) { string message; if (!Common.IrcManager.TryRemoveIgnoredUser(data.UserName, out message)) { MessageBox.Show(message, "Error while ignoring user."); } } else { string message; if (!Common.IrcManager.TryAddIgnoredUser(data.UserName, out message)) { MessageBox.Show(message, "Error while unignoring user."); } } btnIgnore.Text = Common.IrcManager.IsIgnoredUser(data.UserName) ? "Unignore" : "Ignore"; }; // message user btnMessage.Click += (s, e) => { Common.GuiEngine.Current.HandleLink(new Common.Link(Common.LinkType.Url, "https://www.twitch.tv/message/compose?to=" + data.UserName)); }; // highlight ignore btnIgnoreHighlights.Click += (s, e) => { if (AppSettings.HighlightIgnoredUsers.ContainsKey(data.UserName)) { object tmp; AppSettings.HighlightIgnoredUsers.TryRemove(data.UserName, out tmp); btnIgnoreHighlights.Text = "Disable Highlights"; } else { AppSettings.HighlightIgnoredUsers[data.UserName] = null; btnIgnoreHighlights.Text = "Enable Highlights"; } }; btnIgnoreHighlights.Text = AppSettings.HighlightIgnoredUsers.ContainsKey(data.UserName) ? "Enable Highlights" : "Disable Highlights"; // follow user var isFollowing = false; this.btnFollow.Visible = false; //Task.Run(() => //{ // bool result; // string message; // Common.IrcManager.TryCheckIfFollowing(data.UserName, out result, out message); // isFollowing = result; // btnFollow.Invoke(() => btnFollow.Text = isFollowing ? "Unfollow" : "Follow"); //}); btnFollow.Click += (s, e) => { if (isFollowing) { string message; if (Common.IrcManager.TryUnfollowUser(data.UserName, out message)) { isFollowing = false; btnFollow.Text = "Follow"; } else { MessageBox.Show(message, "Error while unfollowing user."); } } else { string message; if (Common.IrcManager.TryUnfollowUser(data.UserName, out message)) { isFollowing = true; btnFollow.Text = "Unfollow"; } else { MessageBox.Show(message, "Error while following user."); } } }; } }
public UserInfoPopup(Common.UserInfoData data) { InitializeComponent(); TopMost = Common.AppSettings.WindowTopMost; Common.AppSettings.WindowTopMostChanged += (s, e) => { TopMost = Common.AppSettings.WindowTopMost; }; lblCreatedAt.Text = ""; lblViews.Text = ""; lblNotes.Text = "Notes: "; string notes = AppSettings.GetNotes(data.UserId); setControlFont(this); Task.Run(() => { try { var request = WebRequest.Create($"https://api.twitch.tv/helix/users?id={data.UserId}"); if (AppSettings.IgnoreSystemProxy) { request.Proxy = null; } request.Headers["Authorization"] = $"Bearer {IrcManager.Account.OauthToken}"; request.Headers["Client-ID"] = $"{Common.IrcManager.DefaultClientID}"; using (var response = request.GetResponse()) { using (var stream = response.GetResponseStream()) { var parser = new JsonParser(); dynamic json = parser.Parse(stream); dynamic jsondata = json["data"]; if (jsondata != null && jsondata.Count > 0) { dynamic channel = jsondata[0]; string logo = channel["profile_image_url"]; string createdAt = channel["created_at"]; string viewCount = channel["view_count"]; string broadCasterType = channel["broadcaster_type"]; lblViews.Invoke(() => lblViews.Text = $"Channel Views: {viewCount}\n" + $"Streamer type: {broadCasterType}" #if DEBUG + $"\nid: {data.UserId}" #endif ); if (!String.IsNullOrEmpty(notes)) { lblNotes.Invoke(() => lblNotes.Text = $"Notes: {notes}"); } DateTime createAtTime; if (DateTime.TryParse(createdAt, out createAtTime)) { lblCreatedAt.Invoke(() => lblCreatedAt.Text = $"Created at: {createAtTime.ToString()}"); } Task.Run(() => { try { var req = WebRequest.Create(logo); if (AppSettings.IgnoreSystemProxy) { request.Proxy = null; } using (var res = req.GetResponse()) { using (var s = res.GetResponseStream()) { var image = Image.FromStream(s); picAvatar.Invoke(() => picAvatar.Image = image); updateLocation(); } res.Close(); } } catch { } }); //query follow count Task.Run(() => { try { var req = WebRequest.Create($"https://api.twitch.tv/helix/users/follows?to_id={data.UserId}"); if (AppSettings.IgnoreSystemProxy) { request.Proxy = null; } req.Headers["Authorization"] = $"Bearer {IrcManager.Account.OauthToken}"; req.Headers["Client-ID"] = $"{Common.IrcManager.DefaultClientID}"; using (var res = req.GetResponse()) { using (var s = res.GetResponseStream()) { dynamic followjson = parser.Parse(s); string followercount = followjson["total"]; if (!String.IsNullOrEmpty(followercount)) { lblViews.Invoke(() => lblViews.Text = lblViews.Text + $"\nFollowers: {followercount}"); updateLocation(); } } } } catch { } }); } } } } catch { } updateLocation(); }); string displayName; if (!data.Channel.Users.TryGetValue(data.UserName, out displayName)) { displayName = data.UserName; } lblUsername.Text = data.UserName; btnCopyUsername.Font = Fonts.GdiSmall; btnCopyUsername.Click += (s, e) => { try { Clipboard.SetText(displayName); } catch { } }; btnCopyUsername.SetTooltip("Copy Username"); btnBan.SetTooltip("Ban User"); btnFollow.SetTooltip("Follow User"); btnIgnore.SetTooltip("Ignore User"); btnMessage.SetTooltip("Send Private Message"); btnNotes.SetTooltip("Set User Notes"); btnProfile.SetTooltip("Show Profile"); btnUnban.SetTooltip("Unban User"); btnWhisper.SetTooltip("Whisper User"); btnPurge.SetTooltip("Timeout User for 1 Second"); btnTimeout2Hours.SetTooltip("Timeout User for 2 Hours"); btnTimeout30Mins.SetTooltip("Timeout User for 30 Minutes"); btnTimeout5Min.SetTooltip("Timeout User for 5 Minutes"); btnTimeout1Day.SetTooltip("Timeout User for 1 Day"); btnTimeout3Days.SetTooltip("Timeout User for 3 Days"); btnTimeout7Days.SetTooltip("Timeout User for 7 Days"); btnTimeout1Month.SetTooltip("Timeout User for 1 Month"); btnPurge.Click += (s, e) => data.Channel.SendMessage($"/timeout {data.UserName} 1"); btnTimeout5Min.Click += (s, e) => data.Channel.SendMessage($"/timeout {data.UserName} 300"); btnTimeout30Mins.Click += (s, e) => data.Channel.SendMessage($"/timeout {data.UserName} 1800"); btnTimeout2Hours.Click += (s, e) => data.Channel.SendMessage($"/timeout {data.UserName} 7200"); btnTimeout1Day.Click += (s, e) => data.Channel.SendMessage($"/timeout {data.UserName} 86400"); btnTimeout3Days.Click += (s, e) => data.Channel.SendMessage($"/timeout {data.UserName} 259200"); btnTimeout7Days.Click += (s, e) => data.Channel.SendMessage($"/timeout {data.UserName} 604800"); btnTimeout1Month.Click += (s, e) => data.Channel.SendMessage($"/timeout {data.UserName} 2592000"); // show profile btnProfile.Click += (s, e) => { Common.GuiEngine.Current.HandleLink(new Common.Link(Common.LinkType.Url, "https://www.twitch.tv/" + data.UserName)); }; if (Common.IrcManager.Account.IsAnon || string.Equals(data.UserName, Common.IrcManager.Account.Username, StringComparison.OrdinalIgnoreCase)) { btnBan.Visible = false; btnUnban.Visible = false; btnMessage.Visible = false; btnNotes.Visible = false; btnWhisper.Visible = false; btnIgnore.Visible = false; btnFollow.Visible = false; btnPurge.Visible = false; btnMod.Visible = false; btnUnmod.Visible = false; btnIgnoreHighlights.Visible = false; btnTimeout1Day.Visible = false; btnTimeout1Month.Visible = false; btnTimeout2Hours.Visible = false; btnTimeout30Mins.Visible = false; btnTimeout3Days.Visible = false; btnTimeout5Min.Visible = false; btnTimeout7Days.Visible = false; btnPurge.Visible = false; } else { if (data.Channel.IsModOrBroadcaster && !string.Equals(data.UserName, data.Channel.Name, StringComparison.OrdinalIgnoreCase)) { } else { btnBan.Visible = false; btnUnban.Visible = false; btnTimeout1Day.Visible = false; btnTimeout1Month.Visible = false; btnTimeout2Hours.Visible = false; btnTimeout30Mins.Visible = false; btnTimeout3Days.Visible = false; btnTimeout5Min.Visible = false; btnTimeout7Days.Visible = false; btnPurge.Visible = false; } if (data.Channel.IsBroadcaster && !string.Equals(data.UserName, data.Channel.Name, StringComparison.OrdinalIgnoreCase)) { btnMod.Click += (s, e) => { data.Channel.SendMessage("/mod " + data.UserName); }; btnUnmod.Click += (s, e) => { data.Channel.SendMessage("/unmod " + data.UserName); }; } else { btnMod.Visible = false; btnUnmod.Visible = false; } // ban btnBan.Click += (s, e) => { data.Channel.SendMessage("/ban " + data.UserName); }; btnUnban.Click += (s, e) => { data.Channel.SendMessage("/unban " + data.UserName); }; // purge user btnPurge.Click += (s, e) => { data.Channel.SendMessage("/timeout " + data.UserName + " 1"); }; // ignore user btnIgnore.Text = Common.IrcManager.IsIgnoredUser(data.UserName) ? "Unignore" : "Ignore"; btnIgnore.Click += (s, e) => { if (Common.IrcManager.IsIgnoredUser(data.UserName)) { string message; if (!Common.IrcManager.TryRemoveIgnoredUser(data.UserName, data.UserId, out message)) { MessageBox.Show(message, "Error while ignoring user."); } } else { string message; if (!Common.IrcManager.TryAddIgnoredUser(data.UserName, data.UserId, out message)) { MessageBox.Show(message, "Error while unignoring user."); } } btnIgnore.Text = Common.IrcManager.IsIgnoredUser(data.UserName) ? "Unignore" : "Ignore"; }; // message user btnMessage.Click += (s, e) => { (App.MainForm.Selected as ChatControl)?.Input.Logic.SetText($"/w " + data.UserName + " "); }; // notes btnNotes.Click += (s, e) => { using (InputDialogForm dialog = new InputDialogForm("User Notes") { Value = notes }) { notedialog = true; DialogResult res = dialog.ShowDialog(); notedialog = false; this.Focus(); if (res == DialogResult.OK) { notes = dialog.Value; AppSettings.SetNotes(data.UserId, notes); lblNotes.Invoke(() => lblNotes.Text = $"Notes: {notes}"); } } }; // highlight ignore btnIgnoreHighlights.Click += (s, e) => { if (AppSettings.HighlightIgnoredUsers.ContainsKey(data.UserName)) { object tmp; AppSettings.HighlightIgnoredUsers.TryRemove(data.UserName, out tmp); btnIgnoreHighlights.Text = "Disable Highlights"; } else { AppSettings.HighlightIgnoredUsers[data.UserName] = null; btnIgnoreHighlights.Text = "Enable Highlights"; } }; btnIgnoreHighlights.Text = AppSettings.HighlightIgnoredUsers.ContainsKey(data.UserName) ? "Enable Highlights" : "Disable Highlights"; // follow user var isFollowing = false; Task.Run(() => { bool result; string message; Common.IrcManager.TryCheckIfFollowing(data.UserName, data.UserId, out result, out message); isFollowing = result; btnFollow.Invoke(() => btnFollow.Text = isFollowing ? "Unfollow" : "Follow"); }); btnFollow.Click += (s, e) => { Common.GuiEngine.Current.HandleLink(new Common.Link(Common.LinkType.Url, "https://www.twitch.tv/" + data.UserName)); }; } }