using System.Reactive.Linq; using Discord.WebSocket; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using VpSharp; using VpSharp.Extensions; namespace VpBridge.Services; internal sealed class RelayService : BackgroundService { private readonly ILogger _logger; private readonly IDiscordService _discordService; private readonly IVirtualParadiseService _virtualParadiseService; private readonly DiscordSocketClient _discordClient; private readonly VirtualParadiseClient _virtualParadiseClient; /// /// Initializes a new instance of the class. /// /// The logger. /// The Discord service. /// The Virtual Paradise service. /// The Discord client. /// The Virtual Paradise client. public RelayService(ILogger logger, IDiscordService discordService, IVirtualParadiseService virtualParadiseService, DiscordSocketClient discordClient, VirtualParadiseClient virtualParadiseClient) { _logger = logger; _discordService = discordService; _virtualParadiseService = virtualParadiseService; _discordClient = discordClient; _virtualParadiseClient = virtualParadiseClient; } /// protected override Task ExecuteAsync(CancellationToken stoppingToken) { _logger.LogInformation("Establishing relay"); _discordService.OnMessageReceived .Where(m => m.Author != _discordClient.CurrentUser) .SubscribeAsync(_virtualParadiseService.SendMessageAsync); _virtualParadiseService.OnMessageReceived .Where(m => m.Author != _virtualParadiseClient.CurrentAvatar) .SubscribeAsync(_discordService.SendMessageAsync); return Task.CompletedTask; } }