/
d.alekseev
/
SmartMenuBot
Обзор
Документация
Войти
/
d.alekseev
/
SmartMenuBot
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
ConsoleBot/TelegramBot/Callbacks/Implementations/ShowTaskCallbackCommand.cs
90 строк
3 KB
d.alekseev
feat: постраничная навигация задач и callback-управление карточкой задачи
15 фев 2026, 15:04
15 фев 2026, 15:04
69f4d23
Код
Авторство
О чём код?
using Telegram.Bot; using SmartMenuBot.Core.Entities; using SmartMenuBot.Core.Services.Interfaces; using SmartMenuBot.TelegramBot.Callbacks; using SmartMenuBot.TelegramBot.Callbacks.Interfaces; using SmartMenuBot.TelegramBot.Dto; using SmartMenuBot.TelegramBot.Helpers; using Telegram.Bot.Types.ReplyMarkups; namespace SmartMenuBot.TelegramBot.Callbacks.Implementations { public class ShowTaskCallbackCommand( ITelegramBotClient botClient, IToDoService toDoService) : ICallbackCommand { public string Action => "showtask"; public bool CanExecute(CallbackCommandContext context) { return string.Equals(context.Dto.Action, Action, StringComparison.OrdinalIgnoreCase); } public async Task ExecuteAsync(CallbackCommandContext context) { if (context.Query.Message is null) return; var ct = context.CancellationToken; var dto = ToDoItemCallbackDto.FromString(context.Query.Data ?? string.Empty); if (dto.ToDoItemId == Guid.Empty) { await botClient.EditMessageText( context.Query.Message.Chat.Id, context.Query.Message.MessageId, "Некорректный идентификатор задачи.", cancellationToken: ct); return; } var task = await toDoService.GetAsync(dto.ToDoItemId, ct); if (task is null || task.User.TelegramUserId != context.Query.From.Id) { await botClient.EditMessageText( context.Query.Message.Chat.Id, context.Query.Message.MessageId, "Задача не найдена.", cancellationToken: ct); return; } await botClient.EditMessageText( context.Query.Message.Chat.Id, context.Query.Message.MessageId, ToDoTaskCardBuilder.BuildTaskText(task), replyMarkup: new InlineKeyboardMarkup(BuildTaskActionRows(task.Id, task.State)), cancellationToken: ct); } private static IReadOnlyList<InlineKeyboardButton[]> BuildTaskActionRows(Guid taskId, ToDoItemState state) { var buttons = new List<InlineKeyboardButton>(); if (state == ToDoItemState.Active) { buttons.Add( InlineKeyboardButton.WithCallbackData( "✅Выполнить", new ToDoItemCallbackDto { Action = "completetask", ToDoItemId = taskId }.ToString())); } buttons.Add( InlineKeyboardButton.WithCallbackData( "❌Удалить", new ToDoItemCallbackDto { Action = "deletetask", ToDoItemId = taskId }.ToString())); return [ [.. buttons] ]; } } }