diff --git a/Directory.Packages.props b/Directory.Packages.props
index 583d489..8a90382 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -11,9 +11,9 @@
-
-
-
+
+
+
diff --git a/src/Nocr.TelegramClient.AppServices/Handlers/BaseHandlers/StartHandlerBase.cs b/src/Nocr.TelegramClient.AppServices/Handlers/BaseHandlers/StartHandlerBase.cs
index 5565123..4fff273 100644
--- a/src/Nocr.TelegramClient.AppServices/Handlers/BaseHandlers/StartHandlerBase.cs
+++ b/src/Nocr.TelegramClient.AppServices/Handlers/BaseHandlers/StartHandlerBase.cs
@@ -28,6 +28,12 @@ public abstract class StartHandlerBase
public async Task Handle(Update update, CancellationToken cancellationToken = default)
{
+ if (update.Message?.From is null || update.CallbackQuery?.Message is null)
+ {
+ _logger.LogError("Не удалось выделить пользовательский колбэк.\n{@Update}", update);
+ return;
+ }
+
long telegramId;
switch (update.Type)
{
diff --git a/src/Nocr.TelegramClient.AppServices/Handlers/CallbackQueries/ActivateSubscription/ActivateSubscriptionHandler.cs b/src/Nocr.TelegramClient.AppServices/Handlers/CallbackQueries/ActivateSubscription/ActivateSubscriptionHandler.cs
index 7c50975..24ebe31 100644
--- a/src/Nocr.TelegramClient.AppServices/Handlers/CallbackQueries/ActivateSubscription/ActivateSubscriptionHandler.cs
+++ b/src/Nocr.TelegramClient.AppServices/Handlers/CallbackQueries/ActivateSubscription/ActivateSubscriptionHandler.cs
@@ -14,6 +14,7 @@ namespace Nocr.TelegramClient.AppServices.Handlers.CallbackQueries.ActivateSubsc
public class ActivateSubscriptionHandler : ViewSubscriptionHandlerBase, IMatchingUpdateHandler
{
+ private readonly ILogger _logger;
public ActivateSubscriptionHandler(ILogger logger,
ILocalizer localizer,
IMessageDispatcherQueue messageQueue,
@@ -22,18 +23,25 @@ public class ActivateSubscriptionHandler : ViewSubscriptionHandlerBase, IMatchin
ITextSubscriptionsController subscriptionsController)
: base(logger, localizer, messageQueue, bot, usersService, subscriptionsController)
{
+ _logger = logger;
}
public async Task Handle(Update update, CancellationToken cancellationToken = default)
{
+ if (update.CallbackQuery is null)
+ {
+ _logger.LogError("Не удалось выделить пользовательский колбэк.\n{@Update}", update);
+ return;
+ }
+
var callbackData = NocrCallbackData.Parse(update.CallbackQuery.Data);
var from = update.CallbackQuery.From.Id;
if (callbackData.Args.Count != 1 || !long.TryParse(callbackData.Args.First(), out var subscriptionId))
{
- Logger.LogWarning(
- "Не удалось извлечь идентификатор подписки. CallbackData: {@CallbackData}, ChatId: {ChatId}, MessageId {MessageId}",
- callbackData, from, update.CallbackQuery.Message.Chat.Id);
+ _logger.LogWarning(
+ "Не удалось извлечь идентификатор подписки. CallbackData: {@CallbackData}, ChatId: {ChatId}, MessageId {MessageId}.",
+ callbackData, from, update.CallbackQuery?.Message?.Chat.Id);
SendErrorMessage(from);
return;
}
@@ -44,11 +52,17 @@ public class ActivateSubscriptionHandler : ViewSubscriptionHandlerBase, IMatchin
}
catch (Exception ex)
{
- Logger.LogError(ex, "Не удалось деактивировать подписку");
+ _logger.LogError(ex, "Не удалось деактивировать подписку.");
SendErrorMessage(from);
throw;
}
+ if (update.CallbackQuery.Message is null)
+ {
+ _logger.LogError("Не удалось выделить идентификатор сообщения из пользовательского колбэка.\n{@CallbackQuery}", update.CallbackQuery);
+ return;
+ }
+
await EditSubscriptionMessage(from, update.CallbackQuery.Message.MessageId, subscriptionId,
CancellationToken.None);
}
diff --git a/src/Nocr.TelegramClient.AppServices/Handlers/CallbackQueries/AddSubscription/AddSubscriptionHandler.cs b/src/Nocr.TelegramClient.AppServices/Handlers/CallbackQueries/AddSubscription/AddSubscriptionHandler.cs
index 15c2d91..1463247 100644
--- a/src/Nocr.TelegramClient.AppServices/Handlers/CallbackQueries/AddSubscription/AddSubscriptionHandler.cs
+++ b/src/Nocr.TelegramClient.AppServices/Handlers/CallbackQueries/AddSubscription/AddSubscriptionHandler.cs
@@ -27,6 +27,12 @@ public sealed class AddSubscriptionHandler : IMatchingUpdateHandler
{
-
+ private readonly ILogger _logger;
public DeactivateSubscriptionHandler(ILogger logger,
ILocalizer localizer,
IMessageDispatcherQueue messageQueue,
- IBot bot,
+ IBot bot,
IUsersService usersService,
- ITextSubscriptionsController subscriptionsController)
+ ITextSubscriptionsController subscriptionsController)
: base(logger, localizer, messageQueue, bot, usersService, subscriptionsController)
{
+ _logger = logger;
}
public async Task Handle(Update update, CancellationToken cancellationToken = default)
{
+ if (update.CallbackQuery?.Message is null)
+ {
+ _logger.LogError("Не удалось выделить пользовательский колбэк.\n{@Update}", update);
+ return;
+ }
+
var callbackData = NocrCallbackData.Parse(update.CallbackQuery.Data);
var from = update.CallbackQuery.From.Id;
if (callbackData.Args.Count != 1 || !long.TryParse(callbackData.Args.First(), out var subscriptionId))
{
- Logger.LogWarning(
+ _logger.LogWarning(
"Не удалось извлечь идентификатор подписки. CallbackData: {@CallbackData}, ChatId: {ChatId}, MessageId {MessageId}",
callbackData, from, update.CallbackQuery.Message.Chat.Id);
SendErrorMessage(from);
@@ -46,7 +53,7 @@ public class DeactivateSubscriptionHandler : ViewSubscriptionHandlerBase,
}
catch (Exception ex)
{
- Logger.LogError(ex, "Не удалось деактивировать подписку");
+ _logger.LogError(ex, "Не удалось деактивировать подписку");
SendErrorMessage(from);
throw;
}
diff --git a/src/Nocr.TelegramClient.AppServices/Handlers/CallbackQueries/DeleteSubscription/DeleteSubscriptionHandler.cs b/src/Nocr.TelegramClient.AppServices/Handlers/CallbackQueries/DeleteSubscription/DeleteSubscriptionHandler.cs
index 5ee82e2..a851fba 100644
--- a/src/Nocr.TelegramClient.AppServices/Handlers/CallbackQueries/DeleteSubscription/DeleteSubscriptionHandler.cs
+++ b/src/Nocr.TelegramClient.AppServices/Handlers/CallbackQueries/DeleteSubscription/DeleteSubscriptionHandler.cs
@@ -18,6 +18,7 @@ namespace Nocr.TelegramClient.AppServices.Handlers.CallbackQueries.DeleteSubscri
public class DeleteSubscriptionHandler : ViewSubscriptionHandlerBase,
IMatchingUpdateHandler
{
+ private readonly ILogger _logger;
public DeleteSubscriptionHandler(ILogger logger,
ILocalizer localizer,
IMessageDispatcherQueue messageQueue,
@@ -26,16 +27,23 @@ public class DeleteSubscriptionHandler : ViewSubscriptionHandlerBase,
ITextSubscriptionsController subscriptionsController)
: base(logger, localizer, messageQueue, bot, usersService, subscriptionsController)
{
+ _logger = logger;
}
public async Task Handle(Update update, CancellationToken cancellationToken = default)
{
+ if (update.CallbackQuery?.Message is null)
+ {
+ _logger.LogError("Не удалось выделить пользовательский колбэк.\n{@Update}", update);
+ return;
+ }
+
var callbackData = NocrCallbackData.Parse(update.CallbackQuery.Data);
var from = update.CallbackQuery.From.Id;
if (callbackData.Args.Count != 1 || !long.TryParse(callbackData.Args.First(), out var subscriptionId))
{
- Logger.LogWarning(
+ _logger.LogWarning(
"Не удалось извлечь идентификатор подписки. CallbackData: {@CallbackData}, ChatId: {ChatId}, MessageId {MessageId}",
callbackData, from, update.CallbackQuery.Message.Chat.Id);
SendErrorMessage(from);
@@ -48,7 +56,7 @@ public class DeleteSubscriptionHandler : ViewSubscriptionHandlerBase,
}
catch (Exception ex)
{
- Logger.LogError(ex, "Не удалось удалить подписку");
+ _logger.LogError(ex, "Не удалось удалить подписку.");
SendErrorMessage(from);
throw;
}
diff --git a/src/Nocr.TelegramClient.AppServices/Handlers/CallbackQueries/Feedback/FeedbackHandler.cs b/src/Nocr.TelegramClient.AppServices/Handlers/CallbackQueries/Feedback/FeedbackHandler.cs
index fe7a9ca..6fa93a7 100644
--- a/src/Nocr.TelegramClient.AppServices/Handlers/CallbackQueries/Feedback/FeedbackHandler.cs
+++ b/src/Nocr.TelegramClient.AppServices/Handlers/CallbackQueries/Feedback/FeedbackHandler.cs
@@ -24,6 +24,12 @@ public class FeedbackHandler : IMatchingUpdateHandler
public Task Handle(Update update, CancellationToken cancellationToken = default)
{
+ if (update.CallbackQuery?.Message is null)
+ {
+ _logger.LogError("Не удалось выделить идентификатор сообщения из пользовательского колбэка.\n{@CallbackQuery}", update.CallbackQuery);
+ return Task.CompletedTask;
+ }
+
// TODO: Check, that other messages sent to chat, no to one, who clicks
var message = new TextMessage(update.CallbackQuery.Message.Chat.Id)
{
diff --git a/src/Nocr.TelegramClient.AppServices/Handlers/CallbackQueries/ViewSubscription/ViewSubscriptionHandler.cs b/src/Nocr.TelegramClient.AppServices/Handlers/CallbackQueries/ViewSubscription/ViewSubscriptionHandler.cs
index 7ed5715..16a36b0 100644
--- a/src/Nocr.TelegramClient.AppServices/Handlers/CallbackQueries/ViewSubscription/ViewSubscriptionHandler.cs
+++ b/src/Nocr.TelegramClient.AppServices/Handlers/CallbackQueries/ViewSubscription/ViewSubscriptionHandler.cs
@@ -13,6 +13,7 @@ namespace Nocr.TelegramClient.AppServices.Handlers.CallbackQueries.ViewSubscript
public class ViewSubscriptionHandler : ViewSubscriptionHandlerBase, IMatchingUpdateHandler
{
+ private readonly ILogger _logger;
public ViewSubscriptionHandler(ILogger logger,
ILocalizer localizer,
IMessageDispatcherQueue messageQueue,
@@ -21,10 +22,17 @@ public class ViewSubscriptionHandler : ViewSubscriptionHandlerBase, IMatchingUpd
ITextSubscriptionsController subscriptionsController) :
base(logger, localizer, messageQueue, bot, usersService, subscriptionsController)
{
+ _logger = logger;
}
public async Task Handle(Update update, CancellationToken cancellationToken = default)
{
+ if (update.CallbackQuery?.Message is null)
+ {
+ _logger.LogError("Не удалось выделить пользовательский колбэк.\n{@Update}", update);
+ return;
+ }
+
var callbackData = NocrCallbackData.Parse(update.CallbackQuery.Data);
var from = update.CallbackQuery.From.Id;
diff --git a/src/Nocr.TelegramClient.AppServices/Handlers/Messages/FeedbackMessage/FeedbackMessageHandler.cs b/src/Nocr.TelegramClient.AppServices/Handlers/Messages/FeedbackMessage/FeedbackMessageHandler.cs
index 673834f..593cc1b 100644
--- a/src/Nocr.TelegramClient.AppServices/Handlers/Messages/FeedbackMessage/FeedbackMessageHandler.cs
+++ b/src/Nocr.TelegramClient.AppServices/Handlers/Messages/FeedbackMessage/FeedbackMessageHandler.cs
@@ -32,12 +32,18 @@ public sealed class FeedbackMessageHandler : IMatchingUpdateHandler _logger;
+ protected SubscribeHandlerBase(ILogger logger, ILocalizer localizer, IMessageDispatcherQueue messageQueue, IBot bot,
IUsersService usersService, ITextSubscriptionsController subscriptionsController)
: base(logger, localizer, messageQueue, bot, usersService, subscriptionsController)
{
+ _logger = logger;
}
protected async Task Handle(Update update, Regex regex, TextSubscriptionRule rule, CancellationToken cancellationToken = default)
{
+ if (update.Message?.Text is null || update.Message?.From is null)
+ {
+ _logger.LogError("Не удалось выделить пользовательское сообщение.\n{@Update}", update);
+ return;
+ }
+
var receiverId = update.Message.Chat.Id;
var match = regex.Match(update.Message.Text);
diff --git a/src/Nocr.TelegramClient.AppServices/Users/UsersService.cs b/src/Nocr.TelegramClient.AppServices/Users/UsersService.cs
index 2480f6c..aa7c942 100644
--- a/src/Nocr.TelegramClient.AppServices/Users/UsersService.cs
+++ b/src/Nocr.TelegramClient.AppServices/Users/UsersService.cs
@@ -18,6 +18,7 @@ public sealed class UsersService : IUsersService
{
var user = await _usersController.GetByIdentity(UserIdentityType.TelegramId, telegramId.ToString(),
cancellationToken);
+
if (user == null)
{
await _usersController.Create(new CreateUserRequest
@@ -31,7 +32,7 @@ public sealed class UsersService : IUsersService
cancellationToken);
}
- return user;
+ return user ?? throw new InvalidOperationException($"Failed to create or retrieve user with telegramId {telegramId}");
}
public Task GetByIdentity(long telegramId, CancellationToken cancellationToken = default)
diff --git a/src/Nocr.TelegramClient.Core/Options/RebusRabbitMqOptions.cs b/src/Nocr.TelegramClient.Core/Options/RebusRabbitMqOptions.cs
index f303d40..3778b00 100644
--- a/src/Nocr.TelegramClient.Core/Options/RebusRabbitMqOptions.cs
+++ b/src/Nocr.TelegramClient.Core/Options/RebusRabbitMqOptions.cs
@@ -2,11 +2,11 @@ namespace Nocr.TelegramClient.Core.Options;
public sealed class RebusRabbitMqOptions
{
- public string ConnectionString { get; set; }
+ public required string ConnectionString { get; set; }
- public string InputQueueName { get; set; }
+ public required string InputQueueName { get; set; }
- public string DirectExchangeName { get; set; }
+ public required string DirectExchangeName { get; set; }
- public string TopicsExchangeName { get; set; }
+ public required string TopicsExchangeName { get; set; }
}
\ No newline at end of file
diff --git a/src/Nocr.TelegramClient.Core/Options/RestEaseOptions.cs b/src/Nocr.TelegramClient.Core/Options/RestEaseOptions.cs
index 9b8676e..290da06 100644
--- a/src/Nocr.TelegramClient.Core/Options/RestEaseOptions.cs
+++ b/src/Nocr.TelegramClient.Core/Options/RestEaseOptions.cs
@@ -2,5 +2,5 @@ namespace Nocr.TelegramClient.Core.Options;
public class RestEaseOptions
{
- public string BasePath { get; set; }
+ public required string BasePath { get; set; }
}
\ No newline at end of file