示例#1
0
        private static void WriteConnection_MessageReceived(object sender, MessageEventArgs e)
        {
            var msg = e.Message;

            if (msg.Command == "NOTICE")
            {
                TwitchChannel.GetChannel((msg.Middle ?? "").TrimStart('#')).Process(c =>
                {
                    string tmp;

                    if (msg.Tags.TryGetValue("msg-id", out tmp) && tmp == "timeout_success")
                    {
                        return;
                    }

                    if (AppSettings.Rainbow && tmp == "color_changed")
                    {
                        return;
                    }

                    var message = new Message(msg.Params, null, true)
                    {
                        HighlightTab = false
                    };

                    c.AddMessage(message);
                });
            }
            else if (msg.Command == "USERSTATE")
            {
                string value;

                if (msg.Tags.TryGetValue("mod", out value))
                {
                    TwitchChannel.GetChannel((msg.Middle ?? "").TrimStart('#'))
                    .Process(c =>
                    {
                        c.IsMod = value == "1";
                    });
                }
                if (msg.Tags.TryGetValue("badges", out value))
                {
                    if (value.Contains("vip"))
                    {
                        TwitchChannel.GetChannel((msg.Middle ?? "").TrimStart('#'))
                        .Process(c =>
                        {
                            c.IsVip = true;
                        });
                    }
                }
            }
        }
示例#2
0
        private static void ReadConnection_MessageReceived(object sender, MessageEventArgs e)
        {
            var msg = e.Message;

            if (msg.Command == "PRIVMSG")
            {
                TwitchChannel.GetChannel(msg.Middle.TrimStart('#')).Process(c =>
                {
                    if (msg.PrefixUser == "twitchnotify")
                    {
                        c.AddMessage(new Message(msg.Params ?? "", HSLColor.Gray, true)
                        {
                            HighlightType = HighlightType.Resub
                        });
                    }
                    else
                    {
                        // check if ignore keyword is triggered
                        if (AppSettings.IgnoredKeywordsRegex == null || !AppSettings.IgnoredKeywordsRegex.IsMatch(e.Message.Params))
                        {
                            var message = new Message(msg, c);

                            // check if user is on the ignore list
                            if (AppSettings.EnableTwitchUserIgnores && IsIgnoredUser(message.Username))
                            {
                                switch (AppSettings.ChatShowIgnoredUsersMessages)
                                {
                                case 1:
                                    if (!c.IsModOrBroadcaster)
                                    {
                                        return;
                                    }
                                    break;

                                case 2:
                                    if (!c.IsBroadcaster)
                                    {
                                        return;
                                    }
                                    break;

                                default:
                                    return;
                                }
                            }

                            {
                                c.Users[message.Username.ToUpper()] = message.DisplayName;

                                if (message.HasAnyHighlightType(HighlightType.Highlighted))
                                {
                                    var mentionMessage = new Message(msg, c, enablePingSound: false, includeChannel: true)
                                    {
                                        HighlightType = HighlightType.None
                                    };

                                    TwitchChannel.MentionsChannel.AddMessage(mentionMessage);
                                }

                                c.AddMessage(message);
                            }
                        }
                    }
                });
            }
            else if (msg.Command == "CLEARCHAT")
            {
                var channel = msg.Middle;
                var user    = msg.Params;

                string reason;
                msg.Tags.TryGetValue("ban-reason", out reason);
                string _duration;
                var    duration = 0;

                if (msg.Tags.TryGetValue("ban-duration", out _duration))
                {
                    int.TryParse(_duration, out duration);
                }

                TwitchChannel.GetChannel((msg.Middle ?? "").TrimStart('#')).Process(c => c.ClearChat(user, reason, duration));
                //}
            }
            else if (msg.Command == "ROOMSTATE")
            {
                TwitchChannel.GetChannel((msg.Middle ?? "").TrimStart('#')).Process(c =>
                {
                    var state = c.RoomState;

                    string value;
                    if (msg.Tags.TryGetValue("emote-only", out value))
                    {
                        if (value == "1")
                        {
                            state |= RoomState.EmoteOnly;
                        }
                        else
                        {
                            state &= ~RoomState.EmoteOnly;
                        }
                    }
                    if (msg.Tags.TryGetValue("subs-only", out value))
                    {
                        if (value == "1")
                        {
                            state |= RoomState.SubOnly;
                        }
                        else
                        {
                            state &= ~RoomState.SubOnly;
                        }
                    }
                    if (msg.Tags.TryGetValue("slow", out value))
                    {
                        if (value == "0")
                        {
                            state &= ~RoomState.SlowMode;
                        }
                        else
                        {
                            int time;
                            if (!int.TryParse(value, out time))
                            {
                                time = -1;
                            }
                            c.SlowModeTime = time;
                            state         |= RoomState.SlowMode;
                        }
                    }
                    if (msg.Tags.TryGetValue("r9k", out value))
                    {
                        if (value == "1")
                        {
                            state |= RoomState.R9k;
                        }
                        else
                        {
                            state &= ~RoomState.R9k;
                        }
                    }
                    //if (e.Data.Tags.TryGetValue("broadcaster-lang", out value))

                    c.RoomState = state;
                });
            }
            else if (msg.Command == "USERSTATE")
            {
                string value;

                if (msg.Tags.TryGetValue("mod", out value))
                {
                    TwitchChannel.GetChannel((msg.Middle ?? "").TrimStart('#')).Process(c => c.IsMod = value == "1");
                }
            }
            else if (msg.Command == "WHISPER")
            {
                TwitchChannel.WhisperChannel.AddMessage(new Message(msg, TwitchChannel.WhisperChannel, true, false, isReceivedWhisper: true));

                LastReceivedWhisperUser = msg.PrefixUser;

                if (AppSettings.ChatEnableInlineWhispers)
                {
                    var inlineMessage = new Message(msg, TwitchChannel.WhisperChannel, true, false, true)
                    {
                        HighlightTab  = false,
                        HighlightType = HighlightType.Whisper
                    };

                    foreach (var channel in TwitchChannel.Channels)
                    {
                        channel.AddMessage(inlineMessage);
                    }
                }
            }
            else if (msg.Command == "USERNOTICE")
            {
                string sysMsg;
                msg.Tags.TryGetValue("system-msg", out sysMsg);

                TwitchChannel.GetChannel((msg.Middle ?? "").TrimStart('#')).Process(c =>
                {
                    try
                    {
                        var sysMessage = new Message(sysMsg, HSLColor.Gray, true)
                        {
                            HighlightType = HighlightType.Resub
                        };
                        c.AddMessage(sysMessage);

                        if (!string.IsNullOrEmpty(msg.Params))
                        {
                            var message = new Message(msg, c)
                            {
                                HighlightType = HighlightType.Resub
                            };
                            c.AddMessage(message);
                        }
                    }
                    catch { }
                });
            }
        }