Add logging
This commit is contained in:
parent
e9cf1bd814
commit
ffad0d2add
@ -0,0 +1,2 @@
|
||||
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
||||
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=updatelisteners_005Chandlers_005Cimplementation/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
|
||||
@ -17,7 +17,8 @@ public static class ServiceCollectionExtensions
|
||||
services.AddHostedService<UpdateListenerBackgroundService>();
|
||||
|
||||
services.AddScoped<IUpdateHandler, UpdateHandler>();
|
||||
services.AddScoped<IMessageHandler, MessageHandler>();
|
||||
services.AddScoped<INewMessageHandler, NewMessageHandler>();
|
||||
services.AddScoped<IEditMessageHandler, EditMessageHandler>();
|
||||
services.AddSingleton<ITelegramClientContainer, TelegramClientContainer>();
|
||||
services.AddSingleton<TelegramRegistry>();
|
||||
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
using TL;
|
||||
|
||||
namespace Nocr.TelegramListener.AppServices.UpdateListeners.Handlers;
|
||||
|
||||
public interface IEditMessageHandler
|
||||
{
|
||||
Task Handle(MessageBase messageBase);
|
||||
}
|
||||
@ -1,8 +0,0 @@
|
||||
using TL;
|
||||
|
||||
namespace Nocr.TelegramListener.AppServices.UpdateListeners.Handlers;
|
||||
|
||||
public interface IMessageHandler
|
||||
{
|
||||
Task HandleMessage(MessageBase messageBase, bool edit = false);
|
||||
}
|
||||
@ -0,0 +1,8 @@
|
||||
using TL;
|
||||
|
||||
namespace Nocr.TelegramListener.AppServices.UpdateListeners.Handlers;
|
||||
|
||||
public interface INewMessageHandler
|
||||
{
|
||||
Task Handle(MessageBase messageBase);
|
||||
}
|
||||
@ -0,0 +1,39 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
using TL;
|
||||
|
||||
namespace Nocr.TelegramListener.AppServices.UpdateListeners.Handlers;
|
||||
|
||||
public sealed class EditMessageHandler : IEditMessageHandler
|
||||
{
|
||||
private readonly ILogger<EditMessageHandler> _logger;
|
||||
private readonly TelegramRegistry _telegramRegistry;
|
||||
|
||||
public EditMessageHandler(ILogger<EditMessageHandler> 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;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,38 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
using TL;
|
||||
|
||||
namespace Nocr.TelegramListener.AppServices.UpdateListeners.Handlers;
|
||||
|
||||
public sealed class NewMessageHandler : INewMessageHandler
|
||||
{
|
||||
private readonly ILogger<NewMessageHandler> _logger;
|
||||
private readonly TelegramRegistry _telegramRegistry;
|
||||
|
||||
public NewMessageHandler(ILogger<NewMessageHandler> 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;
|
||||
}
|
||||
}
|
||||
@ -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:
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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<UpdateListenerBackgroundService> _logger;
|
||||
private readonly IServiceProvider _serviceProvider;
|
||||
private readonly ITelegramClientContainer _telegramClientContainer;
|
||||
private readonly TelegramRegistry _telegramRegistry;
|
||||
private readonly WTelegramClientOptions _wTelegramClientOptions;
|
||||
|
||||
public UpdateListenerBackgroundService(IServiceProvider serviceProvider,
|
||||
public UpdateListenerBackgroundService(
|
||||
ILogger<UpdateListenerBackgroundService> logger,
|
||||
IServiceProvider serviceProvider,
|
||||
IOptions<WTelegramClientOptions> 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);
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user