diff --git a/StravaDiscordBot/AppOptions.cs b/StravaDiscordBot/AppOptions.cs index 5ef0fb7..b7dea6b 100644 --- a/StravaDiscordBot/AppOptions.cs +++ b/StravaDiscordBot/AppOptions.cs @@ -10,6 +10,7 @@ public class AppOptions public LokiOptions Loki { get; set; } public string BaseUrl { get; set; } public bool LogToConsole { get; set; } + public ContainsReplyOptions[] ContainsReplies { get; set; } } public class DiscordOptions @@ -29,4 +30,10 @@ public class LokiOptions public string User { get; set; } public string Password { get; set; } } -} \ No newline at end of file + + public class ContainsReplyOptions + { + public string Contains { get; set; } + public string Response { get; set; } + } +} diff --git a/StravaDiscordBot/Services/ContainsReplyService.cs b/StravaDiscordBot/Services/ContainsReplyService.cs new file mode 100644 index 0000000..a1c1a91 --- /dev/null +++ b/StravaDiscordBot/Services/ContainsReplyService.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using BetterHostedServices; +using Discord.WebSocket; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; + +namespace StravaDiscordBot.Services +{ + public class ContainsReplyService : CriticalBackgroundService + { + private readonly AppOptions _appOptions; + private readonly ILogger _logger; + private readonly DiscordSocketClient _discordSocketClient; + + public ContainsReplyService( + IApplicationEnder applicationEnder, + AppOptions appOptions, + ILogger logger, + DiscordSocketClient discordSocketClient + ) + : base(applicationEnder) + { + _appOptions = appOptions; + _logger = logger; + _discordSocketClient = discordSocketClient; + } + + protected override async Task ExecuteAsync(CancellationToken stoppingToken) + { + _discordSocketClient.MessageReceived += MessageReceivedHandler; + } + + private async Task MessageReceivedHandler(SocketMessage message) + { + if (message.Author.IsBot) + { + return; + } + + foreach (var containsReply in _appOptions.ContainsReplies) + { + string messageContent = message.Content.ToLower(); + string partSearchingFor = containsReply.Contains.ToLower(); + + if (!messageContent.Contains(partSearchingFor)) + { + continue; + } + + await message.Channel.SendMessageAsync(containsReply.Response); + } + } + } +} diff --git a/StravaDiscordBot/Startup.cs b/StravaDiscordBot/Startup.cs index 10aff1e..2cb3b4b 100644 --- a/StravaDiscordBot/Startup.cs +++ b/StravaDiscordBot/Startup.cs @@ -88,6 +88,7 @@ public void ConfigureServices(IServiceCollection services) services.AddHostedService(); //services.AddHostedService(); services.AddHostedService(); + services.AddHostedService(); // API