diff --git a/src/Nocr.TelegramListener.AppServices/Nocr.TelegramListener.AppServices.csproj.DotSettings b/src/Nocr.TelegramListener.AppServices/Nocr.TelegramListener.AppServices.csproj.DotSettings
new file mode 100644
index 0000000..1e4f663
--- /dev/null
+++ b/src/Nocr.TelegramListener.AppServices/Nocr.TelegramListener.AppServices.csproj.DotSettings
@@ -0,0 +1,2 @@
+
+ True
\ No newline at end of file
diff --git a/src/Nocr.TelegramListener.AppServices/ServiceCollectionExtensions.cs b/src/Nocr.TelegramListener.AppServices/ServiceCollectionExtensions.cs
index 330e802..299398f 100644
--- a/src/Nocr.TelegramListener.AppServices/ServiceCollectionExtensions.cs
+++ b/src/Nocr.TelegramListener.AppServices/ServiceCollectionExtensions.cs
@@ -17,7 +17,8 @@ public static class ServiceCollectionExtensions
services.AddHostedService();
services.AddScoped();
- services.AddScoped();
+ services.AddScoped();
+ services.AddScoped();
services.AddSingleton();
services.AddSingleton();
diff --git a/src/Nocr.TelegramListener.AppServices/UpdateListeners/Handlers/IEditMessageHandler.cs b/src/Nocr.TelegramListener.AppServices/UpdateListeners/Handlers/IEditMessageHandler.cs
new file mode 100644
index 0000000..fe8b80a
--- /dev/null
+++ b/src/Nocr.TelegramListener.AppServices/UpdateListeners/Handlers/IEditMessageHandler.cs
@@ -0,0 +1,8 @@
+using TL;
+
+namespace Nocr.TelegramListener.AppServices.UpdateListeners.Handlers;
+
+public interface IEditMessageHandler
+{
+ Task Handle(MessageBase messageBase);
+}
\ No newline at end of file
diff --git a/src/Nocr.TelegramListener.AppServices/UpdateListeners/Handlers/IMessageHandler.cs b/src/Nocr.TelegramListener.AppServices/UpdateListeners/Handlers/IMessageHandler.cs
deleted file mode 100644
index bad3987..0000000
--- a/src/Nocr.TelegramListener.AppServices/UpdateListeners/Handlers/IMessageHandler.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-using TL;
-
-namespace Nocr.TelegramListener.AppServices.UpdateListeners.Handlers;
-
-public interface IMessageHandler
-{
- Task HandleMessage(MessageBase messageBase, bool edit = false);
-}
\ No newline at end of file
diff --git a/src/Nocr.TelegramListener.AppServices/UpdateListeners/Handlers/INewMessageHandler.cs b/src/Nocr.TelegramListener.AppServices/UpdateListeners/Handlers/INewMessageHandler.cs
new file mode 100644
index 0000000..866ee09
--- /dev/null
+++ b/src/Nocr.TelegramListener.AppServices/UpdateListeners/Handlers/INewMessageHandler.cs
@@ -0,0 +1,8 @@
+using TL;
+
+namespace Nocr.TelegramListener.AppServices.UpdateListeners.Handlers;
+
+public interface INewMessageHandler
+{
+ Task Handle(MessageBase messageBase);
+}
\ No newline at end of file
diff --git a/src/Nocr.TelegramListener.AppServices/UpdateListeners/Handlers/Implementation/EditMessageHandler.cs b/src/Nocr.TelegramListener.AppServices/UpdateListeners/Handlers/Implementation/EditMessageHandler.cs
new file mode 100644
index 0000000..21c7e5c
--- /dev/null
+++ b/src/Nocr.TelegramListener.AppServices/UpdateListeners/Handlers/Implementation/EditMessageHandler.cs
@@ -0,0 +1,39 @@
+using Microsoft.Extensions.Logging;
+using TL;
+
+namespace Nocr.TelegramListener.AppServices.UpdateListeners.Handlers;
+
+public sealed class EditMessageHandler : IEditMessageHandler
+{
+ private readonly ILogger _logger;
+ private readonly TelegramRegistry _telegramRegistry;
+
+ public EditMessageHandler(ILogger logger,
+ TelegramRegistry telegramRegistry)
+ {
+ _logger = logger ?? throw new ArgumentNullException(nameof(logger));
+ _telegramRegistry = telegramRegistry ?? throw new ArgumentNullException(nameof(telegramRegistry));
+ }
+
+ public Task Handle(MessageBase messageBase)
+ {
+ _logger.LogDebug("Executing {Handler} for message {MessageId}", nameof(EditMessageHandler), messageBase.ID);
+ switch (messageBase)
+ {
+ case Message m:
+ _logger.LogInformation("{From} in {Chat} > {MessageText}",
+ m.from_id.Peer(_telegramRegistry.Users, _telegramRegistry.Chats) ?? m.post_author,
+ m.peer_id.Peer(_telegramRegistry.Users, _telegramRegistry.Chats),
+ m.message);
+ break;
+ case MessageService ms:
+ _logger.LogInformation("{From} in {Chat} > [{Action}]",
+ ms.from_id.Peer(_telegramRegistry.Users, _telegramRegistry.Chats),
+ ms.peer_id.Peer(_telegramRegistry.Users, _telegramRegistry.Chats),
+ ms.action.GetType().Name[13..]);
+ break;
+ }
+
+ return Task.CompletedTask;
+ }
+}
\ No newline at end of file
diff --git a/src/Nocr.TelegramListener.AppServices/UpdateListeners/Handlers/Implementation/NewMessageHandler.cs b/src/Nocr.TelegramListener.AppServices/UpdateListeners/Handlers/Implementation/NewMessageHandler.cs
new file mode 100644
index 0000000..735527d
--- /dev/null
+++ b/src/Nocr.TelegramListener.AppServices/UpdateListeners/Handlers/Implementation/NewMessageHandler.cs
@@ -0,0 +1,38 @@
+using Microsoft.Extensions.Logging;
+using TL;
+
+namespace Nocr.TelegramListener.AppServices.UpdateListeners.Handlers;
+
+public sealed class NewMessageHandler : INewMessageHandler
+{
+ private readonly ILogger _logger;
+ private readonly TelegramRegistry _telegramRegistry;
+
+ public NewMessageHandler(ILogger logger, TelegramRegistry telegramRegistry)
+ {
+ _logger = logger ?? throw new ArgumentNullException(nameof(logger));
+ _telegramRegistry = telegramRegistry ?? throw new ArgumentNullException(nameof(telegramRegistry));
+ }
+
+ public Task Handle(MessageBase messageBase)
+ {
+ _logger.LogDebug("Executing {Handler} for message {MessageId}", nameof(EditMessageHandler), messageBase.ID);
+ switch (messageBase)
+ {
+ case Message m:
+ _logger.LogInformation("{From} in {Chat} > {MessageText}",
+ m.from_id.Peer(_telegramRegistry.Users, _telegramRegistry.Chats) ?? m.post_author,
+ m.peer_id.Peer(_telegramRegistry.Users, _telegramRegistry.Chats),
+ m.message);
+ break;
+ case MessageService ms:
+ _logger.LogInformation("{From} in {Chat} > [{Action}]",
+ ms.from_id.Peer(_telegramRegistry.Users, _telegramRegistry.Chats),
+ ms.peer_id.Peer(_telegramRegistry.Users, _telegramRegistry.Chats),
+ ms.action.GetType().Name[13..]);
+ break;
+ }
+
+ return Task.CompletedTask;
+ }
+}
\ No newline at end of file
diff --git a/src/Nocr.TelegramListener.AppServices/UpdateListeners/Handlers/UpdateHandler.cs b/src/Nocr.TelegramListener.AppServices/UpdateListeners/Handlers/Implementation/UpdateHandler.cs
similarity index 86%
rename from src/Nocr.TelegramListener.AppServices/UpdateListeners/Handlers/UpdateHandler.cs
rename to src/Nocr.TelegramListener.AppServices/UpdateListeners/Handlers/Implementation/UpdateHandler.cs
index 159eea2..33c122e 100644
--- a/src/Nocr.TelegramListener.AppServices/UpdateListeners/Handlers/UpdateHandler.cs
+++ b/src/Nocr.TelegramListener.AppServices/UpdateListeners/Handlers/Implementation/UpdateHandler.cs
@@ -6,14 +6,17 @@ public sealed class UpdateHandler : IUpdateHandler
{
private readonly ITelegramClientContainer _clientContainer;
private readonly TelegramRegistry _telegramRegistry;
- private readonly IMessageHandler _messageHandler;
+ private readonly INewMessageHandler _newMessageHandler;
+ private readonly IEditMessageHandler _editMessageHandler;
public UpdateHandler(ITelegramClientContainer clientContainer, TelegramRegistry telegramRegistry,
- IMessageHandler messageHandler)
+ INewMessageHandler newMessageHandler,
+ IEditMessageHandler editMessageHandler)
{
_clientContainer = clientContainer ?? throw new ArgumentNullException(nameof(clientContainer));
_telegramRegistry = telegramRegistry ?? throw new ArgumentNullException(nameof(telegramRegistry));
- _messageHandler = messageHandler ?? throw new ArgumentNullException(nameof(messageHandler));
+ _newMessageHandler = newMessageHandler ?? throw new ArgumentNullException(nameof(newMessageHandler));
+ _editMessageHandler = editMessageHandler ?? throw new ArgumentNullException(nameof(editMessageHandler));
}
public async Task HandleUpdate(UpdatesBase updates, CancellationToken cancellationToken = default)
@@ -35,10 +38,10 @@ public sealed class UpdateHandler : IUpdateHandler
switch (update)
{
case UpdateNewMessage unm:
- await _messageHandler.HandleMessage(unm.message);
+ await _newMessageHandler.Handle(unm.message);
break;
case UpdateEditMessage uem:
- await _messageHandler.HandleMessage(uem.message, true);
+ await _editMessageHandler.Handle(uem.message);
break;
// Note: UpdateNewChannelMessage and UpdateEditChannelMessage are also handled by above cases
case UpdateDeleteChannelMessages udcm:
diff --git a/src/Nocr.TelegramListener.AppServices/UpdateListeners/Handlers/MessageHandler.cs b/src/Nocr.TelegramListener.AppServices/UpdateListeners/Handlers/MessageHandler.cs
deleted file mode 100644
index 7023b30..0000000
--- a/src/Nocr.TelegramListener.AppServices/UpdateListeners/Handlers/MessageHandler.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using TL;
-
-namespace Nocr.TelegramListener.AppServices.UpdateListeners.Handlers;
-
-public sealed class MessageHandler : IMessageHandler
-{
- private readonly TelegramRegistry _telegramRegistry;
-
- public MessageHandler(TelegramRegistry telegramRegistry)
- {
- _telegramRegistry = telegramRegistry ?? throw new ArgumentNullException(nameof(telegramRegistry));
- }
-
- public Task HandleMessage(MessageBase messageBase, bool edit = false)
- {
- if (edit) Console.Write("(Edit): ");
- switch (messageBase)
- {
- case Message m:
- Console.WriteLine(
- $"{m.from_id.Peer(_telegramRegistry.Users, _telegramRegistry.Chats) ?? m.post_author} in {m.peer_id.Peer(_telegramRegistry.Users, _telegramRegistry.Chats)}> {m.message}");
- break;
- case MessageService ms:
- Console.WriteLine(
- $"{ms.from_id.Peer(_telegramRegistry.Users, _telegramRegistry.Chats)} in {ms.peer_id.Peer(_telegramRegistry.Users, _telegramRegistry.Chats)} [{ms.action.GetType().Name[13..]}]");
- break;
- }
-
- return Task.CompletedTask;
- }
-}
\ No newline at end of file
diff --git a/src/Nocr.TelegramListener.AppServices/UpdateListeners/UpdateListenerBackgroundService.cs b/src/Nocr.TelegramListener.AppServices/UpdateListeners/UpdateListenerBackgroundService.cs
index e3031b0..4a3af3a 100644
--- a/src/Nocr.TelegramListener.AppServices/UpdateListeners/UpdateListenerBackgroundService.cs
+++ b/src/Nocr.TelegramListener.AppServices/UpdateListeners/UpdateListenerBackgroundService.cs
@@ -1,6 +1,7 @@
using System.Collections.Concurrent;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Nocr.TelegramListener.AppServices.UpdateListeners.Handlers;
using TL;
@@ -11,18 +12,23 @@ namespace Nocr.TelegramListener.AppServices.UpdateListeners;
public sealed class UpdateListenerBackgroundService : BackgroundService
{
+ private readonly ILogger _logger;
private readonly IServiceProvider _serviceProvider;
private readonly ITelegramClientContainer _telegramClientContainer;
private readonly TelegramRegistry _telegramRegistry;
private readonly WTelegramClientOptions _wTelegramClientOptions;
- public UpdateListenerBackgroundService(IServiceProvider serviceProvider,
+ public UpdateListenerBackgroundService(
+ ILogger logger,
+ IServiceProvider serviceProvider,
IOptions wTelegramClientOptions,
ITelegramClientContainer telegramClientContainer,
TelegramRegistry telegramRegistry)
{
+ _logger = logger ?? throw new ArgumentNullException(nameof(logger));
_serviceProvider = serviceProvider ?? throw new ArgumentNullException(nameof(serviceProvider));
- _telegramClientContainer = telegramClientContainer ?? throw new ArgumentNullException(nameof(telegramClientContainer));
+ _telegramClientContainer =
+ telegramClientContainer ?? throw new ArgumentNullException(nameof(telegramClientContainer));
_telegramRegistry = telegramRegistry ?? throw new ArgumentNullException(nameof(telegramRegistry));
_wTelegramClientOptions = wTelegramClientOptions.Value ??
throw new ArgumentNullException(nameof(wTelegramClientOptions));
@@ -31,9 +37,7 @@ public sealed class UpdateListenerBackgroundService : BackgroundService
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
- Console.WriteLine(
- "The program will display updates received for the logged-in user. Press any key to terminate");
- WTelegram.Helpers.Log = (l, s) => System.Diagnostics.Debug.WriteLine(s);
+ Helpers.Log = (l, s) => System.Diagnostics.Debug.WriteLine(s);
Client? client = null;
while (!stoppingToken.IsCancellationRequested)
{
@@ -42,17 +46,18 @@ public sealed class UpdateListenerBackgroundService : BackgroundService
_telegramRegistry.Clear();
_telegramClientContainer.Reset();
_telegramClientContainer.Initialize();
-
+
client = _telegramClientContainer.Client;
client.OnUpdate += HandleUpdates;
var my = await client.LoginUserIfNeeded();
_telegramRegistry.SetMy(my);
- // Note: on login, Telegram may sends a bunch of updates/messages that happened in the past and were not acknowledged
- Console.WriteLine(
- $"We are logged-in as {_telegramRegistry.My.username ?? _telegramRegistry.My.first_name + " " + _telegramRegistry.My.last_name} (id {_telegramRegistry.My.id})");
- // We collect all infos about the users/chats so that updates can be printed with their names
- var dialogs = await client.Messages_GetAllDialogs(); // dialogs = groups/channels/users
+ _logger.LogInformation("Telegram client is logged-in as {Username} (id {Id})",
+ _telegramRegistry.My.username ??
+ _telegramRegistry.My.first_name + " " + _telegramRegistry.My.last_name,
+ _telegramRegistry.My.id);
+
+ var dialogs = await client.Messages_GetAllDialogs();
dialogs.CollectUsersChats(_telegramRegistry.Users, _telegramRegistry.Chats);
}