Esempio n. 1
0
        // static ctor
        static Commands()
        {
            ChatCommands.TryAdd("testcheering", (s, channel, execute) =>
            {
                if (execute)
                {
                    var S = s.SplitWords();
                    if (S.Length > 0 && S[0].Length > 0)
                    {
                        string cheer = S[0];
                        foreach (var x in new[] { "1", "100", "1000", "5000", "10000" })
                        {
                            IrcMessage msg;
                            IrcMessage.TryParse($"@badges=subscriber/1;bits={x};color=;display-name=FOURTF;emotes=;mod=0;subscriber=1;turbo=0;user-type= :[email protected] PRIVMSG #fourtf :{cheer}{x} xD donation", out msg);

                            foreach (var c in TwitchChannel.Channels)
                            {
                                var message = new Message(msg, c);
                                c.AddMessage(message);
                            }
                        }
                    }
                }

                return(null);
            });

            ChatCommands.TryAdd("testchannels", (s, channel, execute) =>
            {
                TwitchChannel.WhisperChannel.AddMessage(new Message(string.Join(", ", TwitchChannel.Channels.Select(x => x.Name))));
                return(null);
            });
        }
Esempio n. 2
0
        // static ctor
        static Commands()
        {
            // Chat Commands
            ChatCommands.TryAdd("w", (s, channel, execute) =>
            {
                if (execute)
                {
                    var S = s.SplitWords();

                    if (S.Length > 1)
                    {
                        var name = S[0];

                        IrcMessage message;
                        IrcMessage.TryParse($":{name}!{name}@{name}.tmi.twitch.tv PRIVMSG #whispers :" + s.SubstringFromWordIndex(1), out message);

                        TwitchChannel.WhisperChannel.AddMessage(new Message(message, TwitchChannel.WhisperChannel, isSentWhisper: true));

                        if (AppSettings.ChatEnableInlineWhispers)
                        {
                            var inlineMessage = new Message(message, TwitchChannel.WhisperChannel, true, false, isSentWhisper: true)
                            {
                                HighlightTab = false
                            };

                            inlineMessage.HighlightType = HighlightType.Whisper;

                            foreach (var c in TwitchChannel.Channels)
                            {
                                c.AddMessage(inlineMessage);
                            }
                        }
                    }
                }

                return("/w " + s);
            });

            ChatCommands.TryAdd("ignore", (s, channel, execute) =>
            {
                if (execute)
                {
                    var S = s.SplitWords();
                    if (S.Length > 0)
                    {
                        IrcManager.AddIgnoredUser(S[0], null);
                    }
                }
                return(null);
            });
            ChatCommands.TryAdd("unignore", (s, channel, execute) =>
            {
                if (execute)
                {
                    var S = s.SplitWords();
                    if (S.Length > 0)
                    {
                        IrcManager.RemoveIgnoredUser(S[0], null);
                    }
                }
                return(null);
            });

            ChatCommands.TryAdd("uptime", (s, channel, execute) =>
            {
                if (execute && channel != null)
                {
                    try
                    {
                        var request = WebRequest.Create($"https://api.twitch.tv/kraken/streams/{channel.Name}?client_id={IrcManager.DefaultClientID}");
                        if (AppSettings.IgnoreSystemProxy)
                        {
                            request.Proxy = null;
                        }
                        using (var resp = request.GetResponse())
                            using (var stream = resp.GetResponseStream())
                            {
                                var parser = new JsonParser();

                                dynamic json = parser.Parse(stream);

                                dynamic root = json["stream"];

                                string createdAt = root["created_at"];

                                var streamStart = DateTime.Parse(createdAt);

                                var uptime = DateTime.Now - streamStart;

                                var text = "Stream uptime: ";

                                if (uptime.TotalDays > 1)
                                {
                                    text += (int)uptime.TotalDays + " days, " + uptime.ToString("hh\\h\\ mm\\m\\ ss\\s");
                                }
                                else
                                {
                                    text += uptime.ToString("hh\\h\\ mm\\m\\ ss\\s");
                                }

                                channel.AddMessage(new Message(text));
                            }
                    }
                    catch { }
                }

                return(null);
            });

            ChatCommands.TryAdd("testcheering", (s, channel, execute) =>
            {
                if (execute)
                {
                    foreach (var x in new[] { "1", "100", "1000", "5000", "10000" })
                    {
                        IrcMessage msg;
                        IrcMessage.TryParse($"@badges=subscriber/1;bits={x};color=;display-name=FOURTF;emotes=;mod=0;subscriber=1;turbo=0;user-type= :[email protected] PRIVMSG #fourtf :cheer{x} xD donation", out msg);

                        foreach (var c in TwitchChannel.Channels)
                        {
                            var message = new Message(msg, c);
                            c.AddMessage(message);
                        }
                    }
                }

                return(null);
            });

            ChatCommands.TryAdd("testchannels", (s, channel, execute) =>
            {
                TwitchChannel.WhisperChannel.AddMessage(new Message(string.Join(", ", TwitchChannel.Channels.Select(x => x.Name))));
                return(null);
            });
        }
