From 6c79c04ebd6b9ae03eb18173ad82063731470a38 Mon Sep 17 00:00:00 2001 From: SysAdmin Date: Mon, 6 Oct 2025 00:44:28 +0100 Subject: [PATCH] Fix: Message threading - navigation now sends new messages at bottom - Changed HandleMainMenu to send new messages instead of editing - Changed HandleBrowse to send new messages for category navigation - Changed HandleViewCart to use SendNewCartMessage (already existed) - Changed HandleViewOrders to send new messages for order list - Changed HandleViewOrder to send new messages for order details This ensures the active conversation always appears at the bottom of the chat instead of mid-thread when users click menu buttons. Provides better UX and natural conversation flow in Telegram. --- TeleBot/TeleBot/Handlers/CallbackHandler.cs | 44 +++++++++------------ 1 file changed, 18 insertions(+), 26 deletions(-) diff --git a/TeleBot/TeleBot/Handlers/CallbackHandler.cs b/TeleBot/TeleBot/Handlers/CallbackHandler.cs index 628d591..8c0e021 100644 --- a/TeleBot/TeleBot/Handlers/CallbackHandler.cs +++ b/TeleBot/TeleBot/Handlers/CallbackHandler.cs @@ -253,9 +253,9 @@ namespace TeleBot.Handlers private async Task HandleMainMenu(ITelegramBotClient bot, Message message, UserSession session) { - await bot.EditMessageTextAsync( + // Send new message at bottom instead of editing old one + await bot.SendTextMessageAsync( message.Chat.Id, - message.MessageId, MessageFormatter.FormatWelcome(true), parseMode: Telegram.Bot.Types.Enums.ParseMode.Markdown, replyMarkup: MenuBuilder.MainMenu() @@ -274,13 +274,12 @@ namespace TeleBot.Handlers var categories = await _shopService.GetCategoriesAsync(); - await SafeEditMessageAsync( - bot, + // Send new message at bottom for navigation + await bot.SendTextMessageAsync( message.Chat.Id, - message.MessageId, MessageFormatter.FormatCategories(categories), - Telegram.Bot.Types.Enums.ParseMode.Markdown, - MenuBuilder.CategoryMenu(categories) + parseMode: Telegram.Bot.Types.Enums.ParseMode.Markdown, + replyMarkup: MenuBuilder.CategoryMenu(categories) ); session.State = SessionState.BrowsingCategories; } @@ -516,14 +515,8 @@ namespace TeleBot.Handlers session.Cart.GetTotalAmount() ); - await bot.EditMessageTextAsync( - message.Chat.Id, - message.MessageId, - MessageFormatter.FormatCart(session.Cart), - parseMode: Telegram.Bot.Types.Enums.ParseMode.Markdown, - replyMarkup: _menuBuilder.CartMenu(session.Cart) - ); - session.State = SessionState.ViewingCart; + // Send new message at bottom instead of editing + await SendNewCartMessage(bot, message.Chat.Id, session); } private async Task SendNewCartMessage(ITelegramBotClient bot, long chatId, UserSession session) @@ -1129,12 +1122,12 @@ namespace TeleBot.Handlers telegramUser.FirstName ?? "", telegramUser.LastName ?? "" ); - + + // Send new message at bottom for navigation if (!orders.Any()) { - await bot.EditMessageTextAsync( + await bot.SendTextMessageAsync( message.Chat.Id, - message.MessageId, "📦 *Your Orders*\n\nYou have no orders yet.", parseMode: Telegram.Bot.Types.Enums.ParseMode.Markdown, replyMarkup: MenuBuilder.MainMenu() @@ -1142,15 +1135,14 @@ namespace TeleBot.Handlers } else { - await bot.EditMessageTextAsync( + await bot.SendTextMessageAsync( message.Chat.Id, - message.MessageId, $"📦 *Your Orders*\n\nFound {orders.Count} order(s):", parseMode: Telegram.Bot.Types.Enums.ParseMode.Markdown, replyMarkup: MenuBuilder.OrderListMenu(orders) ); } - + session.State = SessionState.ViewingOrders; } @@ -1164,21 +1156,21 @@ namespace TeleBot.Handlers telegramUser.FirstName ?? "", telegramUser.LastName ?? "" ); - + if (order == null) { await bot.AnswerCallbackQueryAsync("", "Order not found", showAlert: true); return; } - - await bot.EditMessageTextAsync( + + // Send new message at bottom for navigation + await bot.SendTextMessageAsync( message.Chat.Id, - message.MessageId, MessageFormatter.FormatOrder(order), parseMode: Telegram.Bot.Types.Enums.ParseMode.Markdown, replyMarkup: MenuBuilder.MainMenu() ); - + session.State = SessionState.ViewingOrder; }