From 7556b3d6380a11d1ae278ea4ff1778ecd9f7c889 Mon Sep 17 00:00:00 2001 From: FrigaT Date: Sun, 7 Dec 2025 11:17:21 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=D0=BD=D1=8B=20=D0=BF=D0=B0=D1=82=D1=82=D0=B5=D1=80=D0=BD?= =?UTF-8?q?=D1=8B=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BotPages.Core/Routing/CommandsRegistry.cs | 22 ++++++++++++++++------ BotPages.Telegram/TelegramAdapter.cs | 4 ++++ Demo/Pages/DetailsPage.cs | 4 ++-- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/BotPages.Core/Routing/CommandsRegistry.cs b/BotPages.Core/Routing/CommandsRegistry.cs index 6006a83..6435601 100644 --- a/BotPages.Core/Routing/CommandsRegistry.cs +++ b/BotPages.Core/Routing/CommandsRegistry.cs @@ -67,15 +67,25 @@ internal sealed class CommandsRegistry /// private static Regex ToRegex(string template) { - var escaped = Regex.Escape(template) - .Replace("\\{", "{").Replace("\\}", "}"); - - var pattern = "^" + Regex.Replace(escaped, @"\{(\w+)(\?)?\}", m => + // Заменяем все {name} и {name?} на регулярные группы + var pattern = "^" + Regex.Replace(template, @"\s*\{(\w+)(\?)?\}", m => { var name = m.Groups[1].Value; var optional = m.Groups[2].Success; - return optional ? $"(?<{name}>\\S+)?" : $"(?<{name}>\\S+)"; - }) + "$"; + + var argPattern = $"(?:\"(?<{name}>[^\"]+)\"|(?<{name}>\\S+))"; + + if (optional) + { + // необязательный параметр: пробел + значение целиком необязательны + return $"(?:\\s+{argPattern})?"; + } + else + { + // обязательный параметр: пробел обязателен + return $"\\s+{argPattern}"; + } + }) + "\\s*$"; // допускаем пробелы/переносы в конце return new Regex(pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase); } diff --git a/BotPages.Telegram/TelegramAdapter.cs b/BotPages.Telegram/TelegramAdapter.cs index bff4419..482eb00 100644 --- a/BotPages.Telegram/TelegramAdapter.cs +++ b/BotPages.Telegram/TelegramAdapter.cs @@ -66,6 +66,10 @@ public sealed class TelegramAdapter : IMessangerAdapterSetup var mapped = TelegramUpdateMapper.Map(MessengerType, update, _client); if (mapped is not null) await onUpdate(mapped); + if (update.CallbackQuery is not null) + { + await _.AnswerCallbackQuery(update.CallbackQuery.Id); + } }, errorHandler: async (_, ex, ct2) => diff --git a/Demo/Pages/DetailsPage.cs b/Demo/Pages/DetailsPage.cs index e8559bd..3c5e0d5 100644 --- a/Demo/Pages/DetailsPage.cs +++ b/Demo/Pages/DetailsPage.cs @@ -54,8 +54,8 @@ public sealed class DetailsPage : StatefullPage await ctx.Navigation.GoToAsync(ctx, ct); } - internal static string Command => "/create_request {title}"; - internal static string CommandDescription => "создание заявки /create_request {title"; + internal static string Command => "/create_request {title?}"; + internal static string CommandDescription => "создание заявки /create_request {title}"; internal static CommandHandler CommandHandler = async (ctx, args, ct) => { string? title = "";