/
d.alekseev
/
SmartMenuBot
Обзор
Документация
Войти
/
d.alekseev
/
SmartMenuBot
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
ConsoleBot/TelegramBot/Commands/Implementations/ShowTasksCommand.cs
86 строк
3 KB
d.alekseev
feat: постраничная навигация задач и callback-управление карточкой задачи
15 фев 2026, 15:04
15 фев 2026, 15:04
69f4d23
Код
Авторство
О чём код?
using Telegram.Bot; using Telegram.Bot.Types; using Telegram.Bot.Types.ReplyMarkups; using SmartMenuBot.Core.Entities; using SmartMenuBot.Core.Services.Interfaces; using SmartMenuBot.TelegramBot.Commands.Interfaces; using SmartMenuBot.TelegramBot.Dto; namespace SmartMenuBot.TelegramBot.Commands.Implementations { public class ShowTasksCommand( ITelegramBotClient botClient, IUserService userService, IToDoListService toDoListService) : IBotCommand { public string CommandText => "/show"; public bool CanExecute(CommandContext context) { string? messageText = context.Update.Message?.Text; return messageText != null && messageText.StartsWith(CommandText, StringComparison.OrdinalIgnoreCase); } public async Task ExecuteAsync(CommandContext context) { var ct = context.CancellationToken; var existingUser = await userService.GetUserAsync(context.Update.Message!.From!.Id, ct); if (existingUser == null) { await botClient.SendMessage( context.Update.Message.Chat.Id, "\nДля использования этой функции необходимо авторизоваться командой /start", replyMarkup: ReplyKeyboards.PreRegistration, cancellationToken: ct ); return; } var userLists = await toDoListService.GetUserListsAsync(existingUser.UserId, ct); var keyboard = BuildShowMenuKeyboard(userLists); await botClient.SendMessage( context.Update.Message.Chat.Id, "Выберите список", replyMarkup: keyboard, cancellationToken: ct); } private static InlineKeyboardMarkup BuildShowMenuKeyboard(IReadOnlyList<ToDoList> userLists) { var rows = new List<List<InlineKeyboardButton>> { new List<InlineKeyboardButton> { InlineKeyboardButton.WithCallbackData("📌Без списка", new PagedListCallbackDto { Action = "show", ToDoListId = null, Page = 0 }.ToString()) } }; foreach (var item in userLists) { rows.Add(new List<InlineKeyboardButton> { InlineKeyboardButton.WithCallbackData(item.Name, new PagedListCallbackDto { Action = "show", ToDoListId = item.Id, Page = 0 }.ToString()) }); } rows.Add(new List<InlineKeyboardButton> { InlineKeyboardButton.WithCallbackData("🆕Добавить", "addlist"), InlineKeyboardButton.WithCallbackData("❌Удалить", "deletelist") }); return new InlineKeyboardMarkup(rows); } } }