Пример #1
0
        public void UserStateCommandTriggersEventOnConnectionChannelIfNotSupplied()
        {
            var data = new TwitchMessageData();

            Assert.That(() => processor.Process(connection, data), Throws.Nothing);
            Assert.That(eventTriggerCount, Is.EqualTo(1));
        }
Пример #2
0
        public void UserStateCommandFallsBackToConnectionSettingsWithoutTag()
        {
            var data = new TwitchMessageData();

            processor.Process(connection, data);
            Assert.That(eventUser.Name, Is.EqualTo(connection.Username));
        }
Пример #3
0
        public void UserStateCommandDoesNotThrowOnInvalidColors(string colorString)
        {
            var data = new TwitchMessageData();

            data.Tags["color"] = colorString;
            Assert.That(() => processor.Process(connection, data), Throws.Nothing);
        }
        public void Process(ITwitchChannelConnection connection, TwitchMessageData data)
        {
            if (connection == null)
            {
                throw new ArgumentNullException(nameof(connection));
            }
            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }

            string channel = data.Params.ValueOrDefault(0) ?? connection.Channel;

            if (channel != connection.Channel)
            {
                return;
            }

            // Get formatted user information if possible.
            string name      = data.Tags.ValueOrDefault("display-name") ?? connection.Username;
            string colorText = data.Tags.ValueOrDefault("color") ?? "Black";

            // Try to get user color.
            Color color = Colors.Black;

            try { color = (Color)ColorConverter.ConvertFromString(colorText); }
            catch (FormatException) { }

            var user = new TwitchUser(name, true, color);

            OnAcquireUserState(user);
        }
Пример #5
0
        public void MessageCommandDoesNotTriggerEventWithoutMessage()
        {
            var data = new TwitchMessageData();

            data.Params.Add("#test");
            processor.Process(connection, data);
            Assert.That(eventTriggerCount, Is.EqualTo(0));
        }
Пример #6
0
        public void UserStateCommandTriggerEventWithValidData()
        {
            var data = new TwitchMessageData();

            data.Params.Add("#test");
            processor.Process(connection, data);
            Assert.That(eventTriggerCount, Is.EqualTo(1));
        }
Пример #7
0
        public void UserStateCommandDoesNothingWithUnknownChannel(string channelName)
        {
            var data = new TwitchMessageData();

            data.Params.Add(channelName);
            processor.Process(connection, data);
            Assert.That(eventTriggerCount, Is.EqualTo(0));
        }
Пример #8
0
        public void Process(ITwitchChannelConnection connection, TwitchMessageData data)
        {
            if (connection == null)
            {
                throw new ArgumentNullException(nameof(connection));
            }
            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }

            // Extract message data.
            string name    = data.Prefix?.Split('!')[0] ?? "Unknown";
            string channel = data.Params.ValueOrDefault(0) ?? connection.Channel;
            string message = data.Params.ValueOrDefault(1);

            if (message == null)
            {
                return;
            }

            // Message coming in on the wrong channel.
            if (channel != connection.Channel)
            {
                return;
            }

            // Get formatted user information if possible.
            string displayName = data.Tags.ValueOrDefault("display-name");

            name = string.IsNullOrEmpty(displayName) ? name.CapitalizeFirst() : displayName;
            string colorText = data.Tags.ValueOrDefault("color") ?? "Black";

            // Action messages "/me <message>"...
            var type  = TwitchChatMessageType.Normal;
            var match = Regex.Match(message, @"^\u0001ACTION ([^\u0001]+)\u0001$");

            if (match.Success)
            {
                message = match.Groups[1].Value;
                type    = TwitchChatMessageType.Self;
            }

            // Try to get the users color or default to black.
            Color color = Colors.Black;

            try { color = (Color)ColorConverter.ConvertFromString(colorText); }
            catch (FormatException) { }

            // Check for moderator status.
            bool moderator = data.Tags.ValueOrDefault("mod") == "1";

            moderator |= data.Tags.ValueOrDefault("badges")?.Contains("broadcaster") ?? false;

            var user = new TwitchUser(name, moderator, color);

            OnMessageReceived(new TwitchChatMessage(type, user, message));
        }
Пример #9
0
        public void JoinCommandDoesNotThrowWithoutPrefix()
        {
            var dataWithoutPrefix = new TwitchMessageData();

            dataWithoutPrefix.Params.Add("#test");
            dataWithoutPrefix.Prefix = null;

            Assert.That(() => Process(dataWithoutPrefix), Throws.Nothing);
        }
