Skip to content

Commit 04e8c05

Browse files
authored
Fixes : Bot Services (#14)
1 parent 27941c9 commit 04e8c05

34 files changed

+9821
-10176
lines changed

TrackMaster/Controllers/OverlayController.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,16 @@ public IActionResult SaveSettings(OverlaySettingsModel overlaySettingsModel)
3838
{
3939
SettingsHelper settingsHelper = new(_dataFields);
4040

41-
MainSettingsModel = settingsHelper.GetSettings(_dataFields.Appfullpath);
42-
settingsHelper.SetMainSettings(MainSettingsModel.TwitchCredentials, overlaySettingsModel, MainSettingsModel.DiscordCredentials);
43-
_dataFields.ShowArtwork = overlaySettingsModel.DisplayAlbumArt;
41+
if (_dataFields.Appfullpath != null)
42+
{
43+
MainSettingsModel = settingsHelper.GetSettings(_dataFields.Appfullpath);
44+
settingsHelper.SetMainSettings(MainSettingsModel.TwitchCredentials, overlaySettingsModel, MainSettingsModel.DiscordCredentials);
45+
_dataFields.ShowArtwork = overlaySettingsModel.DisplayAlbumArt;
4446

45-
_tracklisthubContext.Clients.All.SendAsync("Overlay", overlaySettingsModel.DisplayAlbumArt);
47+
_tracklisthubContext.Clients.All.SendAsync("Overlay", overlaySettingsModel.DisplayAlbumArt);
4648

47-
_dataFields.IsConnectedTwitch = false;
49+
_dataFields.IsConnectedTwitch = false;
50+
}
4851
}
4952

5053
return Json(new { title = "Notification", message = "Settings saved!", result = overlaySettingsModel });

TrackMaster/Controllers/SettingsController.cs

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,20 @@
44
using TrackMaster.Helper;
55
using TrackMaster.Hubs;
66
using TrackMaster.Models;
7-
using ITimerHostedServiceDiscord = TrackMaster.Services.DiscordServices.ITimerHostedService;
8-
using ITimerHostedServiceTwitch = TrackMaster.Services.TwitchServices.ITimerHostedService;
7+
using TrackMaster.Services.DiscordServices;
8+
using TrackMaster.Services.TwitchServices;
99

1010
namespace TrackMaster.Controllers
1111
{
1212
public class SettingsController : Controller
1313
{
1414
private MainSettingsModel MainSettingsModel;
1515
private readonly DataFields _dataFields;
16-
private readonly ITimerHostedServiceTwitch _hostedTwitchService;
17-
private readonly ITimerHostedServiceDiscord _hostedDiscordService;
16+
private readonly TwitchBot _hostedTwitchService;
17+
private readonly DiscordBot _hostedDiscordService;
1818
private readonly IHubContext<TrackistHub> _tracklisthubContext;
1919

20-
public SettingsController(ITimerHostedServiceTwitch hostedTwitchService, ITimerHostedServiceDiscord hostedDiscordService,
20+
public SettingsController(TwitchBot hostedTwitchService, DiscordBot hostedDiscordService,
2121
DataFields dataFields, IHubContext<TrackistHub> synchub)
2222
{
2323
_hostedTwitchService = hostedTwitchService;
@@ -68,10 +68,13 @@ public IActionResult SaveTwitchSettings(MainSettingsModel mainSettingsModel)
6868
{
6969
SettingsHelper settingsHelper = new(_dataFields);
7070

71-
MainSettingsModel = settingsHelper.GetSettings(_dataFields.Appfullpath);
72-
settingsHelper.SetMainSettings(mainSettingsModel.TwitchCredentials, MainSettingsModel.OverlaySettings, MainSettingsModel.DiscordCredentials);
71+
if(_dataFields.Appfullpath != null)
72+
{
73+
MainSettingsModel = settingsHelper.GetSettings(_dataFields.Appfullpath);
74+
settingsHelper.SetMainSettings(mainSettingsModel.TwitchCredentials, MainSettingsModel.OverlaySettings, MainSettingsModel.DiscordCredentials);
7375

74-
_dataFields.IsConnectedTwitch = false;
76+
_dataFields.IsConnectedTwitch = false;
77+
}
7578
}
7679

7780
return Json(new { title = "Notification", message = "Twitch Settings saved!", result = mainSettingsModel });
@@ -85,10 +88,14 @@ public IActionResult SaveDiscordSettings(MainSettingsModel mainSettingsModel)
8588
{
8689
SettingsHelper settingsHelper = new(_dataFields);
8790

88-
MainSettingsModel = settingsHelper.GetSettings(_dataFields.Appfullpath);
89-
settingsHelper.SetMainSettings(MainSettingsModel.TwitchCredentials, MainSettingsModel.OverlaySettings, mainSettingsModel.DiscordCredentials);
91+
if (_dataFields.Appfullpath != null)
92+
{
93+
MainSettingsModel = settingsHelper.GetSettings(_dataFields.Appfullpath);
94+
settingsHelper.SetMainSettings(MainSettingsModel.TwitchCredentials, MainSettingsModel.OverlaySettings, mainSettingsModel.DiscordCredentials);
9095

91-
_dataFields.IsConnectedDiscord = false;
96+
_dataFields.IsConnectedDiscord = false;
97+
}
98+
9299
}
93100

94101
return Json(new { title = "Notification", message = "Discord Settings saved!", result = mainSettingsModel });

TrackMaster/Program.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ public static IHostBuilder CreateHostBuilder(string[] args) =>
3434
.UseSerilog()
3535
.ConfigureServices(services =>
3636
{
37-
services.AddHostedService<TwitchBot>(); //Connect to Twitch
38-
services.AddHostedService<DiscordBot>(); //Connect to Discord Channel
37+
//services.AddHostedService<TwitchBot>(); //Connect to Twitch
38+
//services.AddHostedService<DiscordBot>(); //Connect to Discord Channel
3939
//Add more services to connect to here and create a service class under services.
4040
services.AddHostedService<Sniffy>();
4141
services.AddSingleton<DataFields>();

TrackMaster/Services/DiscordServices/DiscordBot.cs

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,8 @@
1313
using TrackMaster.Models;
1414

1515
namespace TrackMaster.Services.DiscordServices
16-
{
17-
public interface ITimerHostedService : IHostedService {}
18-
public class DiscordBot : ITimerHostedService
16+
{
17+
public class DiscordBot : IHostedService
1918
{
2019
private DiscordSocketClient client;
2120
private readonly IHubContext<TrackistHub> _tracklisthubContext;
@@ -26,7 +25,6 @@ public class DiscordBot : ITimerHostedService
2625
private readonly DataFields _dataFields;
2726

2827
private static DiscordBot _instance;
29-
3028
public static DiscordBot Instance => _instance;
3129

3230
public DiscordBot(IHubContext<TrackistHub> synchub, ILogger<DiscordBot> logger, DataFields dataFields)
@@ -41,9 +39,13 @@ public Task StartAsync(CancellationToken cancellationToken)
4139
{
4240
_logger.LogInformation("DiscordBot Service is Starting");
4341

44-
DoWork();
42+
Task.Run(async () =>
43+
{
44+
await DoWork(cancellationToken);
45+
46+
}, cancellationToken);
4547

46-
_timer = new Timer(CheckStatus, null, TimeSpan.Zero, TimeSpan.FromSeconds(20));
48+
_timer = new Timer(CheckStatus, null, TimeSpan.Zero, TimeSpan.FromSeconds(5));
4749

4850
return Task.CompletedTask;
4951
}
@@ -54,9 +56,17 @@ private void CheckStatus(object state)
5456
{
5557
_tracklisthubContext.Clients.All.SendAsync("DeviceAndTwitchStatus", 4, "Connected to Discord Bot!");
5658
}
59+
else
60+
{
61+
Task.Run(async () =>
62+
{
63+
await DoWork(state);
64+
65+
});
66+
}
5767
}
5868

59-
private async void DoWork()
69+
private async Task DoWork(object state)
6070
{
6171
_logger.LogInformation("Timed Background Service is working.");
6272

@@ -96,7 +106,7 @@ private async Task Bot()
96106

97107
return Task.CompletedTask;
98108
};
99-
await Task.Delay(-1);
109+
//await Task.Delay(-1);
100110
}
101111
catch (Exception ex)
102112
{
@@ -125,7 +135,7 @@ private Task ReadyAsync()
125135
return Task.CompletedTask;
126136
}
127137

128-
public async Task SendMessageToDiscord(string message)
138+
public async void SendMessageToDiscord(string message)
129139
{
130140
var channel = client.GetChannel(_discordChannelId) as ITextChannel;
131141
await channel.SendMessageAsync(message, false, flags: MessageFlags.SuppressNotification);
@@ -138,6 +148,7 @@ private async Task<MainSettingsModel> GetSetDiscordCredentials()
138148
if (HybridSupport.IsElectronActive)
139149
{
140150
string path = await Electron.App.GetPathAsync(PathName.UserData);
151+
Console.WriteLine("Discord: " + path);
141152
_dataFields.Appfullpath = path + @"\Settings.json";
142153
return settingsHelper.GetSettings(_dataFields.Appfullpath);
143154
}

TrackMaster/Services/Sniffy/Sniffy.cs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ public class Sniffy : BackgroundService
3030
{
3131
#region Variable declarations
3232
private readonly IHubContext<TrackistHub> _tracklisthubContext;
33-
private readonly DiscordBot _discordBot;
34-
private readonly TwitchBot _twitchBot;
33+
readonly DiscordBot _discordBot;
34+
TwitchBot _twitchBot;
3535

3636
private readonly string _ethernetdevice;
3737
private readonly string _controllerIP;
@@ -60,16 +60,15 @@ public class Sniffy : BackgroundService
6060
private RestoreTrackMetadataModel RestoreTrackMetadataModel;
6161

6262
#endregion
63-
public Sniffy(IConfiguration configuration, IHubContext<TrackistHub> synchub, ILogger<Sniffy> logger, DataFields dataFields,
64-
DiscordBot discordBot, TwitchBot twitchBot)
63+
public Sniffy(IConfiguration configuration, IHubContext<TrackistHub> synchub, ILogger<Sniffy> logger, DataFields dataFields, TwitchBot twitchBot, DiscordBot discordBot)
6564
{
6665
_tracklisthubContext = synchub;
6766
_ethernetdevice = configuration.GetSection("EthernetDevice").Value;
6867
_controllerIP = configuration.GetSection("ControllerIP").Value;
6968
_dataFields = dataFields;
7069
_logger = logger;
71-
_discordBot = discordBot;
7270
_twitchBot = twitchBot;
71+
_discordBot = discordBot;
7372
}
7473

7574
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
@@ -741,23 +740,25 @@ private static string HextoString(string InputText)
741740

742741
private void MixStatusChanged(object sender, OverlayChangeObserver.MixStatusChangedEventArgs e)
743742
{
743+
744+
744745
if (e.Player1)
745746
{
746747
_tracklisthubContext.Clients.All.SendAsync("NowPlaying", _dataFields.Trackartist1, _dataFields.Tracktitle1, _dataFields.Albumartid1, _dataFields.ShowArtwork);
747748
TrackHistory(_dataFields.Trackpath);
748749

749-
_discordBot.SendMessageToDiscord(string.Join(@"{0} - {1}", _dataFields.Trackartist1, _dataFields.Tracktitle1)).Wait();
750-
_twitchBot.CurrentTrackPlaying(string.Join(@"{0} - {1}", _dataFields.Trackartist1, _dataFields.Tracktitle1));
751-
750+
_discordBot.SendMessageToDiscord(string.Format(@"{0} - {1}", _dataFields.Trackartist1, _dataFields.Tracktitle1));
751+
_twitchBot.CurrentTrackPlaying(string.Format(@"{0} - {1}", _dataFields.Trackartist1, _dataFields.Tracktitle1));
752+
752753
}
753754
if (e.Player2)
754755
{
755756
_tracklisthubContext.Clients.All.SendAsync("NowPlaying", _dataFields.Trackartist2, _dataFields.Tracktitle2, _dataFields.Albumartid2, _dataFields.ShowArtwork);
756757
TrackHistory(_dataFields.Trackpath2);
757758

758-
_discordBot.SendMessageToDiscord(string.Join(@"{0} - {1}", _dataFields.Trackartist2, _dataFields.Tracktitle2)).Wait();
759-
_twitchBot.CurrentTrackPlaying(string.Join(@"{0} - {1}", _dataFields.Trackartist2, _dataFields.Tracktitle2));
760-
}
759+
_discordBot.SendMessageToDiscord(string.Format(@"{0} - {1}", _dataFields.Trackartist2, _dataFields.Tracktitle2));
760+
_twitchBot.CurrentTrackPlaying(string.Format(@"{0} - {1}", _dataFields.Trackartist2, _dataFields.Tracktitle2));
761+
}
761762
}
762763

763764
private List<string> TrackHistory(string trackMetadata)

TrackMaster/Services/TwitchServices/TwitchBot.cs

Lines changed: 35 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@
1717

1818
namespace TrackMaster.Services.TwitchServices
1919
{
20-
public interface ITimerHostedService : IHostedService {}
21-
public class TwitchBot : ITimerHostedService
20+
public class TwitchBot : IHostedService
2221
{
2322
private TwitchClient client;
2423
private readonly IHubContext<TrackistHub> _tracklisthubContext;
@@ -29,7 +28,6 @@ public class TwitchBot : ITimerHostedService
2928
private Timer _timer;
3029
private readonly DataFields _dataFields;
3130

32-
3331
private static TwitchBot _instance;
3432

3533
public static TwitchBot Instance => _instance;
@@ -46,10 +44,12 @@ public Task StartAsync(CancellationToken cancellationToken)
4644
{
4745
_logger.LogInformation("TwitchBot Service is Starting");
4846

49-
DoWork();
50-
51-
_timer = new Timer(CheckStatus, null, TimeSpan.Zero, TimeSpan.FromSeconds(20));
52-
47+
Task.Run(async () =>
48+
{
49+
await DoWork(cancellationToken);
50+
51+
}, cancellationToken);
52+
_timer = new Timer(CheckStatus, null, TimeSpan.Zero, TimeSpan.FromSeconds(5));
5353
return Task.CompletedTask;
5454
}
5555

@@ -59,9 +59,17 @@ private void CheckStatus(object state)
5959
{
6060
_tracklisthubContext.Clients.All.SendAsync("DeviceAndTwitchStatus", 2, "Connected to Twitch Bot!");
6161
}
62+
else
63+
{
64+
Task.Run(async () =>
65+
{
66+
await DoWork(state);
67+
68+
});
69+
}
6270
}
6371

64-
private async void DoWork()
72+
private async Task DoWork(object state)
6573
{
6674
_logger.LogInformation("Timed Background Service is working.");
6775

@@ -96,22 +104,23 @@ private async Task Bot()
96104
if (string.IsNullOrEmpty(_twitchUsername) || string.IsNullOrEmpty(_twitchPassword))
97105
throw new ArgumentException();
98106

99-
ConnectionCredentials credentials = new(_twitchUsername, _twitchPassword);
100-
var clientOptions = new ClientOptions
101-
{
102-
MessagesAllowedInPeriod = 750,
103-
ThrottlingPeriod = TimeSpan.FromSeconds(30)
104-
};
105-
WebSocketClient customClient = new(clientOptions);
106-
client = new TwitchClient(customClient);
107-
client.Initialize(credentials, _twitchChannel);
108-
client.OnMessageReceived += Client_OnMessageReceived;
109-
client.OnConnectionError += Client_OnConnectionError;
110-
client.OnIncorrectLogin += Client_OnIncorrectLogin;
111-
client.OnConnected += Client_OnConnected;
112-
client.OnJoinedChannel += Client_OnJoinedChannel;
113-
client.Connect();
114-
107+
await Task.Run(() => {
108+
ConnectionCredentials credentials = new(_twitchUsername, _twitchPassword);
109+
var clientOptions = new ClientOptions
110+
{
111+
MessagesAllowedInPeriod = 750,
112+
ThrottlingPeriod = TimeSpan.FromSeconds(30)
113+
};
114+
WebSocketClient customClient = new(clientOptions);
115+
client = new TwitchClient(customClient);
116+
client.Initialize(credentials, _twitchChannel);
117+
client.OnMessageReceived += Client_OnMessageReceived;
118+
client.OnConnectionError += Client_OnConnectionError;
119+
client.OnIncorrectLogin += Client_OnIncorrectLogin;
120+
client.OnConnected += Client_OnConnected;
121+
client.OnJoinedChannel += Client_OnJoinedChannel;
122+
client.Connect();
123+
});
115124
}
116125
catch (Exception ex)
117126
{
@@ -174,6 +183,8 @@ private async Task<MainSettingsModel> GetSetTwitchCredentials()
174183
if (HybridSupport.IsElectronActive)
175184
{
176185
string path = await Electron.App.GetPathAsync(PathName.UserData);
186+
187+
Console.WriteLine("Twitch: " + path);
177188
_dataFields.Appfullpath = path + @"\Settings.json";
178189
return settingsHelper.GetSettings(_dataFields.Appfullpath);
179190
}

TrackMaster/Startup.cs

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,19 +32,23 @@ public void ConfigureServices(IServiceCollection services)
3232
{
3333
services.AddControllersWithViews();
3434
services.AddSignalR();
35+
services.AddElectron();
3536
services.AddSingleton(Configuration);
3637
services.AddSingleton<IHostedService, Sniffy>();
3738
services.AddSingleton<DataFieldsInstance>();
38-
services.AddSingleton<DiscordBot>();
3939
services.AddSingleton<TwitchBot>();
40-
services.AddSingleton<Services.TwitchServices.ITimerHostedService, TwitchBot>(serviceProvider =>
40+
services.AddSingleton<DiscordBot>();
41+
services.AddSingleton<IHostedService, TwitchBot>(serviceProvider =>
4142
{
4243
return TwitchBot.Instance;
4344
});
44-
services.AddSingleton<Services.DiscordServices.ITimerHostedService, DiscordBot>(serviceProvider =>
45+
services.AddSingleton<IHostedService, DiscordBot>(serviceProvider =>
4546
{
4647
return DiscordBot.Instance;
4748
});
49+
services.AddHostedService<TwitchBot>();
50+
services.AddHostedService<DiscordBot>();
51+
4852
}
4953

5054
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
@@ -73,20 +77,20 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
7377
});
7478

7579
Task.Run(async () =>
76-
{
80+
{
7781
var browserWindowOptions = new BrowserWindowOptions
7882
{
7983
WebPreferences = new WebPreferences
8084
{
8185
NodeIntegration = false
82-
}
86+
},
87+
Center = true,
88+
Height = 880,
89+
Width = 1450,
90+
AutoHideMenuBar = true,
91+
Resizable = true,
92+
HasShadow = true
8393
};
84-
browserWindowOptions.Center = true;
85-
browserWindowOptions.Height = 880;
86-
browserWindowOptions.Width = 1450;
87-
browserWindowOptions.AutoHideMenuBar = true;
88-
browserWindowOptions.Resizable = true;
89-
browserWindowOptions.HasShadow = true;
9094

9195
var browserWindow = await Electron.WindowManager.CreateWindowAsync(browserWindowOptions);
9296
browserWindow.Show();

0 commit comments

Comments
 (0)