Skip to content

Commit

Permalink
Merge pull request #23 from dennis/twitch-messages-whispers
Browse files Browse the repository at this point in the history
Twitch messages whispers
  • Loading branch information
dennis committed Jan 10, 2021
2 parents ceba19d + e1de688 commit 4b6db6b
Show file tree
Hide file tree
Showing 10 changed files with 160 additions and 30 deletions.
19 changes: 15 additions & 4 deletions Backend/Plugins/TwitchPlugin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ public TwitchPlugin(string id, IEventFactory eventFactory, IEventBus eventBus, I
Client.SendMessage(TwitchChannel, e.Event.Message);
}
};
EventHandler.OnTwitchCommandSendWhisper += (_, e) => Client?.SendWhisper(e.Event.To, e.Event.Message);

TwitchUsername = twitchConfiguration.TwitchUsername;
TwitchChannel = twitchConfiguration.TwitchChannel;
Expand Down Expand Up @@ -104,7 +105,8 @@ private void Connect()
Client.Initialize(credentials, TwitchChannel);

Client.OnConnected += OnConnected;
Client.OnChatCommandReceived += OnChatCommandReceived;
Client.OnMessageReceived += OnMessageReceived;
Client.OnWhisperReceived += OnWhisperReceived;
Client.OnDisconnected += OnDisconnect;
Client.OnError += OnError;
Client.OnIncorrectLogin += OnIncorrectLogin;
Expand Down Expand Up @@ -141,15 +143,15 @@ private void OnDisconnect(object sender, OnDisconnectedEventArgs e)
RequestReconnect = true;
}

private void OnChatCommandReceived(object sender, OnChatCommandReceivedArgs e)
private void OnMessageReceived(object sender, OnMessageReceivedArgs e)
{
var chatMessage = e.Command.ChatMessage;
var chatMessage = e.ChatMessage;

if (chatMessage.IsMe)
return;

EventBus.PublishEvent(
EventFactory.CreateTwitchReceivedCommand
EventFactory.CreateTwitchReceivedMessage
(
from: chatMessage.DisplayName,
message: chatMessage.Message,
Expand All @@ -160,6 +162,15 @@ private void OnChatCommandReceived(object sender, OnChatCommandReceivedArgs e)
));
}

private void OnWhisperReceived(object sender, OnWhisperReceivedArgs e)
{
var message = e.WhisperMessage;

EventBus.PublishEvent(
EventFactory.CreateTwitchReceivedWhisper(message.DisplayName, message.Message)
);
}

private void OnConnected(object sender, OnConnectedArgs e)
{
EventBus.PublishEvent(EventFactory.CreateUICommandWriteToConsole($"Twitch connected as {TwitchUsername} to channel {TwitchChannel}"));
Expand Down
9 changes: 8 additions & 1 deletion Backend/Services/LuaServiceLib/TwitchMethodCollection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ public void Register(Lua lua)
{
lua["twitch"] = this;
lua.DoString(@"
function send_twitch_message(a); twitch:send_channel_message(a); end
function send_twitch_message(msg); twitch:send_channel_message(msg); end
function send_twitch_whisper(to, msg); twitch:send_whisper_message(to, msg); end
");
}

Expand All @@ -38,6 +39,12 @@ public void send_channel_message(string message)
{
EventBus.PublishEvent(EventFactory.CreateTwitchCommandSendMessage(message));
}

[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "This is expose in Lua, so we want to keep that naming style")]
public void send_whisper_message(string to, string message)
{
EventBus.PublishEvent(EventFactory.CreateTwitchCommandSendWhisper(to, message));
}
}
}
}
6 changes: 5 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,11 @@
- InternalInitialized event removed. Refactored to avoid having it
- Lua: Removed plugin_enable(), plugin_disable(). Register/Unregister them instead
- UI: Stores/restores Window position and size