Пример #10
0
        public void UserStateCommandSetsDisplayName()
        {
            string name = "Variation";
            var    data = new TwitchMessageData();

            data.Tags["display-name"] = name;
            processor.Process(connection, data);
            Assert.That(eventUser.Name, Is.EqualTo(name));
        }
Пример #11
0
        public void MessageCommandDoesNotTriggerEventOnOtherChannels()
        {
            var data = new TwitchMessageData();

            data.Params.Add("#invalid");
            data.Params.Add("test message");
            processor.Process(connection, data);
            Assert.That(eventTriggerCount, Is.EqualTo(0));
        }
Пример #12
0
        public void Process(ITwitchChannelConnection connection, TwitchMessageData data)
        {
            if (connection == null)
            {
                throw new System.ArgumentNullException(nameof(connection));
            }

            connection.Command("PONG");
            connection.Flush();
        }
Пример #13
0
        public void MessageCommandDoesNotThrowOnInvalidColors(string colorString)
        {
            var data = new TwitchMessageData();

            data.Prefix = "[email protected]";
            data.Params.Add("#test");
            data.Params.Add("test message");
            processor.Process(connection, data);
            data.Tags["color"] = colorString;

            Assert.That(() => processor.Process(connection, data), Throws.Nothing);
        }
Пример #14
0
        public void MessageCommandSetsSelfMessageTypeOnSpecialMessageContent()
        {
            var data = new TwitchMessageData();

            data.Prefix = "[email protected]";
            data.Params.Add("#test");
            data.Params.Add("\u0001ACTION test message\u0001");
            processor.Process(connection, data);

            Assert.That(eventMessage.Type, Is.EqualTo(TwitchChatMessageType.Self));
            Assert.That(eventMessage.Text, Is.EqualTo("test message"));
        }
Пример #15
0
        public void MessageCommandReadsDisplayNameTag()
        {
            var data = new TwitchMessageData();

            data.Tags["display-name"] = "TestUser";
            data.Prefix = "[email protected]";
            data.Params.Add("#test");
            data.Params.Add("test message");
            processor.Process(connection, data);

            Assert.That(eventMessage.User.Name, Is.EqualTo("TestUser"));
        }
Пример #16
0
        public void MessageCommandSetsCorrectEventData(string prefix, string name, string message)
        {
            var data = new TwitchMessageData();

            data.Prefix = prefix;
            data.Params.Add("#test");
            data.Params.Add(message);
            processor.Process(connection, data);

            Assert.That(eventMessage.Type, Is.EqualTo(TwitchChatMessageType.Normal));
            Assert.That(eventMessage.User.Name, Is.EqualTo(name));
            Assert.That(eventMessage.Text, Is.EqualTo(message));
        }
Пример #17
0
        public void JoinCommandDoesNotInvokeEventWithoutPrefix()
        {
            bool didInvokeJoin = false;

            processor.Joined += (c, u) =>
                                didInvokeJoin = true;

            var dataWithoutPrefix = new TwitchMessageData();

            dataWithoutPrefix.Params.Add("#test");
            dataWithoutPrefix.Prefix = null;

            processor.Process(connection, dataWithoutPrefix);
            Assert.That(didInvokeJoin, Is.False);
        }
Пример #18
0
        public void Process(ITwitchChannelConnection connection, TwitchMessageData data)
        {
            if (connection == null)
            {
                throw new ArgumentNullException(nameof(connection));
            }
            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }

            string channel  = data.Params.ValueOrDefault(0);
            string username = data.Prefix?.Split('!').ValueOrDefault(0);

            if (username == null)
            {
                return;
            }

            OnUserJoined(channel, username.TrimStart(':'));
        }
Пример #19
0
        public void JoinCommandThrowsWithoutConnection()
        {
            var data = new TwitchMessageData();

            Assert.That(() => processor.Process(null, data), Throws.ArgumentNullException);
        }
Пример #20
0
 void Process(TwitchMessageData data)
 {
     processor.Process(connection, data);
 }
Пример #21
0
        public void MessageCommandDoesNotThrowWithoutPrefix()
        {
            var data = new TwitchMessageData();

            Assert.That(() => processor.Process(connection, data), Throws.Nothing);
        }