Skip to content

Commit

Permalink
Rework to use channel points / c;lean code / websockets (#12)
Browse files Browse the repository at this point in the history
* Getting somewhere

* Something there

* We continue...

* Creating a reward from a form

* Decent progress - lots of work to do

* Some work, but this needs to be fixed now

* Do a sound copy instead of casting it from form entries. Correct initializer assigning values.

* Remove at corrected

* I think this is mostly useable now

* So we don't throw a message box each time

* Bug found: Reconnecting to server won't make sounds play

* Right, so create data format is different than response - now cooldowns should work fine

* Fixed sorting, reimplemented delay command

* Build
  • Loading branch information
SuiMachine authored Dec 17, 2024
1 parent f2b9931 commit b853f96
Show file tree
Hide file tree
Showing 27 changed files with 1,382 additions and 1,142 deletions.
3 changes: 2 additions & 1 deletion BasicTwitchSoundPlayer.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -215,10 +215,11 @@
<DependentUpon>SoundPlaybackSettingsDialog.cs</DependentUpon>
</Compile>
<Compile Include="SoundDatabaseEditor\SupportedFileFormats.cs" />
<Compile Include="SoundEntry.cs" />
<Compile Include="TwitchSocket.cs" />
<Compile Include="VoiceModHandling.cs" />
<Compile Include="SoundStorageXML.cs" />
<Compile Include="Structs\TwitchRightsEnum.cs" />
<Compile Include="Structs\SoundEntry.cs" />
<Compile Include="WebSocketsServer.cs" />
<EmbeddedResource Include="MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon>
Expand Down
94 changes: 36 additions & 58 deletions IRC/IRCBot.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@ public class IRCBot
private string channelToJoin;
private char PrefixChar;

private SoundBase SndDB { get; set; }
private SoundDB SndDB { get; set; }

public IRCBot(SoundBase soundDb, char PrefixChar)
public IRCBot(SoundDB soundDb, char PrefixChar)
{
var privateSettings = PrivateSettings.GetInstance();

irc = new OldIRCClient(MainForm.Instance, privateSettings.TwitchServer, privateSettings.TwitchUsername, privateSettings.TwitchPassword, privateSettings.TwitchChannelToJoin, privateSettings.SoundRewardID);
irc = new OldIRCClient(MainForm.Instance, privateSettings.TwitchServer, privateSettings.TwitchUsername, privateSettings.TwitchPassword, privateSettings.TwitchChannelToJoin);
channelToJoin = privateSettings.TwitchChannelToJoin;
parent = MainForm.Instance;
this.PrefixChar = PrefixChar;
Expand Down Expand Up @@ -94,7 +94,8 @@ private void InitBot(string channel)
irc.meebyIrc.WriteLine("CAP REQ :twitch.tv/tags twitch.tv/commands twitch.tv/membership");
irc.meebyIrc.RfcJoin("#" + channel);

VoiceModHandling.GetInstance().SetIrcReference(this);
MainForm.TwitchSocket.SetIrcReference(this);
VoiceModHandling.GetInstance().ConnectToVoiceMod();
}

private void MeebyIrc_OnRawMessage(object sender, IrcEventArgs e)
Expand All @@ -107,20 +108,9 @@ private void MeebyIrc_OnRawMessage(object sender, IrcEventArgs e)
if (e.Data.Tags.ContainsKey("custom-reward-id"))
{
var settings = PrivateSettings.GetInstance();
var rewardID = e.Data.Tags["custom-reward-id"];
//var rewardID = e.Data.Tags["custom-reward-id"];
msg.userID = e.Data.Tags["user-id"];

if (rewardID == settings.SoundRewardID)
{
msg.msgType = MessageType.SoundReward;
msg.RewardID = rewardID;
}
else
{
msg.msgType = MessageType.Normal;
msg.RewardID = "";
}

msg.RewardID = "";
}
msg.user = e.Data.Nick;
msg.message = e.Data.Message;
Expand Down Expand Up @@ -165,59 +155,47 @@ private bool RunBot(ReadMessage formattedMessage)
{
FormattedMessage = formattedMessage;

var settings = PrivateSettings.GetInstance();

switch (FormattedMessage.msgType)
if (!formattedMessage.message.StartsWith(PrefixChar.ToString()) || irc.ignorelist.Contains(formattedMessage.user))
{
case MessageType.SoundReward:
{
parent.ThreadSafeAddPreviewText(formattedMessage.user + ": " + formattedMessage.message, LineType.SoundCommand);
string text = formattedMessage.message.ToLower();
if (text.StartsWith(PrefixChar.ToString()))
text = text.Remove(0, 1);

TwitchRightsEnum privilage = formattedMessage.rights;


if (SndDB.PlaySoundIfExists(formattedMessage.user, text, privilage, true))
irc.UpdateRedemptionStatus(formattedMessage, KrakenConnections.RedemptionStates.FULFILLED);
else
irc.UpdateRedemptionStatus(formattedMessage, KrakenConnections.RedemptionStates.CANCELED);
parent.ThreadSafeAddPreviewText(formattedMessage.user + ": " + formattedMessage.message, LineType.Generic);
//literally nothing else happens in your code if this is false
return true;
}
else
{
string text = formattedMessage.message.Remove(0, 1).ToLower();

return true;
}
default:
if (!formattedMessage.message.StartsWith(PrefixChar.ToString()) || irc.ignorelist.Contains(formattedMessage.user))
//Mod Commands
if (formattedMessage.rights >= TwitchRightsEnum.Mod || irc.moderators.Contains(formattedMessage.user))
{
if (text == "stopallsounds")
{
parent.ThreadSafeAddPreviewText(formattedMessage.user + ": " + formattedMessage.message, LineType.Generic);
//literally nothing else happens in your code if this is false
parent.ThreadSafeAddPreviewText(formattedMessage.user + ": " + formattedMessage.message, LineType.ModCommand);
SndDB.StopAllSounds();
return true;
}
else
{
TwitchRightsEnum privilage = formattedMessage.rights;
string text = formattedMessage.message.Remove(0, 1).ToLower();

//Mod Commands
if (formattedMessage.rights >= TwitchRightsEnum.Mod || irc.moderators.Contains(formattedMessage.user))
if (text.ToLower().StartsWith("delay "))
{
var split = text.Split(' ');
text = split[split.Length - 1];
if (int.TryParse(text, out int delayValue))
{
if (text == "stopallsounds")
{
parent.ThreadSafeAddPreviewText(formattedMessage.user + ": " + formattedMessage.message, LineType.ModCommand);
SndDB.StopAllSounds();
return true;
}
if (delayValue < 0)
delayValue = 0;
this.SndDB.SetDelay(delayValue);
}

parent.ThreadSafeAddPreviewText(formattedMessage.user + ": " + formattedMessage.message, LineType.ModCommand);
return true;
}
}

return true;
}
}

internal void UpdateVolume()
{
SndDB.ChangeVolume(PrivateSettings.GetInstance().Volume);
}
internal void UpdateVolume() => SndDB.ChangeVolume(PrivateSettings.GetInstance().Volume);

#region EventHandlers
private void MeebyIrc_OnJoin(object sender, Meebey.SmartIrc4net.JoinEventArgs e)
Expand Down Expand Up @@ -273,8 +251,8 @@ private void MeebyIrc_OnError(object sender, Meebey.SmartIrc4net.ErrorEventArgs

private void MeebyIrc_OnReadLine(object sender, Meebey.SmartIrc4net.ReadLineEventArgs e)
{
/* if (PrivateSettings.GetInstance().Debug_mode)
parent.ThreadSafeAddPreviewText($"Raw message: {e.Line}", LineType.IrcCommand);*/
/* if (PrivateSettings.GetInstance().Debug_mode)
parent.ThreadSafeAddPreviewText($"Raw message: {e.Line}", LineType.IrcCommand);*/
}

private void MeebyIrc_OnPart(object sender, PartEventArgs e)
Expand Down
8 changes: 0 additions & 8 deletions IRC/IrcClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ public struct ReadMessage
public string userID;
public string message;
public Structs.TwitchRightsEnum rights;
public Structs.MessageType msgType;
public string RewardID;
}

Expand Down Expand Up @@ -284,13 +283,6 @@ public void SaveIgnoredList()
{
File.WriteAllLines(@ignoredfile, ignorelist);
}

internal async void UpdateRedemptionStatus(ReadMessage formattedMessage, KrakenConnections.RedemptionStates redemptionStateToSet)
{
var rewards = await krakenConnection.GetUnredeemedRewardsForUser(parent, formattedMessage.RewardID, formattedMessage.userID);
parent.ThreadSafeAddPreviewText($"{(redemptionStateToSet == KrakenConnections.RedemptionStates.FULFILLED ? "Accepting" : "Denying")} requests for {formattedMessage.user}", LineType.IrcCommand);
krakenConnection.UpdateRedemptionStatus(formattedMessage.RewardID, rewards.Select(x => x.id).ToArray(), redemptionStateToSet);
}
#endregion
}
}
Loading

0 comments on commit b853f96

Please sign in to comment.