Esempio n. 3
0
        // ctor
        private TwitchChannel(string channelName)
        {
            if (!channelName.StartsWith("/"))
            {
                Name             = channelName.Trim('#');
                SubLink          = $"https://www.twitch.tv/{Name}/subscribe?ref=in_chat_subscriber_link";
                ChannelLink      = $"https://twitch.tv/{Name}";
                PopoutPlayerLink = $"https://player.twitch.tv/?channel={Name}";

                Join();

                ReloadEmotes();

                // recent chat
                Task.Run(() =>
                {
                    loadData();

                    if (RoomID != -1)
                    {
                        try
                        {
                            var request =
                                WebRequest.Create($"https://badges.twitch.tv/v1/badges/channels/{RoomID}/display");
                            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 badgeSets  = json["badge_sets"];
                                    dynamic subscriber = badgeSets["subscriber"];
                                    dynamic versions   = subscriber["versions"];

                                    foreach (var version in versions)
                                    {
                                        int months = int.Parse(version.Key);

                                        dynamic value = version.Value;

                                        string imageUrl    = value["image_url_1x"];
                                        string title       = value["title"];
                                        string description = value["description"];
                                        string clickUrl    = value["click_url"];

                                        SubscriberBadges[months] = new LazyLoadedImage
                                        {
                                            Name    = title,
                                            Url     = imageUrl,
                                            Tooltip = "Subscriber Badge" + (months == 0 ? "" : $" ({months} months)")
                                        };
                                    }
                                }
                        }
                        catch
                        {
                        }

                        try
                        {
                            var messages = new List <Message>();

                            var request =
                                WebRequest.Create(
                                    $"https://tmi.twitch.tv/api/rooms/{RoomID}/recent_messages?client_id={IrcManager.DefaultClientID}");
                            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 _messages = json["messages"];

                                    foreach (string s in _messages)
                                    {
                                        IrcMessage msg;

                                        if (IrcMessage.TryParse(s, out msg))
                                        {
                                            messages.Add(new Message(msg, this)
                                            {
                                                HighlightTab = false
                                            });
                                        }
                                    }

                                    //StreamReader reader = new StreamReader(stream);
                                    //string line;
                                    //while ((line = reader.ReadLine()) != null)
                                    //{
                                    //    IrcMessage msg;

                                    //    if (IrcMessage.TryParse(line, out msg))
                                    //    {
                                    //        if (msg.Params != null)
                                    //            messages.Add(new Message(msg, this, false, false));
                                    //    }
                                    //}
                                }

                            AddMessagesAtStart(messages.ToArray());
                        }
                        catch
                        {
                        }
                    }
                });

                // get chatters
                Task.Run(() =>
                {
                    fetchUsernames();
                });

                checkIfIsLive();
            }

            Emotes.EmotesLoaded             += Emotes_EmotesLoaded;
            IrcManager.Connected            += IrcManager_Connected;
            IrcManager.Disconnected         += IrcManager_Disconnected;
            IrcManager.NoticeAdded          += IrcManager_NoticeAdded;
            AppSettings.MessageLimitChanged += AppSettings_MessageLimitChanged;
            AppSettings.FontChanged         += AppSettings_FontChanged;
        }
