示例#1
0
        public Responce Greetings(long chatId)
        {
            try
            {
                var newTable = _service.CreateTable(chatId);

                var restaurants = _service.GetAllActiveRestaurants();

                if (restaurants.Count > 1)
                {
                    return(new Responce
                    {
                        ChatId = chatId,
                        ResponceText = "В каком вы заведении?"
                    });
                }
                else
                {
                    var rest = restaurants.FirstOrDefault();
                    _service.AssignRestaurant(chatId, rest.Name);
                    _service.UpdateTableState(chatId, SessionState.InQueue);

                    return(new Responce
                    {
                        ChatId = chatId,
                        ResponceText = "Введите номер стола за которым вы сидите:"
                    });
                }
            }
            catch (Exception)
            {
                return(Responce.UnknownResponce(chatId));
            }
        }
示例#2
0
        public Responce RemoveFromOrder(long chatId)
        {
            try
            {
                var table = _service.GetActiveTable(chatId);

                if (table.Orders.Any())
                {
                    if (table.Cheque != null && table.Cheque.PaymentRecieved)
                    {
                        return new Responce {
                                   ResponceText = "Извините, но заказ уже оплачен!"
                        }
                    }
                    ;

                    var resp = ShowCart(chatId);
                    resp.ResponceText += Environment.NewLine + "Отправьте сообщением номер блюда, которое вы хотите убрать из заказа";

                    return(resp);
                }
                else
                {
                    return(new Responce {
                        ResponceText = "Вы пока еще ничего не заказали :("
                    });
                }
            }
            catch (Exception)
            {
                return(Responce.UnknownResponce(chatId));
            }
        }
示例#3
0
        public Responce LeaveFeedback(long chatId, string username, string text)
        {
            try
            {
                _service.CreateFeedback(new Feedback {
                    ChatId = chatId, Date = DateTime.Now, Id = Guid.NewGuid(), Text = text, UserName = username
                });

                var table = _service.GetActiveTable(chatId);
                if (table != null)
                {
                    if (table.TableNumber == null)
                    {
                        _service.DeleteTable(table.Id);
                    }
                    else
                    {
                        _service.UpdateTableState(table.Id, SessionState.Sitted);
                    }
                }

                return(new Responce
                {
                    ChatId = chatId,
                    ResponceText = "Спасибо за ваш отзыв!"
                });
            }
            catch (Exception)
            {
                return(Responce.UnknownResponce(chatId));
            }
        }
示例#4
0
        public Responce CloseTimeArriving(long chatId)
        {
            try
            {
                var table = _service.GetActiveTable(chatId);

                if (table != null)
                {
                    _service.UpdateTableState(chatId, SessionState.Sitted);

                    return(new Responce
                    {
                        ChatId = chatId,
                        ResponceText = "Напишите \"Меню\" в чат и я принесу его вам.",
                    });
                }
                else
                {
                    return(Responce.UnknownResponce(chatId));
                }
            }
            catch (Exception)
            {
                return(Responce.UnknownResponce(chatId));
            }
        }
示例#5
0
        public Responce CancelTable(long chatId)
        {
            try
            {
                var table = _service.GetActiveTable(chatId);
                if (table != null)
                {
                    if (table.TableNumber == null)
                    {
                        _service.DeleteTable(table.Id);
                    }
                    else
                    {
                        _service.UpdateTableState(table.Id, SessionState.Sitted);
                    }
                }

                return(new Responce
                {
                    ChatId = chatId,
                    ResponceText = "Вы в главном меню."
                });
            }
            catch (Exception)
            {
                return(Responce.UnknownResponce(chatId));
            }
        }
