Fixed all warnings.

This commit is contained in:
Ruberoid 2025-07-18 19:45:54 +03:00
parent ea27d8d448
commit dd7bfb1f87
13 changed files with 94 additions and 24 deletions

View File

@ -11,9 +11,9 @@
<PackageVersion Include="Insight.Localizer" Version="1.1.0" /> <PackageVersion Include="Insight.Localizer" Version="1.1.0" />
</ItemGroup> </ItemGroup>
<ItemGroup Label="Nocr"> <ItemGroup Label="Nocr">
<PackageVersion Include="Nocr.TextMatcher.Api.Contracts" /> <PackageVersion Include="Nocr.TextMatcher.Api.Contracts" Version="0.6.2" />
<PackageVersion Include="Nocr.TextMatcher.Async.Api.Contracts" /> <PackageVersion Include="Nocr.TextMatcher.Async.Api.Contracts" Version="0.6.2" />
<PackageVersion Include="Nocr.Users.Api.Contracts" /> <PackageVersion Include="Nocr.Users.Api.Contracts" Version="0.6.2" />
</ItemGroup> </ItemGroup>
<ItemGroup Label="Rebus"> <ItemGroup Label="Rebus">
<PackageVersion Include="Rebus" Version="8.2.2" /> <PackageVersion Include="Rebus" Version="8.2.2" />

View File

@ -28,6 +28,12 @@ public abstract class StartHandlerBase
public async Task Handle(Update update, CancellationToken cancellationToken = default) 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; long telegramId;
switch (update.Type) switch (update.Type)
{ {

View File

@ -14,6 +14,7 @@ namespace Nocr.TelegramClient.AppServices.Handlers.CallbackQueries.ActivateSubsc
public class ActivateSubscriptionHandler : ViewSubscriptionHandlerBase, IMatchingUpdateHandler<ActivateSubscriptionMatcher> public class ActivateSubscriptionHandler : ViewSubscriptionHandlerBase, IMatchingUpdateHandler<ActivateSubscriptionMatcher>
{ {
private readonly ILogger<ActivateSubscriptionHandler> _logger;
public ActivateSubscriptionHandler(ILogger<ActivateSubscriptionHandler> logger, public ActivateSubscriptionHandler(ILogger<ActivateSubscriptionHandler> logger,
ILocalizer localizer, ILocalizer localizer,
IMessageDispatcherQueue messageQueue, IMessageDispatcherQueue messageQueue,
@ -22,18 +23,25 @@ public class ActivateSubscriptionHandler : ViewSubscriptionHandlerBase, IMatchin
ITextSubscriptionsController subscriptionsController) ITextSubscriptionsController subscriptionsController)
: base(logger, localizer, messageQueue, bot, usersService, subscriptionsController) : base(logger, localizer, messageQueue, bot, usersService, subscriptionsController)
{ {
_logger = logger;
} }
public async Task Handle(Update update, CancellationToken cancellationToken = default) 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 callbackData = NocrCallbackData.Parse(update.CallbackQuery.Data);
var from = update.CallbackQuery.From.Id; var from = update.CallbackQuery.From.Id;
if (callbackData.Args.Count != 1 || !long.TryParse(callbackData.Args.First(), out var subscriptionId)) if (callbackData.Args.Count != 1 || !long.TryParse(callbackData.Args.First(), out var subscriptionId))
{ {
Logger.LogWarning( _logger.LogWarning(
"Не удалось извлечь идентификатор подписки. CallbackData: {@CallbackData}, ChatId: {ChatId}, MessageId {MessageId}", "Не удалось извлечь идентификатор подписки. CallbackData: {@CallbackData}, ChatId: {ChatId}, MessageId {MessageId}.",
callbackData, from, update.CallbackQuery.Message.Chat.Id); callbackData, from, update.CallbackQuery?.Message?.Chat.Id);
SendErrorMessage(from); SendErrorMessage(from);
return; return;
} }
@ -44,11 +52,17 @@ public class ActivateSubscriptionHandler : ViewSubscriptionHandlerBase, IMatchin
} }
catch (Exception ex) catch (Exception ex)
{ {
Logger.LogError(ex, "Не удалось деактивировать подписку"); _logger.LogError(ex, "Не удалось деактивировать подписку.");
SendErrorMessage(from); SendErrorMessage(from);
throw; throw;
} }
if (update.CallbackQuery.Message is null)
{
_logger.LogError("Не удалось выделить идентификатор сообщения из пользовательского колбэка.\n{@CallbackQuery}", update.CallbackQuery);
return;
}
await EditSubscriptionMessage(from, update.CallbackQuery.Message.MessageId, subscriptionId, await EditSubscriptionMessage(from, update.CallbackQuery.Message.MessageId, subscriptionId,
CancellationToken.None); CancellationToken.None);
} }

