Пример #1
0
        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.");
                        }
                    }
                };
            }
        }
Пример #2
0
        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));
                };
            }
        }