示例#6
0
        public Responce CloseMenu(long chatId)
        {
            try
            {
                var table = _service.GetActiveTable(chatId);

                if (table != null)
                {
                    if (table.State != SessionState.OrderPosted)
                    {
                        _service.UpdateTableState(chatId, SessionState.Sitted);
                    }

                    return(new Responce
                    {
                        ChatId = chatId,
                        ResponceText = "Нажмите \"Меню\" и я принесу его вам.",
                    });
                }
                else
                {
                    return(new Responce
                    {
                        ChatId = chatId,
                        ResponceText = "Нажмите \"Заказ за столиком\", чтобы сделать заказ!",
                    });
                }
            }
            catch (Exception)
            {
                return(Responce.UnknownResponce(chatId));
            }
        }
示例#7
0
        public Responce LeaveBooking(long chatId, string text)
        {
            try
            {
                _service.CreateBooking(new Booking {
                    ChatId = chatId, Date = DateTime.Now, Id = Guid.NewGuid(), Text = text
                });

                var table = _service.GetActiveTable(chatId);
                if (table != null)
                {
                    if (table.TableNumber == null)
                    {
                        _service.DeleteTable(table.Id);
                    }
                    else
                    {
                        _service.UpdateTableState(table.Id, SessionState.Sitted);
                    }
                }

                return(new Responce
                {
                    ChatId = chatId,
                    ResponceText = "Скоро с вами свяжутся!"
                });
            }
            catch (Exception)
            {
                return(Responce.UnknownResponce(chatId));
            }
        }
示例#8
0
        public Responce AddRemark(long chatId, string message)
        {
            try
            {
                var table = _service.GetActiveTable(chatId);

                if (table != null)
                {
                    _service.UpdateDishRemark(table.Id, message);
                    _service.UpdateTableState(chatId, SessionState.Sitted);

                    return(new Responce {
                        ChatId = chatId, ResponceText = "Хорошо, чтобы оформить заказ перейдите в корзину."
                    });
                }
                else
                {
                    return(new Responce {
                        ChatId = chatId, ResponceText = "Нажмите \"Заказ за столиком\" в главном меню, чтобы сделать заказ!"
                    });
                }
            }
            catch (Exception)
            {
                return(Responce.UnknownResponce(chatId));
            }
        }
示例#9
0
        public Responce CallWaiter(long chatId)
        {
            try
            {
                _service.SetHelpNeeded(chatId);

                return(new Responce
                {
                    ChatId = chatId,
                    ResponceText = "Официант уже идет"
                });
            }
            catch (Exception)
            {
                return(Responce.UnknownResponce(chatId));
            }
        }
示例#10
0
        public Responce RemoveFromOrderByNum(long chatId, string message)
        {
            try
            {
                var dishNum = int.Parse(message);

                _service.RemoveDishFromOrder(chatId, dishNum);

                return(new Responce {
                    ResponceText = "Блюдо успешно удалено из вашего заказа!"
                });
            }
            catch (Exception)
            {
                return(Responce.UnknownResponce(chatId));
            }
        }
示例#11
0
        public Responce Restrunt(long chatId, string restruntName)
        {
            try
            {
                _service.AssignRestaurant(chatId, restruntName);
                _service.UpdateTableState(chatId, SessionState.InQueue);

                return(new Responce
                {
                    ChatId = chatId,
                    ResponceText = "Номер стола:"
                });
            }
            catch (Exception)
            {
                return(Responce.UnknownResponce(chatId));
            }
        }
示例#12
0
        public Responce PayCash(long chatId)
        {
            try
            {
                _service.SetCashPayment(chatId);

                _service.SendOrderToDesk(chatId);

                return(new Responce
                {
                    ChatId = chatId,
                    ResponceText = "Вы выбрали оплату наличными в заведении. Заказ отправлен в заведение!"
                });
            }
            catch (Exception)
            {
                return(Responce.UnknownResponce(chatId));
            }
        }
