Update dependencies
This commit is contained in:
parent
c8da9e618b
commit
b96224b6e0
@ -7,8 +7,8 @@
|
|||||||
<InsightTelegramBotVersion>0.16.0</InsightTelegramBotVersion>
|
<InsightTelegramBotVersion>0.16.0</InsightTelegramBotVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup Label="Nocr">
|
<ItemGroup Label="Nocr">
|
||||||
<PackageVersion Include="Nocr.TextMatcher.Api.Contracts" Version="0.4.23" />
|
<PackageVersion Include="Nocr.TextMatcher.Api.Contracts" Version="0.4.25" />
|
||||||
<PackageVersion Include="Nocr.TextMatcher.Async.Api.Contracts" Version="0.4.23" />
|
<PackageVersion Include="Nocr.TextMatcher.Async.Api.Contracts" Version="0.4.25" />
|
||||||
<PackageVersion Include="Nocr.Users.Api.Contracts" Version="0.4.23" />
|
<PackageVersion Include="Nocr.Users.Api.Contracts" Version="0.4.23" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup Label="Rebus">
|
<ItemGroup Label="Rebus">
|
||||||
|
|||||||
@ -6,6 +6,8 @@ using Nocr.TelegramClient.AppServices.Bots.MessageDispatcher;
|
|||||||
using Nocr.TelegramClient.AppServices.Users;
|
using Nocr.TelegramClient.AppServices.Users;
|
||||||
using Nocr.TextMatcher.Api.Contracts.TextMatches;
|
using Nocr.TextMatcher.Api.Contracts.TextMatches;
|
||||||
using Nocr.TextMatcher.Api.Contracts.TextMatches.Requests;
|
using Nocr.TextMatcher.Api.Contracts.TextMatches.Requests;
|
||||||
|
using Nocr.TextMatcher.Contracts;
|
||||||
|
using Nocr.Users.Api.Contracts.Users.Dto;
|
||||||
using Telegram.Bot.Types;
|
using Telegram.Bot.Types;
|
||||||
|
|
||||||
namespace Nocr.TelegramClient.AppServices.Handlers.Messages.SubscribeMessage;
|
namespace Nocr.TelegramClient.AppServices.Handlers.Messages.SubscribeMessage;
|
||||||
@ -14,7 +16,7 @@ public class SubscribeMessageHandler : IMatchingUpdateHandler<SubscribeMessageMa
|
|||||||
{
|
{
|
||||||
private readonly IMessageDispatcherQueue _messageQueue;
|
private readonly IMessageDispatcherQueue _messageQueue;
|
||||||
private readonly IUsersService _usersService;
|
private readonly IUsersService _usersService;
|
||||||
private readonly ITextMatchesController _textMatchesController;
|
private readonly ITextSubscriptionsController _textSubscriptionsController;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Regex to match command "/subscribe @username match_type keywords". <br/>
|
/// Regex to match command "/subscribe @username match_type keywords". <br/>
|
||||||
@ -25,12 +27,12 @@ public class SubscribeMessageHandler : IMatchingUpdateHandler<SubscribeMessageMa
|
|||||||
RegexOptions.Compiled);
|
RegexOptions.Compiled);
|
||||||
|
|
||||||
public SubscribeMessageHandler(IMessageDispatcherQueue messageQueue, IUsersService usersService,
|
public SubscribeMessageHandler(IMessageDispatcherQueue messageQueue, IUsersService usersService,
|
||||||
ITextMatchesController textMatchesController)
|
ITextSubscriptionsController textSubscriptionsController)
|
||||||
{
|
{
|
||||||
_messageQueue = messageQueue ?? throw new ArgumentNullException(nameof(messageQueue));
|
_messageQueue = messageQueue ?? throw new ArgumentNullException(nameof(messageQueue));
|
||||||
_usersService = usersService ?? throw new ArgumentNullException(nameof(usersService));
|
_usersService = usersService ?? throw new ArgumentNullException(nameof(usersService));
|
||||||
_textMatchesController =
|
_textSubscriptionsController =
|
||||||
textMatchesController ?? throw new ArgumentNullException(nameof(textMatchesController));
|
textSubscriptionsController ?? throw new ArgumentNullException(nameof(textSubscriptionsController));
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task Handle(Update update, CancellationToken cancellationToken = default)
|
public async Task Handle(Update update, CancellationToken cancellationToken = default)
|
||||||
@ -48,21 +50,29 @@ public class SubscribeMessageHandler : IMatchingUpdateHandler<SubscribeMessageMa
|
|||||||
}
|
}
|
||||||
|
|
||||||
var username = match.Groups[1].Value.TrimStart('@');
|
var username = match.Groups[1].Value.TrimStart('@');
|
||||||
var rule = match.Groups[2].Value;
|
if (!Enum.TryParse<TextSubscriptionRule>(match.Groups[2].Value, true, out var rule))
|
||||||
|
{
|
||||||
|
_messageQueue.Enqueue(new TextMessage(telegramId)
|
||||||
|
{
|
||||||
|
Text = "Не удалось извлечь тип подписки"
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var template = match.Groups[3].Value;
|
var template = match.Groups[3].Value;
|
||||||
|
|
||||||
var user = await _usersService.GetOrCreate(telegramId, update.Message.From.Username, cancellationToken);
|
var user = await _usersService.GetOrCreate(telegramId, update.Message.From.Username, cancellationToken);
|
||||||
var matchId = await _textMatchesController.Create(new CreateTextMatchRequest
|
var subscriptionId = await _textSubscriptionsController.Create(new CreateTextSubscriptionRequest
|
||||||
{
|
{
|
||||||
UserId = user.Id,
|
UserId = user.Id,
|
||||||
ChatUsername = username,
|
ChatUsername = username,
|
||||||
Rule = (TextMatchRule)Convert.ToInt32(rule),
|
Rule = rule,
|
||||||
Template = template,
|
Template = template,
|
||||||
}, cancellationToken);
|
}, cancellationToken);
|
||||||
|
|
||||||
_messageQueue.Enqueue(new TextMessage(telegramId)
|
_messageQueue.Enqueue(new TextMessage(telegramId)
|
||||||
{
|
{
|
||||||
Text = $"Подписка создана: {matchId}"
|
Text = $"Подписка создана: {subscriptionId}"
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -5,6 +5,7 @@ using Nocr.TelegramClient.AppServices.Bots.MessageDispatcher;
|
|||||||
using Nocr.TelegramClient.AppServices.Matches;
|
using Nocr.TelegramClient.AppServices.Matches;
|
||||||
using Nocr.TelegramClient.AppServices.Users;
|
using Nocr.TelegramClient.AppServices.Users;
|
||||||
using Nocr.TextMatcher.Api.Contracts.TextMatches;
|
using Nocr.TextMatcher.Api.Contracts.TextMatches;
|
||||||
|
using Nocr.Users.Api.Contracts.Users.Dto;
|
||||||
using Telegram.Bot.Types;
|
using Telegram.Bot.Types;
|
||||||
using Telegram.Bot.Types.Enums;
|
using Telegram.Bot.Types.Enums;
|
||||||
|
|
||||||
@ -14,14 +15,14 @@ public class SubscriptionsMessageHandler : IMatchingUpdateHandler<SubscriptionsM
|
|||||||
{
|
{
|
||||||
private readonly IMessageDispatcherQueue _messageQueue;
|
private readonly IMessageDispatcherQueue _messageQueue;
|
||||||
private readonly IUsersService _usersService;
|
private readonly IUsersService _usersService;
|
||||||
private readonly ITextMatchesController _matchesController;
|
private readonly ITextSubscriptionsController _textSubscriptionsController;
|
||||||
|
|
||||||
public SubscriptionsMessageHandler(IMessageDispatcherQueue messageQueue, IUsersService usersService,
|
public SubscriptionsMessageHandler(IMessageDispatcherQueue messageQueue, IUsersService usersService,
|
||||||
ITextMatchesController matchesController)
|
ITextSubscriptionsController textSubscriptionsController)
|
||||||
{
|
{
|
||||||
_messageQueue = messageQueue ?? throw new ArgumentNullException(nameof(messageQueue));
|
_messageQueue = messageQueue ?? throw new ArgumentNullException(nameof(messageQueue));
|
||||||
_usersService = usersService ?? throw new ArgumentNullException(nameof(usersService));
|
_usersService = usersService ?? throw new ArgumentNullException(nameof(usersService));
|
||||||
_matchesController = matchesController ?? throw new ArgumentNullException(nameof(matchesController));
|
_textSubscriptionsController = textSubscriptionsController ?? throw new ArgumentNullException(nameof(textSubscriptionsController));
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task Handle(Update update, CancellationToken cancellationToken = default)
|
public async Task Handle(Update update, CancellationToken cancellationToken = default)
|
||||||
@ -29,7 +30,7 @@ public class SubscriptionsMessageHandler : IMatchingUpdateHandler<SubscriptionsM
|
|||||||
var telegramId = update.Message.From.Id;
|
var telegramId = update.Message.From.Id;
|
||||||
var user = await _usersService.GetOrCreate(telegramId, update.Message.From.Username, cancellationToken);
|
var user = await _usersService.GetOrCreate(telegramId, update.Message.From.Username, cancellationToken);
|
||||||
|
|
||||||
var subscriptions = await _matchesController.GetByUserId(user.Id, cancellationToken);
|
var subscriptions = await _textSubscriptionsController.GetByUserId(user.Id, cancellationToken);
|
||||||
|
|
||||||
foreach (var subscription in subscriptions)
|
foreach (var subscription in subscriptions)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -10,7 +10,7 @@ using Telegram.Bot.Types.Enums;
|
|||||||
|
|
||||||
namespace Nocr.TelegramClient.AppServices.Matches.Handlers;
|
namespace Nocr.TelegramClient.AppServices.Matches.Handlers;
|
||||||
|
|
||||||
public class TextMatchMatchedHandler : IHandleMessages<TextMatchMatched>
|
public class TextMatchMatchedHandler : IHandleMessages<TextSubscriptionMatched>
|
||||||
{
|
{
|
||||||
private readonly ILogger<TextMatchMatchedHandler> _logger;
|
private readonly ILogger<TextMatchMatchedHandler> _logger;
|
||||||
private readonly IBot _bot;
|
private readonly IBot _bot;
|
||||||
@ -23,13 +23,13 @@ public class TextMatchMatchedHandler : IHandleMessages<TextMatchMatched>
|
|||||||
_usersService = usersService ?? throw new ArgumentNullException(nameof(usersService));
|
_usersService = usersService ?? throw new ArgumentNullException(nameof(usersService));
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task Handle(TextMatchMatched message)
|
public async Task Handle(TextSubscriptionMatched message)
|
||||||
{
|
{
|
||||||
var user = await _usersService.GetById(message.MatchUserId);
|
var user = await _usersService.GetById(message.SubscriptionUserId);
|
||||||
if (user == null)
|
if (user == null)
|
||||||
{
|
{
|
||||||
_logger.LogWarning("User [{UserId}] of [{MatchId}] from message {MessageId} not found", message.MatchUserId,
|
_logger.LogWarning("User [{UserId}] of [{MatchId}] from message {MessageId} not found", message.SubscriptionUserId,
|
||||||
message.MatchId, message.Id);
|
message.SubscriptionId, message.Id);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ public class TextMatchMatchedHandler : IHandleMessages<TextMatchMatched>
|
|||||||
var fromUsername = string.IsNullOrWhiteSpace(message.From) ? "anonymous" : message.From;
|
var fromUsername = string.IsNullOrWhiteSpace(message.From) ? "anonymous" : message.From;
|
||||||
var textMessage = new TextMessage(long.Parse(identity.Identity))
|
var textMessage = new TextMessage(long.Parse(identity.Identity))
|
||||||
{
|
{
|
||||||
Text = $"[{message.PublishedDateTime:MM.dd.yyyy HH:mm:ss}] Найдено совпадение.\nТип совпадения: <b>'{((TextMatchRule)message.Rule).TextView()}'</b>\nШаблон: <b>'{message.Template}'</b>\n{fromUsername} в @{message.ChatUsername}: <i>{message.Text}</i>",
|
Text = $"[{message.PublishedDateTime:MM.dd.yyyy HH:mm:ss}] Найдено совпадение.\nТип совпадения: <b>'{message.Rule.TextView()}'</b>\nШаблон: <b>'{message.Template}'</b>\n{fromUsername} в @{message.ChatUsername}: <i>{message.Text}</i>",
|
||||||
ParseMode = ParseMode.Html
|
ParseMode = ParseMode.Html
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -1,11 +1,12 @@
|
|||||||
using Nocr.TextMatcher.Api.Contracts.TextMatches;
|
using Nocr.TextMatcher.Api.Contracts.TextMatches;
|
||||||
using Nocr.TextMatcher.Api.Contracts.TextMatches.Dto;
|
using Nocr.TextMatcher.Api.Contracts.TextMatches.Dto;
|
||||||
|
using Nocr.TextMatcher.Contracts;
|
||||||
|
|
||||||
namespace Nocr.TelegramClient.AppServices.Matches;
|
namespace Nocr.TelegramClient.AppServices.Matches;
|
||||||
|
|
||||||
public static class TextMatchExtensions
|
public static class TextMatchExtensions
|
||||||
{
|
{
|
||||||
public static string TextView(this TextMatchData textMatch)
|
public static string TextView(this TextSubscriptionData textMatch)
|
||||||
{
|
{
|
||||||
var activeText = textMatch.Active ? "Активна" : "Не активна";
|
var activeText = textMatch.Active ? "Активна" : "Не активна";
|
||||||
var activeCommandText = textMatch.Active
|
var activeCommandText = textMatch.Active
|
||||||
@ -15,15 +16,15 @@ public static class TextMatchExtensions
|
|||||||
return $"[{textMatch.Id}] (@{textMatch.ChatUsername}) {activeText}: '{textMatch.Rule.TextView()}' > '{textMatch.Template}'\n{activeCommandText}\n{deleteCommandText}";
|
return $"[{textMatch.Id}] (@{textMatch.ChatUsername}) {activeText}: '{textMatch.Rule.TextView()}' > '{textMatch.Template}'\n{activeCommandText}\n{deleteCommandText}";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string TextView(this TextMatchRule rule)
|
public static string TextView(this TextSubscriptionRule rule)
|
||||||
{
|
{
|
||||||
switch (rule)
|
switch (rule)
|
||||||
{
|
{
|
||||||
case TextMatchRule.Full:
|
case TextSubscriptionRule.Full:
|
||||||
return "Полное";
|
return "Полное";
|
||||||
case TextMatchRule.AllWords:
|
case TextSubscriptionRule.AllWords:
|
||||||
return "Все слова из списка";
|
return "Все слова из списка";
|
||||||
case TextMatchRule.AnyWord:
|
case TextSubscriptionRule.AnyWord:
|
||||||
return "Одно слово из списка";
|
return "Одно слово из списка";
|
||||||
default:
|
default:
|
||||||
throw new IndexOutOfRangeException(nameof(rule));
|
throw new IndexOutOfRangeException(nameof(rule));
|
||||||
|
|||||||
@ -36,13 +36,13 @@ public static class ServiceCollectionExtensions
|
|||||||
});
|
});
|
||||||
|
|
||||||
services.Configure<TextMatcherRestEaseOptions>(configuration.GetSection(nameof(TextMatcherRestEaseOptions)));
|
services.Configure<TextMatcherRestEaseOptions>(configuration.GetSection(nameof(TextMatcherRestEaseOptions)));
|
||||||
services.AddScoped<ITextMatchesController>(ctx =>
|
services.AddScoped<ITextSubscriptionsController>(ctx =>
|
||||||
{
|
{
|
||||||
var options = ctx.GetRequiredService<IOptions<TextMatcherRestEaseOptions>>().Value;
|
var options = ctx.GetRequiredService<IOptions<TextMatcherRestEaseOptions>>().Value;
|
||||||
var httpClientFactory = ctx.GetRequiredService<IHttpClientFactory>();
|
var httpClientFactory = ctx.GetRequiredService<IHttpClientFactory>();
|
||||||
var client = httpClientFactory.CreateClient(nameof(ITextMatchesController));
|
var client = httpClientFactory.CreateClient(nameof(ITextSubscriptionsController));
|
||||||
client.BaseAddress = new Uri(options.BasePath);
|
client.BaseAddress = new Uri(options.BasePath);
|
||||||
return RestClient.For<ITextMatchesController>(client);
|
return RestClient.For<ITextSubscriptionsController>(client);
|
||||||
});
|
});
|
||||||
|
|
||||||
services.AddScoped<IUsersService, UsersService>();
|
services.AddScoped<IUsersService, UsersService>();
|
||||||
|
|||||||
@ -4,7 +4,7 @@ namespace Nocr.TelegramClient.AppServices.Users;
|
|||||||
|
|
||||||
public interface IUsersService
|
public interface IUsersService
|
||||||
{
|
{
|
||||||
public Task<UserData?> GetOrCreate(long telegramId, string? username, CancellationToken cancellationToken = default);
|
public Task<UserData> GetOrCreate(long telegramId, string? username, CancellationToken cancellationToken = default);
|
||||||
|
|
||||||
public Task<UserData?> GetById(long id, CancellationToken cancellationToken = default);
|
public Task<UserData?> GetById(long id, CancellationToken cancellationToken = default);
|
||||||
}
|
}
|
||||||
@ -13,7 +13,7 @@ public sealed class UsersService : IUsersService
|
|||||||
_usersController = usersController ?? throw new ArgumentNullException(nameof(usersController));
|
_usersController = usersController ?? throw new ArgumentNullException(nameof(usersController));
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<UserData?> GetOrCreate(long telegramId, string? username, CancellationToken cancellationToken = default)
|
public async Task<UserData> GetOrCreate(long telegramId, string? username, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var user = await _usersController.GetByIdentity(UserIdentityType.TelegramId, telegramId.ToString(), cancellationToken);
|
var user = await _usersController.GetByIdentity(UserIdentityType.TelegramId, telegramId.ToString(), cancellationToken);
|
||||||
if (user == null)
|
if (user == null)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user