Пример #1
0
        //Example IRC message: @badges=moderator/1,warcraft/alliance;color=;display-name=Swiftyspiffyv4;emotes=;mod=1;room-id=40876073;subscriber=0;turbo=0;user-id=103325214;user-type=mod :[email protected] PRIVMSG #swiftyspiffy :asd
        /// <summary>Constructor for ChatMessage object.</summary>
        public ChatMessage(string ircString)
        {
            _rawIrcMessage = ircString;
            foreach (var part in ircString.Split(';'))
            {
                if (part.Contains("!"))
                {
                    if (_channel == null)
                    {
                        _channel = part.Split('#')[1].Split(' ')[0];
                    }
                    if (_username == null)
                    {
                        _username = part.Split('!')[1].Split('@')[0];
                    }
                }
                else if (part.Contains("@badges="))
                {
                    string badges = part.Split('=')[1];
                    if (badges.Contains('/'))
                    {
                        if (!badges.Contains(","))
                        {
                            _badges.Add(new KeyValuePair <string, string>(badges.Split('/')[0], badges.Split('/')[1]));
                        }
                        else
                        {
                            foreach (string badge in badges.Split(','))
                            {
                                _badges.Add(new KeyValuePair <string, string>(badge.Split('/')[0], badge.Split('/')[1]));
                            }
                        }
                    }
                }
                else if (part.Contains("color="))
                {
                    if (_colorHex == null)
                    {
                        _colorHex = part.Split('=')[1];
                    }
                }
                else if (part.Contains("display-name"))
                {
                    if (_displayName == null)
                    {
                        _displayName = part.Split('=')[1];
                    }
                }
                else if (part.Contains("emotes="))
                {
                    if (_emoteSet == null)
                    {
                        _emoteSet = part.Split('=')[1];
                    }
                }
                else if (part.Contains("subscriber="))
                {
                    _subscriber = part.Split('=')[1] == "1";
                }
                else if (part.Contains("turbo="))
                {
                    _turbo = part.Split('=')[1] == "1";
                }
                else if (part.Contains("user-id="))
                {
                    _userId = int.Parse(part.Split('=')[1]);
                }
                else if (part.Contains("user-type="))
                {
                    switch (part.Split('=')[1].Split(' ')[0])
                    {
                    case "mod":
                        _userType = Common.UType.Moderator;
                        break;

                    case "global_mod":
                        _userType = Common.UType.GlobalModerator;
                        break;

                    case "admin":
                        _userType = Common.UType.Admin;
                        break;

                    case "staff":
                        _userType = Common.UType.Staff;
                        break;

                    default:
                        _userType = Common.UType.Viewer;
                        break;
                    }
                }
                else if (part.Contains("mod="))
                {
                    _modFlag = part.Split('=')[1] == "1";
                }
            }
            _message = ircString.Split(new[] { $" PRIVMSG #{_channel} :" }, StringSplitOptions.None)[1];
            if ((byte)_message[0] == 1 && (byte)_message[_message.Length - 1] == 1)
            {
                //Actions (/me {action}) are wrapped by byte=1 and prepended with "ACTION "
                //This setup clears all of that leaving just the action's text.
                //If you want to clear just the nonstandard bytes, use:
                //_message = _message.Substring(1, text.Length-2);
                _message = _message.Substring(8, _message.Length - 9);
                _meFlag  = true;
            }
        }
Пример #2
0
        // @badges=subscriber/1,turbo/1;color=#2B119C;display-name=JustFunkIt;emotes=;login=justfunkit;mod=0;msg-id=resub;msg-param-months=2;room-id=44338537;subscriber=1;system-msg=JustFunkIt\ssubscribed\sfor\s2\smonths\sin\sa\srow!;turbo=1;user-id=26526370;user-type= :tmi.twitch.tv USERNOTICE #burkeblack :AVAST YEE SCURVY DOG
        public ReSubscriber(string ircString)
        {
            _rawIrc = ircString;
            foreach (string section in ircString.Split(';'))
            {
                if (section.Contains("="))
                {
                    string key   = section.Split('=')[0];
                    string value = section.Split('=')[1];
                    switch (key)
                    {
                    case "@badges":
                        foreach (string badgeValue in value.Split(','))
                        {
                            _badges.Add(new KeyValuePair <string, string>(badgeValue.Split('/')[0], badgeValue.Split('/')[1]));
                        }
                        break;

                    case "color":
                        _colorHex = value;
                        break;

                    case "display-name":
                        _displayName = value;
                        break;

                    case "emotes":
                        _emoteSet = value;
                        break;

                    case "login":
                        _login = value;
                        break;

                    case "mod":
                        _mod = value == "1";
                        break;

                    case "msg-param-months":
                        _months = int.Parse(value);
                        break;

                    case "room-id":
                        _roomId = int.Parse(value);
                        break;

                    case "subscriber":
                        _sub = value == "1";
                        break;

                    case "system-msg":
                        _systemMessage = value;
                        break;

                    case "turbo":
                        _turbo = value == "1";
                        break;

                    case "user-id":
                        _userId = int.Parse(value);
                        break;
                    }
                }
            }
            // Parse user-type
            if (ircString.Contains("=") && ircString.Contains(" "))
            {
                switch (ircString.Split(' ')[0].Split(';')[13].Split('=')[1])
                {
                case "mod":
                    _userType = Common.UType.Moderator;
                    break;

                case "global_mod":
                    _userType = Common.UType.GlobalModerator;
                    break;

                case "admin":
                    _userType = Common.UType.Admin;
                    break;

                case "staff":
                    _userType = Common.UType.Staff;
                    break;

                default:
                    _userType = Common.UType.Viewer;
                    break;
                }
            }


            // Parse channel
            if (ircString.Contains("#") && ircString.Split('#').Count() > 2)
            {
                if (ircString.Split('#')[2].Contains(" "))
                {
                    _channel = ircString.Split('#')[2].Split(' ')[0];
                }
                else
                {
                    _channel = ircString.Split('#')[2];
                }
            }

            // Parse sub message
            if (ircString.Contains($"{ircString.Split(':')[0]}:{ircString.Split(':')[1]}:"))
            {
                _resubMessage = ircString.Replace($"{ircString.Split(':')[0]}:{ircString.Split(':')[1]}:", String.Empty);
            }
        }