示例#13
0
        public Responce FeedbackRequest(long chatId)
        {
            try
            {
                var table   = _service.GetActiveTable(chatId);
                var tableId = (table == null) ? _service.CreateTable(chatId) : table.Id;

                _service.UpdateTableState(tableId, SessionState.Feedback);

                return(new Responce
                {
                    ChatId = chatId,
                    ResponceText = "Тут можно оставить отзыв. Уместите его в одно сообщение, пожалуйства! Мы обязательно учтем все ваши пожелания!"
                });
            }
            catch (Exception)
            {
                return(Responce.UnknownResponce(chatId));
            }
        }
示例#14
0
        public Responce BookingRequest(long chatId)
        {
            try
            {
                var table   = _service.GetActiveTable(chatId);
                var tableId = (table == null) ? _service.CreateTable(chatId) : table.Id;

                _service.UpdateTableState(chatId, SessionState.Booking);

                return(new Responce
                {
                    ChatId = chatId,
                    ResponceText = "Пожалуйста, введите информацию о бронировании в одно сообщение (Имя, дата и время, количество человек и телефон для связи). Мы вам перезвоним!"
                });
            }
            catch (Exception)
            {
                return(Responce.UnknownResponce(chatId));
            }
        }
示例#15
0
        public Responce PaymentRequest(long chatId)
        {
            try
            {
                var table   = _service.GetActiveTable(chatId);
                var tableId = (table == null) ? _service.CreateTable(chatId) : table.Id;

                _service.UpdateTableState(tableId, SessionState.Cheque);

                return(new Responce
                {
                    ChatId = chatId,
                    ResponceText = "Введите сумму для оплаты"
                });
            }
            catch (Exception)
            {
                return(Responce.UnknownResponce(chatId));
            }
        }
示例#16
0
        public Responce ShowMenuCategories(long chatId)
        {
            try
            {
                var table = _service.GetActiveTable(chatId);

                if (table != null && table.State != SessionState.OrderPosted)
                {
                    _service.UpdateTableState(chatId, SessionState.MenuCategory);
                }

                return(new Responce
                {
                    ChatId = chatId,
                    ResponceText = "Выберите раздел меню!"
                });
            }
            catch (Exception)
            {
                return(Responce.UnknownResponce(chatId));
            }
        }
示例#17
0
        public Responce QRCode(long chatId, string code)
        {
            try
            {
                string restruntCode = code.Substring(1, 3);
                int    tableNumber  = int.Parse(code.Substring(5));

                _service.AssignRestaurantByCode(chatId, restruntCode);
                _service.AssignNextQueueNumber(chatId);
                _service.UpdateTableState(chatId, SessionState.Sitted);

                return(new Responce
                {
                    ChatId = chatId,
                    ResponceText = "Отлично! Напишите \"меню\" в чат и я принесу его вам."
                });
            }
            catch (Exception)
            {
                return(Responce.UnknownResponce(chatId));
            }
        }
示例#18
0
        public Responce AssignTableNumber(long chatId, string message)
        {
            try
            {
                var table = _service.GetActiveTable(chatId);

                if (table != null)
                {
                    var isNumber = Int32.TryParse(message, out int tableNumber);

                    if (isNumber)
                    {
                        _service.AssignQueueNumber(chatId, message);
                        _service.UpdateTableState(chatId, SessionState.Sitted);

                        return(new Responce {
                            ChatId = chatId, ResponceText = "Отлично! Теперь вы можете сделать заказ"
                        });
                    }
                    else
                    {
                        return(new Responce {
                            ChatId = chatId, ResponceText = "Нужно ввести номер стола."
                        });
                    }
                }
                else
                {
                    return new Responce {
                               ChatId = chatId, ResponceText = "Стол не найден!"
                    }
                };
            }
            catch (Exception)
            {
                return(Responce.UnknownResponce(chatId));
            }
        }
