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