View File

@ -27,6 +27,12 @@ public sealed class AddSubscriptionHandler : IMatchingUpdateHandler<AddSubscript
public async Task Handle(Update update, CancellationToken cancellationToken = default) public async Task Handle(Update update, CancellationToken cancellationToken = default)
{ {
if (update.CallbackQuery?.Message is null)
{
_logger.LogError("Не удалось выделить пользовательский колбэк.\n{@Update}", update);
return;
}
var chatId = update.CallbackQuery.Message.Chat.Id; var chatId = update.CallbackQuery.Message.Chat.Id;
var messageId = update.CallbackQuery.Message.MessageId; var messageId = update.CallbackQuery.Message.MessageId;

View File

@ -15,7 +15,7 @@ namespace Nocr.TelegramClient.AppServices.Handlers.CallbackQueries.DeactivateSub
public class DeactivateSubscriptionHandler : ViewSubscriptionHandlerBase, public class DeactivateSubscriptionHandler : ViewSubscriptionHandlerBase,
IMatchingUpdateHandler<DeactivateSubscriptionMatcher> IMatchingUpdateHandler<DeactivateSubscriptionMatcher>
{ {
private readonly ILogger<DeactivateSubscriptionHandler> _logger;
public DeactivateSubscriptionHandler(ILogger<DeactivateSubscriptionHandler> logger, public DeactivateSubscriptionHandler(ILogger<DeactivateSubscriptionHandler> logger,
ILocalizer localizer, ILocalizer localizer,
IMessageDispatcherQueue messageQueue, IMessageDispatcherQueue messageQueue,
@ -24,16 +24,23 @@ public class DeactivateSubscriptionHandler : ViewSubscriptionHandlerBase,
ITextSubscriptionsController subscriptionsController) ITextSubscriptionsController subscriptionsController)
: base(logger, localizer, messageQueue, bot, usersService, subscriptionsController) : base(logger, localizer, messageQueue, bot, usersService, subscriptionsController)
{ {
_logger = logger;
} }
public async Task Handle(Update update, CancellationToken cancellationToken = default) 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 callbackData = NocrCallbackData.Parse(update.CallbackQuery.Data);
var from = update.CallbackQuery.From.Id; var from = update.CallbackQuery.From.Id;
if (callbackData.Args.Count != 1 || !long.TryParse(callbackData.Args.First(), out var subscriptionId)) if (callbackData.Args.Count != 1 || !long.TryParse(callbackData.Args.First(), out var subscriptionId))
{ {
Logger.LogWarning( _logger.LogWarning(
"Не удалось извлечь идентификатор подписки. CallbackData: {@CallbackData}, ChatId: {ChatId}, MessageId {MessageId}", "Не удалось извлечь идентификатор подписки. CallbackData: {@CallbackData}, ChatId: {ChatId}, MessageId {MessageId}",
callbackData, from, update.CallbackQuery.Message.Chat.Id); callbackData, from, update.CallbackQuery.Message.Chat.Id);
SendErrorMessage(from); SendErrorMessage(from);
@ -46,7 +53,7 @@ public class DeactivateSubscriptionHandler : ViewSubscriptionHandlerBase,
} }
catch (Exception ex) catch (Exception ex)
{ {
Logger.LogError(ex, "Не удалось деактивировать подписку"); _logger.LogError(ex, "Не удалось деактивировать подписку");
SendErrorMessage(from); SendErrorMessage(from);
throw; throw;
} }

View File

@ -18,6 +18,7 @@ namespace Nocr.TelegramClient.AppServices.Handlers.CallbackQueries.DeleteSubscri
public class DeleteSubscriptionHandler : ViewSubscriptionHandlerBase, public class DeleteSubscriptionHandler : ViewSubscriptionHandlerBase,
IMatchingUpdateHandler<DeleteSubscriptionMatcher> IMatchingUpdateHandler<DeleteSubscriptionMatcher>
{ {
private readonly ILogger<DeleteSubscriptionHandler> _logger;
public DeleteSubscriptionHandler(ILogger<DeleteSubscriptionHandler> logger, public DeleteSubscriptionHandler(ILogger<DeleteSubscriptionHandler> logger,
ILocalizer localizer, ILocalizer localizer,
IMessageDispatcherQueue messageQueue, IMessageDispatcherQueue messageQueue,
@ -26,16 +27,23 @@ public class DeleteSubscriptionHandler : ViewSubscriptionHandlerBase,
ITextSubscriptionsController subscriptionsController) ITextSubscriptionsController subscriptionsController)
: base(logger, localizer, messageQueue, bot, usersService, subscriptionsController) : base(logger, localizer, messageQueue, bot, usersService, subscriptionsController)
{ {
_logger = logger;
} }
public async Task Handle(Update update, CancellationToken cancellationToken = default) 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 callbackData = NocrCallbackData.Parse(update.CallbackQuery.Data);
var from = update.CallbackQuery.From.Id; var from = update.CallbackQuery.From.Id;
if (callbackData.Args.Count != 1 || !long.TryParse(callbackData.Args.First(), out var subscriptionId)) if (callbackData.Args.Count != 1 || !long.TryParse(callbackData.Args.First(), out var subscriptionId))
{ {
Logger.LogWarning( _logger.LogWarning(
"Не удалось извлечь идентификатор подписки. CallbackData: {@CallbackData}, ChatId: {ChatId}, MessageId {MessageId}", "Не удалось извлечь идентификатор подписки. CallbackData: {@CallbackData}, ChatId: {ChatId}, MessageId {MessageId}",
callbackData, from, update.CallbackQuery.Message.Chat.Id); callbackData, from, update.CallbackQuery.Message.Chat.Id);
SendErrorMessage(from); SendErrorMessage(from);
@ -48,7 +56,7 @@ public class DeleteSubscriptionHandler : ViewSubscriptionHandlerBase,
} }
catch (Exception ex) catch (Exception ex)
{ {
Logger.LogError(ex, "Не удалось удалить подписку"); _logger.LogError(ex, "Не удалось удалить подписку.");
SendErrorMessage(from); SendErrorMessage(from);
throw; throw;
} }

View File

@ -24,6 +24,12 @@ public class FeedbackHandler : IMatchingUpdateHandler<FeedbackMatcher>
public Task Handle(Update update, CancellationToken cancellationToken = default) 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 // TODO: Check, that other messages sent to chat, no to one, who clicks
var message = new TextMessage(update.CallbackQuery.Message.Chat.Id) var message = new TextMessage(update.CallbackQuery.Message.Chat.Id)
{ {

View File

@ -13,6 +13,7 @@ namespace Nocr.TelegramClient.AppServices.Handlers.CallbackQueries.ViewSubscript
public class ViewSubscriptionHandler : ViewSubscriptionHandlerBase, IMatchingUpdateHandler<ViewSubscriptionMatcher> public class ViewSubscriptionHandler : ViewSubscriptionHandlerBase, IMatchingUpdateHandler<ViewSubscriptionMatcher>
{ {
private readonly ILogger<ViewSubscriptionHandler> _logger;
public ViewSubscriptionHandler(ILogger<ViewSubscriptionHandler> logger, public ViewSubscriptionHandler(ILogger<ViewSubscriptionHandler> logger,
ILocalizer localizer, ILocalizer localizer,
IMessageDispatcherQueue messageQueue, IMessageDispatcherQueue messageQueue,
@ -21,10 +22,17 @@ public class ViewSubscriptionHandler : ViewSubscriptionHandlerBase, IMatchingUpd
ITextSubscriptionsController subscriptionsController) : ITextSubscriptionsController subscriptionsController) :
base(logger, localizer, messageQueue, bot, usersService, subscriptionsController) base(logger, localizer, messageQueue, bot, usersService, subscriptionsController)
{ {
_logger = logger;
} }
public async Task Handle(Update update, CancellationToken cancellationToken = default) 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 callbackData = NocrCallbackData.Parse(update.CallbackQuery.Data);
var from = update.CallbackQuery.From.Id; var from = update.CallbackQuery.From.Id;

View File

@ -32,12 +32,18 @@ public sealed class FeedbackMessageHandler : IMatchingUpdateHandler<FeedbackMess
public Task Handle(Update update, CancellationToken cancellationToken = default) public Task Handle(Update update, CancellationToken cancellationToken = default)
{ {
if (update.Message?.Text is null)
{
_logger.LogError("Не удалось выделить пользовательское сообщение.\n{@Update}", update);
return Task.CompletedTask;
}
var from = update.Message.From; var from = update.Message.From;
var feedbackText = update.Message.Text var feedbackText = update.Message.Text
.Replace("/feedback", string.Empty) .Replace("/feedback", string.Empty)
.Trim(' '); .Trim(' ');
var message = new TextMessage(from.Id) var message = new TextMessage(from?.Id)
{ {
Text = _localizer.Get(nameof(FeedbackMessageHandler), "Text"), Text = _localizer.Get(nameof(FeedbackMessageHandler), "Text"),
ReplyMarkup = new InlineKeyboardMarkup(new InlineKeyboardButton(_localizer.Get("buttons", "back")) ReplyMarkup = new InlineKeyboardMarkup(new InlineKeyboardButton(_localizer.Get("buttons", "back"))
@ -55,8 +61,8 @@ public sealed class FeedbackMessageHandler : IMatchingUpdateHandler<FeedbackMess
Text = _localizer.Get(nameof(FeedbackMessageHandler), "FeedbackText") Text = _localizer.Get(nameof(FeedbackMessageHandler), "FeedbackText")
.FormatWith(new .FormatWith(new
{ {
FromId = from.Id, FromId = from?.Id,
FromUsername = string.IsNullOrWhiteSpace(from.Username) ? "anonymous" : $"@{from.Username}", FromUsername = string.IsNullOrWhiteSpace(from?.Username) ? "anonymous" : $"@{from.Username}",
Text = feedbackText Text = feedbackText
}) })
}; };

View File

@ -16,14 +16,22 @@ namespace Nocr.TelegramClient.AppServices.Handlers.Messages.SubscribeExactMessag
public abstract class SubscribeHandlerBase : ViewSubscriptionHandlerBase public abstract class SubscribeHandlerBase : ViewSubscriptionHandlerBase
{ {
protected SubscribeHandlerBase(ILogger logger, ILocalizer localizer, IMessageDispatcherQueue messageQueue, IBot bot, private readonly ILogger<SubscribeHandlerBase> _logger;
protected SubscribeHandlerBase(ILogger<SubscribeHandlerBase> logger, ILocalizer localizer, IMessageDispatcherQueue messageQueue, IBot bot,
IUsersService usersService, ITextSubscriptionsController subscriptionsController) IUsersService usersService, ITextSubscriptionsController subscriptionsController)
: base(logger, localizer, messageQueue, bot, usersService, subscriptionsController) : base(logger, localizer, messageQueue, bot, usersService, subscriptionsController)
{ {
_logger = logger;
} }
protected async Task Handle(Update update, Regex regex, TextSubscriptionRule rule, CancellationToken cancellationToken = default) 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 receiverId = update.Message.Chat.Id;
var match = regex.Match(update.Message.Text); var match = regex.Match(update.Message.Text);

View File

@ -18,6 +18,7 @@ public sealed class UsersService : IUsersService
{ {
var user = await _usersController.GetByIdentity(UserIdentityType.TelegramId, telegramId.ToString(), var user = await _usersController.GetByIdentity(UserIdentityType.TelegramId, telegramId.ToString(),
cancellationToken); cancellationToken);
if (user == null) if (user == null)
{ {
await _usersController.Create(new CreateUserRequest await _usersController.Create(new CreateUserRequest
@ -31,7 +32,7 @@ public sealed class UsersService : IUsersService
cancellationToken); cancellationToken);
} }
return user; return user ?? throw new InvalidOperationException($"Failed to create or retrieve user with telegramId {telegramId}");
} }
public Task<UserData?> GetByIdentity(long telegramId, CancellationToken cancellationToken = default) public Task<UserData?> GetByIdentity(long telegramId, CancellationToken cancellationToken = default)

View File

@ -2,11 +2,11 @@ namespace Nocr.TelegramClient.Core.Options;
public sealed class RebusRabbitMqOptions 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; }
} }

View File

@ -2,5 +2,5 @@ namespace Nocr.TelegramClient.Core.Options;
public class RestEaseOptions public class RestEaseOptions
{ {
public string BasePath { get; set; } public required string BasePath { get; set; }
} }