Skip to content

Commit

Permalink
Merge pull request #69 from pureooze/ushamim/sending-messages-part-msg
Browse files Browse the repository at this point in the history
  • Loading branch information
pureooze authored Dec 9, 2023
2 parents efe9008 + a18e00b commit 56fd527
Show file tree
Hide file tree
Showing 5 changed files with 162 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,14 @@ public void LazyLoadedNoticeMsgSerialization() {
[Test]
public void MessageDeletedSuccessfully_ImmediateLoadedNoticeMsg_SerializationToIRCMessage() {

ImmediateLoadedNoticeMsg immediateLoadedClearChatMsg = new(
ImmediateLoadedNoticeMsg immediateLoadedNoticeMsg = new(
channel: "dallas",
msgId: NoticeMsgIdType.DeleteMessageSuccess,
message: "The message from foo is now deleted."
);

Assert.That(
immediateLoadedClearChatMsg.RawMessage,
immediateLoadedNoticeMsg.RawMessage,
Is.EqualTo(
"@msg-id=delete_message_success :tmi.twitch.tv NOTICE #dallas :The message from foo is now deleted."
)
Expand All @@ -39,15 +39,15 @@ public void MessageDeletedSuccessfully_ImmediateLoadedNoticeMsg_SerializationToI
[Test]
public void UserUnableToSendMessage_ImmediateLoadedNoticeMsg_SerializationToIRCMessage() {

ImmediateLoadedNoticeMsg immediateLoadedClearChatMsg = new(
ImmediateLoadedNoticeMsg immediateLoadedNoticeMsg = new(
channel: "dallas",
msgId: NoticeMsgIdType.WhisperRestricted,
message: "Your settings prevent you from sending this whisper.",
targetUserId: "12345678"
);

Assert.That(
immediateLoadedClearChatMsg.RawMessage,
immediateLoadedNoticeMsg.RawMessage,
Is.EqualTo(
"@msg-id=whisper_restricted;target-user-id=12345678 :tmi.twitch.tv NOTICE #dallas :Your settings prevent you from sending this whisper."
)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
using System.Collections.Immutable;
using TwitchEverywhere.Types;
using TwitchEverywhere.Types.Messages.ImmediateLoadedMessages;
using TwitchEverywhere.Types.Messages.Interfaces;
using TwitchEverywhere.Types.Messages.LazyLoadedMessages;

namespace TwitchEverywhere.UnitTests.Serialization;

[TestFixture]
public class PartMsgSerializationTest {

[Test]
public void LazyLoadedPartMsgSerialization() {
const string channel = "channel";
const string message =
":ronni!ronni@ronni.tmi.twitch.tv PART #dallas";
LazyLoadedPartMsg lazyLoadedPartMsg = new( channel: channel, message: message );

Assert.That( lazyLoadedPartMsg.RawMessage, Is.EqualTo( message ) );
}

[Test]
public void MessageDeletedSuccessfully_ImmediateLoadedPartMsg_SerializationToIRCMessage() {

ImmediateLoadedPartMsg immediateLoadedPartMsg = new(
channel: "dallas",
user: "ronni"
);

Assert.That(
immediateLoadedPartMsg.RawMessage,
Is.EqualTo(
":ronni!ronni@ronni.tmi.twitch.tv PART #dallas"
)
);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
using System.Collections.Immutable;
using TwitchEverywhere.Types;
using TwitchEverywhere.Types.Messages.ImmediateLoadedMessages;
using TwitchEverywhere.Types.Messages.Interfaces;
using TwitchEverywhere.Types.Messages.LazyLoadedMessages;

namespace TwitchEverywhere.UnitTests.Serialization;

[TestFixture]
public class UserStateMsgSerializationTest {

[Test]
public void LazyLoadedUserStateMsgSerialization() {
const string channel = "channel";
const string message =
"@badge-info=;badges=staff/1;color=#0D4200;display-name=ronni;emote-sets=0,33,50,237,793,2126,3517,4578,5569,9400,10337,12239;mod=1;subscriber=1;turbo=1;user-type=staff :tmi.twitch.tv USERSTATE #dallas";
LazyLoadedUserStateMsg lazyLoadedClearChatMsg = new( channel: channel, message: message );

Assert.That( lazyLoadedClearChatMsg.RawMessage, Is.EqualTo( message ) );
}

[Test]
public void MessageDeletedSuccessfully_ImmediateLoadedUserStateMsg_SerializationToIRCMessage() {

ImmediateLoadedUserStateMsg immediateLoadedNoticeMsg = new(
channel: "dallas",
badges: new List<Badge> {
new ( "staff", "1" )
}.ToImmutableList(),
color: "#0D4200",
displayName: "ronni",
emoteSets: new List<string> {
"0", "33", "50", "237", "793", "2126", "3517", "4578", "5569", "9400", "10337", "12239"
}.ToImmutableList(),
mod: true,
subscriber: true,
turbo: true,
userType: UserType.Staff
);

Assert.That(
immediateLoadedNoticeMsg.RawMessage,
Is.EqualTo(
"@badge-info=;badges=staff/1;color=#0D4200;display-name=ronni;emote-sets=0,33,50,237,793,2126,3517,4578,5569,9400,10337,12239;mod=1;subscriber=1;turbo=1;user-type=staff :tmi.twitch.tv USERSTATE #dallas"
)
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,36 @@ namespace TwitchEverywhere.Types.Messages.ImmediateLoadedMessages;

public class ImmediateLoadedPartMsg : IPartMsg {
private readonly string m_message;
private string m_channel;
private string m_user;
private readonly string m_channel;
private readonly string m_user;

public ImmediateLoadedPartMsg(
string message,
string channel,
string user
string? message = null,
string? user = null
) {
m_message = message;
m_channel = channel;
m_user = user;
m_message = message ?? string.Empty;
m_user = user ?? string.Empty;
}


public MessageType MessageType => MessageType.Part;
public string RawMessage => m_message;
public string RawMessage => GetRawMessage();
public string Channel => m_channel;

string IPartMsg.User => m_user;

private string GetRawMessage() {
return $":{m_user}!{m_user}@{m_user}.tmi.twitch.tv {MessageType.ToString().ToUpper()} #{m_channel}";
}

private string SerializeProperty(
MessagePluginUtils.Properties property,
Func<string> serializer
) {

return string.Format( MessagePluginUtils.GetPropertyAsString( property ), serializer() );
}

}
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
using System.Collections.Immutable;
using TwitchEverywhere.Implementation.MessagePlugins;
using TwitchEverywhere.Types.Messages.Interfaces;

namespace TwitchEverywhere.Types.Messages.ImmediateLoadedMessages;

public class ImmediateLoadedUserStateMsg : IUserStateMsg {
private readonly string m_channel;
private readonly IImmutableList<Badge> m_badgeInfo;
private readonly IImmutableList<Badge> m_badges;
private readonly string m_color;
Expand All @@ -28,12 +30,12 @@ public ImmediateLoadedUserStateMsg(
bool turbo = default,
UserType userType = default
) {
Channel = channel;
m_badgeInfo = badgeInfo ?? new ImmutableArray<Badge>();
m_badges = badges ?? new ImmutableArray<Badge>();
m_channel = channel;
m_badgeInfo = badgeInfo ?? ImmutableArray<Badge>.Empty;
m_badges = badges ?? ImmutableArray<Badge>.Empty;
m_color = color ?? string.Empty;
m_displayName = displayName ?? string.Empty;
m_emoteSets = emoteSets ?? new ImmutableArray<string>();
m_emoteSets = emoteSets ?? ImmutableArray<string>.Empty;
m_id = id ?? string.Empty;
m_mod = mod;
m_subscriber = subscriber;
Expand All @@ -43,9 +45,9 @@ public ImmediateLoadedUserStateMsg(

public MessageType MessageType => MessageType.UserState;

public string RawMessage => "";
public string Channel { get; }
public string RawMessage => GetRawMessage();

public string Channel => m_channel;

IImmutableList<Badge> IUserStateMsg.BadgeInfo => m_badgeInfo;

Expand All @@ -66,4 +68,49 @@ public ImmediateLoadedUserStateMsg(
bool IUserStateMsg.Turbo => m_turbo;

UserType IUserStateMsg.UserType => m_userType;

private string GetRawMessage() {
string message = "@";

if( m_badges.Any() ) {
message += SerializeProperty( MessagePluginUtils.Properties.BadgeInfo, () => string.Join( ",", m_badgeInfo.Select( b => $"{b.Name}/{b.Version}" ) ) );
message += SerializeProperty( MessagePluginUtils.Properties.Badges, () => string.Join( ",", m_badges.Select( b => $"{b.Name}/{b.Version}" ) ) );
}

if( !string.IsNullOrEmpty( m_color ) ) {
message += SerializeProperty( MessagePluginUtils.Properties.Color, () => m_color );
}

if( !string.IsNullOrEmpty( m_displayName ) ) {
message += SerializeProperty( MessagePluginUtils.Properties.DisplayName, () => m_displayName );
}

if( m_emoteSets.Any() ) {
message += SerializeProperty( MessagePluginUtils.Properties.EmoteSets, () => string.Join( ",", m_emoteSets.Select( b => b ) ) );
}

message += SerializeProperty( MessagePluginUtils.Properties.Mod, () => m_mod ? "1" : "0" );

message += SerializeProperty( MessagePluginUtils.Properties.Subscriber, () => m_subscriber ? "1" : "0" );

message += SerializeProperty( MessagePluginUtils.Properties.Turbo, () => m_turbo ? "1" : "0" );

if( m_userType != UserType.Normal ) {
message += SerializeProperty( MessagePluginUtils.Properties.UserType, () => MessagePluginUtils.GetUserTypeText( m_userType ) );
}

message = message.Substring( 0, message.Length - 1 );

message += $" :tmi.twitch.tv {MessageType.ToString().ToUpper()} #{m_channel}";

return message;
}

private string SerializeProperty(
MessagePluginUtils.Properties property,
Func<string> serializer
) {

return string.Format( MessagePluginUtils.GetPropertyAsString( property ), serializer() );
}
}

0 comments on commit 56fd527

Please sign in to comment.