示例#19
0
        public async Task <IHttpActionResult> WebHook(Update update)
        {
            long chatId = 0;

            try
            {
                var bot = new BotBrains(Request.Headers.Host);
                Telegram = new TelegramBotClient(bot.BotToken);

                if (update.Type == UpdateType.MessageUpdate)
                {
                    var message = update.Message;
                    chatId = message.Chat.Id;
                    var parser = ParserChoser.GetParser(chatId, bot);

                    if (message.Type == MessageType.TextMessage || message.Type == MessageType.PhotoMessage || message.Type == MessageType.SuccessfulPayment)
                    {
                        var cmd = parser.ParseForCommand(update);

                        switch (cmd)
                        {
                        case CmdTypes.Start:
                        {
                            var greetings = "Здравствуйте, меня зовут ДайнерБот! Я помогу вам сделать заказ. " +
                                            "Для того, чтобы ознакомиться с меню нажмите \"Меню\", чтобы " +
                                            "сделать заказ нажмите \"Заказать\".";

                            await Telegram.SendTextMessageAsync(
                                chatId,
                                bot.GreetingsText ?? greetings,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.Greetings:
                        {
                            var responce = bot.Greetings(chatId);

                            await Telegram.SendTextMessageAsync(
                                chatId,
                                responce.ResponceText,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.Restrunt:
                        {
                            var responce = bot.Restrunt(chatId, message.Text);

                            await Telegram.SendTextMessageAsync(
                                chatId,
                                responce.ResponceText,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.TableNumber:
                        {
                            var responce = bot.AssignTableNumber(chatId, message.Text);

                            await Telegram.SendTextMessageAsync(
                                chatId,
                                responce.ResponceText,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.RequestPayment:
                        {
                            var responce = bot.PaymentRequest(chatId);

                            await Telegram.SendTextMessageAsync(chatId, responce.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.InputSumm:
                        {
                            var response = bot.InputSumm(chatId, message.Text, message.Chat.Username);

                            if (response.InvoiceReady)
                            {
                                var prices = new LabeledPrice[1];
                                prices[0] = new LabeledPrice {
                                    Amount = response.Invoice.SummInCents, Label = "Итого"
                                };

                                await Telegram.SendInvoiceAsync(
                                    chatId, response.Invoice.Title, response.Invoice.Description, response.Invoice.Id.ToString(), bot.PaymentToken, "startP", response.Invoice.Currency, prices);
                            }
                            else
                            {
                                await Telegram.SendTextMessageAsync(chatId, response.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);
                            }
                            break;
                        }

                        case CmdTypes.Menu:
                        {
                            var responce = bot.ShowMenuCategories(chatId);

                            await Telegram.SendTextMessageAsync(
                                chatId,
                                responce.ResponceText,
                                parseMode : ParseMode.Html,
                                replyMarkup : new MenuCategorySessionParser(bot.GetMenuCategoriesByChatId(chatId)).Keyboard);

                            break;
                        }

                        case CmdTypes.RequestFeedback:
                        {
                            var responce = bot.FeedbackRequest(chatId);

                            await Telegram.SendTextMessageAsync(
                                chatId,
                                responce.ResponceText,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.LeaveFeedback:
                        {
                            var responce = bot.LeaveFeedback(chatId, message.Chat.Username, message.Text);

                            await Telegram.SendTextMessageAsync(
                                chatId,
                                responce.ResponceText,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.RequestBooking:
                        {
                            var responce = bot.BookingRequest(chatId);

                            await Telegram.SendTextMessageAsync(chatId, responce.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.LeaveBooking:
                        {
                            var responce = bot.LeaveBooking(chatId, message.Text);

                            await Telegram.SendTextMessageAsync(chatId, responce.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.CancelTable:
                        {
                            var responce = bot.CancelTable(chatId);

                            await Telegram.SendTextMessageAsync(chatId, responce.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.Category:
                        {
                            var response = bot.SnowMenuByCategory(chatId, message.Text);

                            if (response.Dishes != null)
                            {
                                await Telegram.SendTextMessageAsync(
                                    chatId,
                                    response.ResponceText,
                                    parseMode : ParseMode.Html,
                                    replyMarkup : InlineKeyBoardManager.MenuKeyBoard(response.Dishes));
                            }
                            else
                            {
                                await Telegram.SendTextMessageAsync(
                                    chatId,
                                    response.ResponceText,
                                    parseMode : ParseMode.Html,
                                    replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);
                            }

                            break;
                        }

                        case CmdTypes.CloseMenu:
                        {
                            var response = bot.CloseMenu(chatId);

                            await Telegram.SendTextMessageAsync(
                                chatId,
                                response.ResponceText,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.SuccessfulPayment:
                        {
                            var payment = message.SuccessfulPayment;

                            var responce = bot.SuccessPayment(chatId, payment.InvoicePayload, payment.TotalAmount, payment.TelegramPaymentChargeId, payment.Currency);

                            await Telegram.SendTextMessageAsync(
                                chatId,
                                responce.ResponceText,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.Cart:
                        {
                            var responce = bot.ShowCart(chatId);

                            if (responce.NeedInlineKeeyboard)
                            {
                                var keyboard = InlineKeyBoardManager.GetByCmnd(CmdTypes.Cart);

                                await Telegram.SendTextMessageAsync(chatId, responce.ResponceText, parseMode : ParseMode.Html, replyMarkup : keyboard);
                            }
                            else
                            {
                                await Telegram.SendTextMessageAsync(chatId, responce.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);
                            }
                            break;
                        }

                        case CmdTypes.MyOrders:
                        {
                            var responce = bot.ShowAllOrders(chatId);

                            await Telegram.SendTextMessageAsync(chatId, responce.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.Remark:
                        {
                            var response = bot.AddRemark(chatId, message.Text);

                            await Telegram.SendTextMessageAsync(
                                chatId,
                                response.ResponceText,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.CloseTimeArriving:
                        {
                            var response = bot.CloseTimeArriving(chatId);

                            await Telegram.SendTextMessageAsync(
                                chatId,
                                response.ResponceText,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.Waiter:
                        {
                            var response = bot.CallWaiter(chatId);

                            await Telegram.SendTextMessageAsync(
                                chatId,
                                response.ResponceText,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.Remove:
                        {
                            var response = bot.RemoveFromOrder(chatId);

                            await Telegram.SendTextMessageAsync(
                                chatId,
                                response.ResponceText,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.RemoveByNum:
                        {
                            var response = bot.RemoveFromOrderByNum(chatId, message.Text);

                            await Telegram.SendTextMessageAsync(
                                chatId,
                                response.ResponceText,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.Unknown:
                        {
                            await Telegram.SendTextMessageAsync(
                                chatId,
                                "Извините, не понял вашей просьбы.",
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.QRCode:
                        {
                            var code = "";
                            var file = await Telegram.GetFileAsync(message.Photo.LastOrDefault()?.FileId);

                            var filename = bot.PicturePath + chatId + "." + file.FilePath.Split('.').Last();

                            using (var saveImageStream = System.IO.File.Open(filename, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite))
                            {
                                await file.FileStream.CopyToAsync(saveImageStream);

                                saveImageStream.Position = 0;
                                saveImageStream.Close();
                            }

                            file.FileStream.Position = 0;
                            file.FileStream.Close();

                            code = CodeController.ReadCode(filename);

                            if (System.IO.File.Exists(filename))
                            {
                                System.IO.File.Delete(filename);
                            }

                            if (code != null)
                            {
                                var response = bot.QRCode(chatId, code);

                                await Telegram.SendTextMessageAsync(
                                    chatId,
                                    response.ResponceText,
                                    parseMode : ParseMode.Html,
                                    replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);
                            }
                            else
                            {
                                await Telegram.SendTextMessageAsync(
                                    chatId,
                                    "Не удалось распознать код! Попробуйте еще раз или выберите ресторан и номер стола через меню!",
                                    parseMode : ParseMode.Html,
                                    replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);
                            }
                            break;
                        }

                        case CmdTypes.Actions:
                        {
                            await Telegram.SendTextMessageAsync(
                                chatId,
                                bot.Actions,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.Description:
                        {
                            await Telegram.SendTextMessageAsync(
                                chatId,
                                bot.Description,
                                parseMode : ParseMode.Html,
                                replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                            break;
                        }

                        case CmdTypes.Location:
                        {
                            var responce = bot.GetAllRestaurants(chatId);

                            if (responce.IsOk)
                            {
                                foreach (var restaurant in responce.RestaurantsInfo)
                                {
                                    await Telegram.SendTextMessageAsync(chatId, restaurant.Info, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                                    await Telegram.SendLocationAsync(chatId, restaurant.Latitude, restaurant.Longitude, replyMarkup : InlineKeyBoardManager.TaxiKeyboard());
                                }
                            }
                            else
                            {
                                await Telegram.SendTextMessageAsync(chatId, responce.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);
                            }

                            break;
                        }
                        }
                    }
                }
                else if (update.Type == UpdateType.CallbackQueryUpdate)
                {
                    chatId = update.CallbackQuery.Message.Chat.Id;
                    var parser = ParserChoser.GetParser(chatId, bot);

                    var cmd = parser.ParseForCommand(update);

                    switch (cmd)
                    {
                    case CmdTypes.AddToOrder:
                    {
                        var response = bot.OrderMeal(chatId, update.CallbackQuery.Data);

                        if (response.IsOk)
                        {
                            var keyboard = InlineKeyBoardManager.RemarkKeyBoard(response.Modificators);
                            await Telegram.SendTextMessageAsync(chatId, response.ResponceText, parseMode : ParseMode.Html, replyMarkup : keyboard);
                        }
                        else
                        {
                            await Telegram.SendTextMessageAsync(chatId, response.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);
                        }
                        break;
                    }

                    case CmdTypes.AddMod:
                    {
                        var response = bot.AddModificator(chatId, update.CallbackQuery.Data);

                        if (response.IsOk)
                        {
                            if (response.Modificators.Any())
                            {
                                var keyboard = InlineKeyBoardManager.RemarkKeyBoard(response.Modificators);
                                await Telegram.EditMessageTextAsync(chatId, update.CallbackQuery.Message.MessageId, response.ResponceText, parseMode : ParseMode.Html, replyMarkup : keyboard);
                            }
                            else
                            {
                                await Telegram.EditMessageTextAsync(chatId, update.CallbackQuery.Message.MessageId, response.ResponceText, parseMode : ParseMode.Html);
                            }
                        }
                        else
                        {
                            await Telegram.SendTextMessageAsync(chatId, response.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);
                        }
                        break;
                    }

                    case CmdTypes.BackToMenu:
                    {
                        var response = bot.ShowMenuCategories(chatId);

                        await Telegram.SendTextMessageAsync(chatId, response.ResponceText, parseMode : ParseMode.Html, replyMarkup : new MenuCategorySessionParser(bot.GetMenuCategoriesByChatId(chatId)).Keyboard);

                        break;
                    }

                    case CmdTypes.DishDetails:
                    {
                        var response = bot.GetMenuItem(chatId, update.CallbackQuery.Data);

                        if (response.NeedInlineKeyboard)
                        {
                            var keyboard = InlineKeyBoardManager.DescriptionKeyBoard(response.DishId);

                            await Telegram.SendTextMessageAsync(chatId, response.ResponceText, parseMode : ParseMode.Html, replyMarkup : keyboard);
                        }
                        else
                        {
                            await Telegram.SendTextMessageAsync(chatId, response.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);
                        }
                        break;
                    }

                    case CmdTypes.ArrivingTime:
                    {
                        var response = bot.ArrivingTime(chatId);

                        if (response.OkToChangeTime)
                        {
                            await Telegram.EditMessageTextAsync(chatId, update.CallbackQuery.Message.MessageId, response.ResponceText, parseMode : ParseMode.Html, replyMarkup : InlineKeyBoardManager.GetByCmnd(CmdTypes.ArrivingTime));
                        }
                        else
                        {
                            await Telegram.SendTextMessageAsync(chatId, response.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);
                        }
                        break;
                    }

                    case CmdTypes.TimeInput:
                    {
                        var timeResp = bot.ChangeArrivingTime(chatId, update.CallbackQuery.Data);

                        if (!timeResp.OkToChangeTime)
                        {
                            await Telegram.SendTextMessageAsync(chatId, timeResp.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);
                        }
                        else
                        {
                            var orderResp = bot.ShowCart(chatId);
                            if (orderResp.NeedInlineKeeyboard)
                            {
                                var keyboard = InlineKeyBoardManager.GetByCmnd(CmdTypes.Cart);

                                await Telegram.EditMessageTextAsync(chatId, update.CallbackQuery.Message.MessageId, orderResp.ResponceText, parseMode : ParseMode.Html, replyMarkup : keyboard);
                            }
                            else
                            {
                                await Telegram.SendTextMessageAsync(chatId, orderResp.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);
                            }
                        }

                        break;
                    }

                    case CmdTypes.CreateInvoice:
                    {
                        var response = bot.CreateInvoice(chatId);

                        if (response.InvoiceReady)
                        {
                            var prices = new LabeledPrice[1];
                            prices[0] = new LabeledPrice {
                                Amount = response.Invoice.SummInCents, Label = "Итого"
                            };

                            await Telegram.SendInvoiceAsync(
                                chatId, response.Invoice.Title, response.Invoice.Description, response.Invoice.Id.ToString(), bot.PaymentToken, "startP", response.Invoice.Currency, prices);
                        }
                        else
                        {
                            await Telegram.SendTextMessageAsync(chatId, response.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);
                        }
                        break;
                    }

                    case CmdTypes.PayCash:
                    {
                        var response = bot.PayCash(chatId);

                        await Telegram.SendTextMessageAsync(chatId, response.ResponceText, parseMode : ParseMode.Html, replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                        break;
                    }

                    case CmdTypes.Unknown:
                    {
                        await Telegram.SendTextMessageAsync(
                            chatId,
                            "Извините, не понял вашей просьбы.",
                            parseMode : ParseMode.Html,
                            replyMarkup : ParserChoser.GetParser(chatId, bot).Keyboard);

                        break;
                    }
                    }
                }
                else if (update.Type == UpdateType.PreCheckoutQueryUpdate)
                {
                    chatId = update.PreCheckoutQuery.From.Id;
                    var preCheck = update.PreCheckoutQuery;

                    var response = bot.PreCheckout(chatId, preCheck.TotalAmount, preCheck.Currency, preCheck.InvoicePayload);

                    if (!response.IsError)
                    {
                        await Telegram.AnswerPreCheckoutQueryAsync(preCheck.Id, true);
                    }
                    else
                    {
                        await Telegram.AnswerPreCheckoutQueryAsync(preCheck.Id, false, errorMessage : response.ResponceText);
                    }
                }
            }
            catch (Exception ex)
            {
                new LogWriter().WriteException(ex.Message);

                if (chatId != 0 && Telegram != null)
                {
                    if (ex.Message.Contains("429"))
                    {
                        var excResponce = Responce.UnknownResponce(chatId);
                        await Telegram.SendTextMessageAsync(
                            chatId,
                            "К сожалению Телеграм не позволяет нам так часто вам отвечать 😔, подождите пару минут пожалуйста.",
                            parseMode : ParseMode.Html);
                    }
                    else
                    {
                        var excResponce = Responce.UnknownResponce(chatId);
                        await Telegram.SendTextMessageAsync(
                            chatId,
                            excResponce.ResponceText,
                            parseMode : ParseMode.Html);
                    }
                }
            }
            return(Ok());
        }