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