- Event: Adds TwitchReceivedMessage event (captures all messages, not only commands)
- Event: Removes TwitchReceivedCommand event as this is already sent as a TwitchReceivedMessage
- Event: Adds TwitchReceivedWhisper and TwitchCommandSendWhisper event
- Lua: send_twitch_whisper() / twitch:send_whisper_message()
-
## [0.3.0](https://github.com/dennis/slipstream/releases/tag/v0.3.0) (2020-01-05)
[Full Changelog](https://github.com/dennis/slipstream/compare/v0.2.0...v0.3.0)

Expand Down
22 changes: 20 additions & 2 deletions Shared/EventFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -428,9 +428,9 @@ public TwitchDisconnected CreateTwitchDisconnected()
return new TwitchDisconnected();
}

public TwitchReceivedCommand CreateTwitchReceivedCommand(string from, string message, bool moderator, bool subscriber, bool vip, bool broadcaster)
public TwitchReceivedMessage CreateTwitchReceivedMessage(string from, string message, bool moderator, bool subscriber, bool vip, bool broadcaster)
{
return new TwitchReceivedCommand
return new TwitchReceivedMessage
{
From = from,
Message = message,
Expand All @@ -441,6 +441,24 @@ public TwitchReceivedCommand CreateTwitchReceivedCommand(string from, string mes
};
}

public TwitchReceivedWhisper CreateTwitchReceivedWhisper(string from, string message)
{
return new TwitchReceivedWhisper
{
From = from,
Message = message
};
}

public TwitchCommandSendWhisper CreateTwitchCommandSendWhisper(string to, string message)
{
return new TwitchCommandSendWhisper
{
To = to,
Message = message
};
}

public UICommandWriteToConsole CreateUICommandWriteToConsole(string message)
{
return new UICommandWriteToConsole
Expand Down
38 changes: 29 additions & 9 deletions Shared/EventHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -151,11 +151,17 @@ public EventHandlerArgs(T e)
public delegate void OnTwitchDisconnectedHandler(EventHandler source, EventHandlerArgs<Shared.Events.Twitch.TwitchDisconnected> e);
public event OnTwitchDisconnectedHandler? OnTwitchDisconnected;

public delegate void OnTwitchReceivedCommandHandler(EventHandler source, EventHandlerArgs<Shared.Events.Twitch.TwitchReceivedCommand> e);
public event OnTwitchReceivedCommandHandler? OnTwitchReceivedCommand;

public delegate void OnTwitchCommandSendMessageHandler(EventHandler source, EventHandlerArgs<Shared.Events.Twitch.TwitchCommandSendMessage> e);
public event OnTwitchCommandSendMessageHandler? OnTwitchCommandSendMessage;

public delegate void OnTwitchCommandSendWhisperHandler(EventHandler source, EventHandlerArgs<Shared.Events.Twitch.TwitchCommandSendWhisper> e);
public event OnTwitchCommandSendWhisperHandler? OnTwitchCommandSendWhisper;

public delegate void OnTwitchReceivedMessageHandler(EventHandler source, EventHandlerArgs<Shared.Events.Twitch.TwitchReceivedMessage> e);
public event OnTwitchReceivedMessageHandler? OnTwitchReceivedMessage;

public delegate void OnTwitchReceivedWhisperHandler(EventHandler source, EventHandlerArgs<Shared.Events.Twitch.TwitchReceivedWhisper> e);
public event OnTwitchReceivedWhisperHandler? OnTwitchReceivedWhisper;
#endregion

public void HandleEvent(IEvent? ev)
Expand Down Expand Up @@ -444,18 +450,32 @@ public void HandleEvent(IEvent? ev)
OnTwitchDisconnected.Invoke(this, new EventHandlerArgs<Shared.Events.Twitch.TwitchDisconnected>(tev));
break;

case Shared.Events.Twitch.TwitchReceivedCommand tev:
if (OnTwitchReceivedCommand == null)
case Shared.Events.Twitch.TwitchCommandSendMessage tev:
if (OnTwitchCommandSendMessage == null)
OnDefault?.Invoke(this, new EventHandlerArgs<IEvent>(tev));
else
OnTwitchReceivedCommand.Invoke(this, new EventHandlerArgs<Shared.Events.Twitch.TwitchReceivedCommand>(tev));
OnTwitchCommandSendMessage.Invoke(this, new EventHandlerArgs<Shared.Events.Twitch.TwitchCommandSendMessage>(tev));
break;

case Shared.Events.Twitch.TwitchCommandSendMessage tev:
if (OnTwitchCommandSendMessage == null)
case Shared.Events.Twitch.TwitchCommandSendWhisper tev:
if (OnTwitchCommandSendWhisper == null)
OnDefault?.Invoke(this, new EventHandlerArgs<IEvent>(tev));
else
OnTwitchCommandSendMessage.Invoke(this, new EventHandlerArgs<Shared.Events.Twitch.TwitchCommandSendMessage>(tev));
OnTwitchCommandSendWhisper.Invoke(this, new EventHandlerArgs<Shared.Events.Twitch.TwitchCommandSendWhisper>(tev));
break;

case Shared.Events.Twitch.TwitchReceivedMessage tev:
if (OnTwitchReceivedMessage == null)
OnDefault?.Invoke(this, new EventHandlerArgs<IEvent>(tev));
else
OnTwitchReceivedMessage.Invoke(this, new EventHandlerArgs<Shared.Events.Twitch.TwitchReceivedMessage>(tev));
break;

case Shared.Events.Twitch.TwitchReceivedWhisper tev:
if (OnTwitchReceivedWhisper == null)
OnDefault?.Invoke(this, new EventHandlerArgs<IEvent>(tev));
else
OnTwitchReceivedWhisper.Invoke(this, new EventHandlerArgs<Shared.Events.Twitch.TwitchReceivedWhisper>(tev));
break;

default:
Expand Down
33 changes: 33 additions & 0 deletions Shared/Events/Twitch/TwitchCommandSendWhisper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#nullable enable

using System.Collections.Generic;

namespace Slipstream.Shared.Events.Twitch
{
public class TwitchCommandSendWhisper : IEvent
{
public string EventType => "TwitchCommandSendWhisper";
public bool ExcludeFromTxrx => false;
public string To { get; set; } = string.Empty;
public string Message { get; set; } = string.Empty;

public override bool Equals(object? obj)
{
return obj is TwitchCommandSendWhisper whisper &&
EventType == whisper.EventType &&
ExcludeFromTxrx == whisper.ExcludeFromTxrx &&
To == whisper.To &&
Message == whisper.Message;
}

public override int GetHashCode()
{
int hashCode = 855176974;
hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(EventType);
hashCode = hashCode * -1521134295 + ExcludeFromTxrx.GetHashCode();
hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(To);
hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Message);
return hashCode;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@

namespace Slipstream.Shared.Events.Twitch
{
public class TwitchReceivedCommand : IEvent
public class TwitchReceivedMessage : IEvent
{
public string EventType => "TwitchReceivedCommand";
public string EventType => "TwitchReceivedMessage";
public bool ExcludeFromTxrx => false;
public string From { get; set; } = string.Empty;
public string Message { get; set; } = string.Empty;
Expand All @@ -17,15 +17,15 @@ public class TwitchReceivedCommand : IEvent

public override bool Equals(object? obj)
{
return obj is TwitchReceivedCommand command &&
EventType == command.EventType &&
ExcludeFromTxrx == command.ExcludeFromTxrx &&
From == command.From &&
Message == command.Message &&
Moderator == command.Moderator &&
Subscriber == command.Subscriber &&
Vip == command.Vip &&
Broadcaster == command.Broadcaster;
return obj is TwitchReceivedMessage message &&
EventType == message.EventType &&
ExcludeFromTxrx == message.ExcludeFromTxrx &&
From == message.From &&
Message == message.Message &&
Moderator == message.Moderator &&
Subscriber == message.Subscriber &&
Vip == message.Vip &&
Broadcaster == message.Broadcaster;
}

public override int GetHashCode()
Expand Down
33 changes: 33 additions & 0 deletions Shared/Events/Twitch/TwitchReceivedWhisper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#nullable enable

using System.Collections.Generic;

namespace Slipstream.Shared.Events.Twitch
{
public class TwitchReceivedWhisper : IEvent
{
public string EventType => "TwitchReceivedWhisper";
public bool ExcludeFromTxrx => false;
public string From { get; set; } = string.Empty;
public string Message { get; set; } = string.Empty;

public override bool Equals(object? obj)
{
return obj is TwitchReceivedWhisper whisper &&
EventType == whisper.EventType &&
ExcludeFromTxrx == whisper.ExcludeFromTxrx &&
From == whisper.From &&
Message == whisper.Message;
}

public override int GetHashCode()
{
int hashCode = -370540573;
hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(EventType);
hashCode = hashCode * -1521134295 + ExcludeFromTxrx.GetHashCode();
hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(From);
hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Message);
return hashCode;
}
}
}
4 changes: 3 additions & 1 deletion Shared/IEventFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,9 @@ string fogLevel
TwitchConnected CreateTwitchConnected();
IRacingDriverIncident CreateIRacingDriverIncident(int totalIncidents, int incidentDelta);
TwitchDisconnected CreateTwitchDisconnected();
TwitchReceivedCommand CreateTwitchReceivedCommand(string from, string message, bool moderator, bool subscriber, bool vip, bool broadcaster);
TwitchReceivedMessage CreateTwitchReceivedMessage(string from, string message, bool moderator, bool subscriber, bool vip, bool broadcaster);
TwitchReceivedWhisper CreateTwitchReceivedWhisper(string from, string message);
TwitchCommandSendWhisper CreateTwitchCommandSendWhisper(string to, string message);

UICommandWriteToConsole CreateUICommandWriteToConsole(string message);
UICommandCreateButton CreateUICommandCreateButton(string text);
Expand Down
4 changes: 3 additions & 1 deletion Slipstream.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,9 @@
<Compile Include="Shared\Events\IRacing\IRacingCommandSendCurrentSession.cs" />
<Compile Include="Shared\Events\IRacing\IRacingDriverIncident.cs" />
<Compile Include="Shared\Events\IRacing\IRacingCommandSendCarInfo.cs" />
<Compile Include="Shared\Events\Twitch\TwitchCommandSendWhisper.cs" />
<Compile Include="Shared\Events\Twitch\TwitchReceivedWhisper.cs" />
<Compile Include="Shared\Events\Twitch\TwitchReceivedMessage.cs" />
<Compile Include="Shared\Events\UI\UIButtonTriggered.cs" />
<Compile Include="Shared\Events\UI\UICommandDeleteButton.cs" />
<Compile Include="Shared\Events\UI\UICommandCreateButton.cs" />
Expand Down Expand Up @@ -211,7 +214,6 @@
<Compile Include="Shared\Events\Internal\InternalCommandPluginUnregister.cs" />
<Compile Include="Shared\Events\Internal\InternalCommandPluginRegister.cs" />
<Compile Include="Shared\Events\Twitch\TwitchCommandSendMessage.cs" />
<Compile Include="Shared\Events\Twitch\TwitchReceivedCommand.cs" />
<Compile Include="Shared\Events\Twitch\TwitchDisconnected.cs" />
<Compile Include="Shared\Events\Twitch\TwitchConnected.cs" />
<Compile Include="Shared\Events\Audio\AudioCommandPlay.cs" />
Expand Down

0 comments on commit 4b6db6b

Please sign in to comment.