diff --git a/Directory.Packages.props b/Directory.Packages.props index e28558e..5f48273 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -5,9 +5,10 @@ enable 8.0.0 + + + - - @@ -23,6 +24,7 @@ + diff --git a/src/Nocr.TelegramListener.AppServices/Nocr.TelegramListener.AppServices.csproj b/src/Nocr.TelegramListener.AppServices/Nocr.TelegramListener.AppServices.csproj index f46ec90..d062521 100644 --- a/src/Nocr.TelegramListener.AppServices/Nocr.TelegramListener.AppServices.csproj +++ b/src/Nocr.TelegramListener.AppServices/Nocr.TelegramListener.AppServices.csproj @@ -1,14 +1,15 @@  - + false - + + diff --git a/src/Nocr.TelegramListener.AppServices/ServiceCollectionExtensions.cs b/src/Nocr.TelegramListener.AppServices/ServiceCollectionExtensions.cs index 299398f..8051b4e 100644 --- a/src/Nocr.TelegramListener.AppServices/ServiceCollectionExtensions.cs +++ b/src/Nocr.TelegramListener.AppServices/ServiceCollectionExtensions.cs @@ -1,7 +1,9 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; +using Nocr.TelegramListener.AppServices.TextMatches; using Nocr.TelegramListener.AppServices.UpdateListeners; using Nocr.TelegramListener.AppServices.UpdateListeners.Handlers; +using Rebus.Config; namespace Nocr.TelegramListener.AppServices; @@ -16,6 +18,8 @@ public static class ServiceCollectionExtensions services.Configure(configuration.GetSection(nameof(WTelegramClientOptions))); services.AddHostedService(); + services.AddRebusHandler(); + services.AddScoped(); services.AddScoped(); services.AddScoped(); diff --git a/src/Nocr.TelegramListener.AppServices/TextMatches/TextMatchCreatedHandler.cs b/src/Nocr.TelegramListener.AppServices/TextMatches/TextMatchCreatedHandler.cs new file mode 100644 index 0000000..c9d3f9e --- /dev/null +++ b/src/Nocr.TelegramListener.AppServices/TextMatches/TextMatchCreatedHandler.cs @@ -0,0 +1,30 @@ +using Nocr.TelegramListener.AppServices.UpdateListeners; +using Nocr.TextMatcher.Async.Api.Contracts; +using Rebus.Handlers; +using TL; + +namespace Nocr.TelegramListener.AppServices.TextMatches; + +public class TextMatchCreatedHandler : IHandleMessages +{ + private readonly TelegramRegistry _telegramRegistry; + private readonly ITelegramClientContainer _clientContainer; + + public TextMatchCreatedHandler(TelegramRegistry telegramRegistry, + ITelegramClientContainer clientContainer) + { + _telegramRegistry = telegramRegistry ?? throw new ArgumentNullException(nameof(telegramRegistry)); + _clientContainer = clientContainer ?? throw new ArgumentNullException(nameof(clientContainer)); + } + + public async Task Handle(TextMatchCreated message) + { + var client = _clientContainer.Client; + var resolved = await client.Contacts_ResolveUsername(message.ChatUsername); + if (resolved.Chat is Channel channel && !_telegramRegistry.Chats.ContainsKey(resolved.Chat.ID)) + { + await client.Channels_JoinChannel(channel); + await _telegramRegistry.Update(client); + } + } +} \ No newline at end of file diff --git a/src/Nocr.TelegramListener.AppServices/UpdateListeners/TelegramRegistry.cs b/src/Nocr.TelegramListener.AppServices/UpdateListeners/TelegramRegistry.cs index 3208898..1d6d3f5 100644 --- a/src/Nocr.TelegramListener.AppServices/UpdateListeners/TelegramRegistry.cs +++ b/src/Nocr.TelegramListener.AppServices/UpdateListeners/TelegramRegistry.cs @@ -1,5 +1,6 @@ using System.Collections.Concurrent; using TL; +using WTelegram; namespace Nocr.TelegramListener.AppServices.UpdateListeners; @@ -11,6 +12,15 @@ public sealed class TelegramRegistry private readonly object _syncRoot = new(); + public async Task Update(Client client) + { + var dialogs = await client.Messages_GetAllDialogs(); + lock (_syncRoot) + { + dialogs.CollectUsersChats(Users, Chats); + } + } + public void SetMy(User my) { lock (_syncRoot) diff --git a/src/Nocr.TelegramListener.AppServices/UpdateListeners/UpdateListenerBackgroundService.cs b/src/Nocr.TelegramListener.AppServices/UpdateListeners/UpdateListenerBackgroundService.cs index 4a3af3a..0b78622 100644 --- a/src/Nocr.TelegramListener.AppServices/UpdateListeners/UpdateListenerBackgroundService.cs +++ b/src/Nocr.TelegramListener.AppServices/UpdateListeners/UpdateListenerBackgroundService.cs @@ -16,12 +16,10 @@ public sealed class UpdateListenerBackgroundService : BackgroundService private readonly IServiceProvider _serviceProvider; private readonly ITelegramClientContainer _telegramClientContainer; private readonly TelegramRegistry _telegramRegistry; - private readonly WTelegramClientOptions _wTelegramClientOptions; public UpdateListenerBackgroundService( ILogger logger, IServiceProvider serviceProvider, - IOptions wTelegramClientOptions, ITelegramClientContainer telegramClientContainer, TelegramRegistry telegramRegistry) { @@ -30,8 +28,6 @@ public sealed class UpdateListenerBackgroundService : BackgroundService _telegramClientContainer = telegramClientContainer ?? throw new ArgumentNullException(nameof(telegramClientContainer)); _telegramRegistry = telegramRegistry ?? throw new ArgumentNullException(nameof(telegramRegistry)); - _wTelegramClientOptions = wTelegramClientOptions.Value ?? - throw new ArgumentNullException(nameof(wTelegramClientOptions)); } @@ -57,8 +53,7 @@ public sealed class UpdateListenerBackgroundService : BackgroundService _telegramRegistry.My.first_name + " " + _telegramRegistry.My.last_name, _telegramRegistry.My.id); - var dialogs = await client.Messages_GetAllDialogs(); - dialogs.CollectUsersChats(_telegramRegistry.Users, _telegramRegistry.Chats); + await _telegramRegistry.Update(client); } await Task.Delay(TimeSpan.FromMinutes(5), stoppingToken); diff --git a/src/Nocr.TelegramListener.Async.Api.Contracts/Nocr.TelegramListener.Async.Api.Contracts.csproj b/src/Nocr.TelegramListener.Async.Api.Contracts/Nocr.TelegramListener.Async.Api.Contracts.csproj index e3f40b7..45ae55f 100644 --- a/src/Nocr.TelegramListener.Async.Api.Contracts/Nocr.TelegramListener.Async.Api.Contracts.csproj +++ b/src/Nocr.TelegramListener.Async.Api.Contracts/Nocr.TelegramListener.Async.Api.Contracts.csproj @@ -3,7 +3,7 @@ true - + net8.0 enable diff --git a/src/Nocr.TelegramListener.Core/Nocr.TelegramListener.Core.csproj b/src/Nocr.TelegramListener.Core/Nocr.TelegramListener.Core.csproj index dff069b..e35d8fc 100644 --- a/src/Nocr.TelegramListener.Core/Nocr.TelegramListener.Core.csproj +++ b/src/Nocr.TelegramListener.Core/Nocr.TelegramListener.Core.csproj @@ -3,7 +3,7 @@ false - + diff --git a/src/Nocr.TelegramListener.Host/Infrastructure/Startup.cs b/src/Nocr.TelegramListener.Host/Infrastructure/Startup.cs index e4c499d..9a1d9ff 100644 --- a/src/Nocr.TelegramListener.Host/Infrastructure/Startup.cs +++ b/src/Nocr.TelegramListener.Host/Infrastructure/Startup.cs @@ -3,6 +3,7 @@ using Nocr.TelegramListener.AppServices; using Nocr.TelegramListener.Async.Api.Contracts.Events; using Nocr.TelegramListener.Core.Dates; using Nocr.TelegramListener.Core.Options; +using Rebus.Bus; using Rebus.Config; using Rebus.Routing.TypeBased; using Rebus.Serialization.Json; @@ -39,5 +40,7 @@ public class Startup public void Configure(IApplicationBuilder app) { + var bus = app.ApplicationServices.GetRequiredService(); + bus.Advanced.Topics.Subscribe("nocr.text.matcher").GetAwaiter().GetResult(); } } \ No newline at end of file