Esempio n. 4
0
        public static void addChatCommands()
        {
            Commands.ChatCommands.TryAdd("user", (s, channel, execute) =>
            {
                if (execute)
                {
                    var S = s.SplitWords();
                    if (S.Length > 0 && S[0].Length > 0)
                    {
                        Common.UserInfoData data = new Common.UserInfoData();
                        data.UserName            = S[0];
                        data.Channel             = channel;
                        if ((data.UserId = IrcManager.LoadUserIDFromTwitch(data.UserName)) != null)
                        {
                            var popup = new UserInfoPopup(data)
                            {
                                StartPosition = FormStartPosition.Manual,
                                Location      = Cursor.Position
                            };

                            popup.Show();

                            var screen = Screen.FromPoint(Cursor.Position);

                            int x = popup.Location.X, y = popup.Location.Y;

                            if (popup.Location.X < screen.WorkingArea.X)
                            {
                                x = screen.WorkingArea.X;
                            }
                            else if (popup.Location.X + popup.Width > screen.WorkingArea.Right)
                            {
                                x = screen.WorkingArea.Right - popup.Width;
                            }

                            if (popup.Location.Y < screen.WorkingArea.Y)
                            {
                                y = screen.WorkingArea.Y;
                            }
                            else if (popup.Location.Y + popup.Height > screen.WorkingArea.Bottom)
                            {
                                y = screen.WorkingArea.Bottom - popup.Height;
                            }

                            popup.Location = new Point(x, y);
                        }
                        else
                        {
                            channel.AddMessage(new Chatterino.Common.Message($"This user could not be found (/user {data.UserName})"));
                        }
                    }
                }
                return(null);
            });

            // Chat Commands
            Commands.ChatCommands.TryAdd("w", (s, channel, execute) =>
            {
                if (execute)
                {
                    var S = s.SplitWords();

                    if (S.Length > 1)
                    {
                        var name = S[0];

                        IrcMessage message;
                        IrcMessage.TryParse($":{name}!{name}@{name}.tmi.twitch.tv PRIVMSG #whispers :" + s.SubstringFromWordIndex(1), out message);

                        TwitchChannel.WhisperChannel.AddMessage(new Chatterino.Common.Message(message, TwitchChannel.WhisperChannel, isSentWhisper: true));

                        if (AppSettings.ChatEnableInlineWhispers)
                        {
                            var inlineMessage = new Chatterino.Common.Message(message, TwitchChannel.WhisperChannel, true, false, isSentWhisper: true)
                            {
                                HighlightTab = false
                            };

                            inlineMessage.HighlightType = HighlightType.Whisper;

                            foreach (var c in TwitchChannel.Channels)
                            {
                                c.AddMessage(inlineMessage);
                            }
                        }
                    }
                }

                return("/w " + s);
            });

            Commands.ChatCommands.TryAdd("ignore", (s, channel, execute) =>
            {
                if (execute)
                {
                    var S = s.SplitWords();
                    if (S.Length > 0)
                    {
                        IrcManager.AddIgnoredUser(S[0], null);
                    }
                }
                return(null);
            });
            Commands.ChatCommands.TryAdd("rejoin", (s, channel, execute) =>
            {
                if (execute)
                {
                    Task.Run(() =>
                    {
                        channel.Rejoin();
                    });
                }
                return(null);
            });
            Commands.ChatCommands.TryAdd("unignore", (s, channel, execute) =>
            {
                if (execute)
                {
                    var S = s.SplitWords();
                    if (S.Length > 0)
                    {
                        IrcManager.RemoveIgnoredUser(S[0], null);
                    }
                }
                return(null);
            });

            Commands.ChatCommands.TryAdd("uptime", (s, channel, execute) =>
            {
                if (execute && channel != null)
                {
                    try
                    {
                        var request =
                            WebRequest.Create(
                                $"https://api.twitch.tv/helix/streams?user_login={channel.Name}");
                        if (AppSettings.IgnoreSystemProxy)
                        {
                            request.Proxy = null;
                        }
                        request.Headers["Authorization"] = $"Bearer {IrcManager.Account.OauthToken}";
                        request.Headers["Client-ID"]     = $"{IrcManager.DefaultClientID}";
                        using (var resp = request.GetResponse())
                            using (var stream = resp.GetResponseStream())
                            {
                                var parser = new JsonParser();

                                dynamic json = parser.Parse(stream);
                                dynamic data = json["data"];
                                if (data != null && data.Count > 0 && data[0]["type"] != "")
                                {
                                    dynamic root = data[0];

                                    string createdAt = root["started_at"];

                                    var streamStart = DateTime.Parse(createdAt);

                                    var uptime = DateTime.Now - streamStart;

                                    var text = "Stream uptime: ";

                                    if (uptime.TotalDays > 1)
                                    {
                                        text += (int)uptime.TotalDays + " days, " + uptime.ToString("hh\\h\\ mm\\m\\ ss\\s");
                                    }
                                    else
                                    {
                                        text += uptime.ToString("hh\\h\\ mm\\m\\ ss\\s");
                                    }

                                    channel.AddMessage(new Chatterino.Common.Message(text));
                                }
                            }
                    }
                    catch { }
                }

                return(null);
            });
        }