public void UserStateCommandTriggersEventOnConnectionChannelIfNotSupplied() { var data = new TwitchMessageData(); Assert.That(() => processor.Process(connection, data), Throws.Nothing); Assert.That(eventTriggerCount, Is.EqualTo(1)); }
public void UserStateCommandFallsBackToConnectionSettingsWithoutTag() { var data = new TwitchMessageData(); processor.Process(connection, data); Assert.That(eventUser.Name, Is.EqualTo(connection.Username)); }
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); }
public void MessageCommandDoesNotTriggerEventWithoutMessage() { var data = new TwitchMessageData(); data.Params.Add("#test"); processor.Process(connection, data); Assert.That(eventTriggerCount, Is.EqualTo(0)); }
public void UserStateCommandTriggerEventWithValidData() { var data = new TwitchMessageData(); data.Params.Add("#test"); processor.Process(connection, data); Assert.That(eventTriggerCount, Is.EqualTo(1)); }
public void UserStateCommandDoesNothingWithUnknownChannel(string channelName) { var data = new TwitchMessageData(); data.Params.Add(channelName); processor.Process(connection, data); Assert.That(eventTriggerCount, Is.EqualTo(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)); }
public void JoinCommandDoesNotThrowWithoutPrefix() { var dataWithoutPrefix = new TwitchMessageData(); dataWithoutPrefix.Params.Add("#test"); dataWithoutPrefix.Prefix = null; Assert.That(() => Process(dataWithoutPrefix), Throws.Nothing); }
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)); }
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)); }
public void Process(ITwitchChannelConnection connection, TwitchMessageData data) { if (connection == null) { throw new System.ArgumentNullException(nameof(connection)); } connection.Command("PONG"); connection.Flush(); }
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); }
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")); }
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")); }
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)); }
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); }
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(':')); }
public void JoinCommandThrowsWithoutConnection() { var data = new TwitchMessageData(); Assert.That(() => processor.Process(null, data), Throws.ArgumentNullException); }
void Process(TwitchMessageData data) { processor.Process(connection, data); }
public void MessageCommandDoesNotThrowWithoutPrefix() { var data = new TwitchMessageData(); Assert.That(() => processor.Process(connection, data), Throws.Nothing); }