Example #1
0
        public static void Donate(Message msg, string[] args)
        {
            if (msg.Chat.Type != ChatType.Private)
            {
                msg.Reply(GetTranslation("DonatePrivateOnly", GetLanguage(msg.From.Id)));
                return;
            }
            var argList = msg.Text.Split(' ');
            int money   = 0;

            if (argList.Count() <= 1)
            {
                msg.Reply(GetTranslation("DonateInputValue", GetLanguage(msg.From.Id)));
                return;
            }
            else
            {
                if (!int.TryParse(argList[1], out money))
                {
                    msg.Reply(GetTranslation("DonateInputValue", GetLanguage(msg.From.Id)));
                    return;
                }
                else
                {
                    if (money < 10 || money > 100000)
                    {
                        msg.Reply(GetTranslation("DonateWrongValue", GetLanguage(msg.From.Id)));
                        return;
                    }
                    else
                    {
                        var providerToken  = Constants.DonationLiveToken;
                        var title          = GetTranslation("DonateTitle", GetLanguage(msg.From.Id));
                        var description    = GetTranslation("DonateDescription", GetLanguage(msg.From.Id), money);
                        var payload        = Constants.DonationPayload + msg.From.Id.ToString();
                        var startParameter = "donate";
                        var currency       = "HKD";
                        var prices         = new LabeledPrice[1] {
                            new LabeledPrice {
                                Label  = GetTranslation("Donation", GetLanguage(msg.From.Id)),
                                Amount = money * 100
                            }
                        };
                        Bot.Api.SendInvoiceAsync(msg.From.Id, title, description, payload, providerToken,
                                                 startParameter, currency, prices);
                    }
                }
            }
        }
Example #2
0
        public void Action(Update update, API api, ref object state)
        {
            var chatId = update?.Message != null?update.Message.Chat.Id.ToString() : (update?.CallbackQuery != null ? update.CallbackQuery.Message.Chat.Id.ToString() : null);

            if (update.Message?.Entities != null)
            {
                var com = update.Message.Entities.FirstOrDefault(x => x.Type == MessageEntity.EntityType.bot_command);
                if (com != null && update.Message.Text == "/start")
                {
                    api.SendMessage(chatId, $"Привет, {update.Message.From.FirstName}, я бот Антон я создан для того, чтобы предложить вам некоторые товары");
                    state = "start";
                }
            }
            if ((string)state == "null")
            {
            }
            else if ((string)state == "start")
            {
                PrintMenu(update, api, chatId);
                state = "chouse";
            }
            else if ((string)state == "chouse")
            {
                string param;
                if (update.CallbackQuery != null)
                {
                    api.AnswerCallbackQuery(update.CallbackQuery.Id);
                    if (update.CallbackQuery.Data == "1")
                    {
                        state = "chose tovar";
                        var price1 = new LabeledPrice[] { new LabeledPrice()
                                                          {
                                                              Label = "Масленка PREMIUM", Amount = 6000
                                                          }, new LabeledPrice()
                                                          {
                                                              Amount = 20000, Label = "Масло элитное"
                                                          } };
                        var price2 = new LabeledPrice[] { new LabeledPrice()
                                                          {
                                                              Label = "Кекнутая копия игры", Amount = 66666
                                                          }, new LabeledPrice()
                                                          {
                                                              Amount = -7000, Label = "Новогодняя скидка"
                                                          } };
                        api.SendInvoice(chatId, "Масленка PREMIUM + масло в подарок", "Революционная масленка с порцией непревзайденного элитного масла", "test", "1", "RUB", price1,
                                        "http://belive.ru/wp-content/uploads/2016/12/slivochnoe-maslo-hranit.jpg");
                        api.SendInvoice(chatId, "Фоллаут 4", "Если вы хотите замочить пару сотен мутантов, взорвать институт и провести 260 лет игры в морозильнике, то эта игра для вас!", "test", "2", "RUB", price2,
                                        "https://cdn.wallpapersafari.com/26/71/LhpB9P.jpg");
                    }
                    else
                    {
                        api.SendMessage(chatId, $"Напишите пожалуйста свой отзыв!");
                        state = "opinion";
                    }
                }
                else if (!update.HasCommand("*", out param) && update.Message != null)
                {
                    api.SendMessage(chatId, $"{update.Message.From.FirstName}, Я вас не понимаю, выберете действие из предложеных");
                }
            }
            else if ((string)state == "chose tovar")
            {
                if (update?.Message?.SuccessfulPayment != null)
                {
                    api.SendMessage(chatId, "Благодарим за покупку)))");
                }
                if (update.CallbackQuery != null)
                {
                    if (update.CallbackQuery.Data == "1")
                    {
                        state = "chouse";
                        PrintMenu(update, api, chatId);
                    }
                    else
                    {
                        api.SendMessage(chatId, "Тогда продолжайте покупки)))");
                    }
                    api.AnswerCallbackQuery(update.CallbackQuery.Id);
                }

                if (update.Message != null)
                {
                    api.SendMessage(chatId, "Хотите перейти на шаг назад?", null,
                                    new InlineKeyboardMarkup()
                    {
                        inline_keyboard = new InlineKeyboardButton[1, 2]
                        {
                            { new InlineKeyboardButton("да", "1"), new InlineKeyboardButton("нет", "0") }
                        }
                    });
                }
            }
            else if ((string)state == "opinion")
            {
                state = "start";
                api.SendMessage(chatId, "Спасибо! Выш отзыв очень важен для нас!))");
                api.SendMessage(chatId, "Чтобы продолжить отправьте любое сообщение....");
                SaveOpinion(chatId, update.Message.From.FirstName, $"[{System.DateTime.Now.ToLongDateString()}] " + update.Message.Text);
            }
        }
Example #3
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());
        }
Example #4
0
        public TelegramDebitCardInvoice CreateInvoice()
        {
            db = new MarketBotDbContext();

            if (this.Order != null)
            {
                this.Order.OrderProduct = db.OrderProduct.Where(p => p.OrderId == Order.Id).Include(p => p.Product).Include(p => p.Price).ToList();
            }

            if (this.Order != null && this.Order.OrderAddress == null)
            {
                this.Order.OrderAddress = db.OrderAddress.Where(a => a.OrderId == Order.Id).FirstOrDefault();
            }

            if (this.Order != null && this.Order.OrderAddress == null)
            {
                this.Order.Invoice = db.Invoice.Where(a => a.Id == Order.InvoiceId).FirstOrDefault();
            }

            if (this.BotInfo.Configuration.Currency == null)
            {
                this.BotInfo.Configuration.Currency = db.Currency.Find(this.BotInfo.Configuration.CurrencyId);
            }

            this.PaymentTypeConfig = db.PaymentTypeConfig.Where(p => p.PaymentId == this.Order.Invoice.PaymentTypeId).FirstOrDefault();

            var group = this.Order.OrderProduct.GroupBy(o => o.Product).ToList();

            if (PaymentTypeConfig != null)
            {
                if (this.Order.OrderAddress == null)
                {
                    labeledPrice = new LabeledPrice[group.Count];
                }

                else
                {
                    labeledPrice = new LabeledPrice[group.Count + 1];
                    labeledPrice[labeledPrice.Length - 1]        = new LabeledPrice();
                    labeledPrice[labeledPrice.Length - 1].Amount = Convert.ToInt32(this.Order.OrderAddress.ShipPriceValue * 100);
                    labeledPrice[labeledPrice.Length - 1].Label  = "Доставка";
                }

                int counter = 0;

                foreach (var g in group)
                {
                    if (g.Key.Unit == null)
                    {
                        g.Key.Unit = db.Units.Find(g.Key.UnitId);
                    }

                    labeledPrice[counter]        = new LabeledPrice();
                    labeledPrice[counter].Amount = Convert.ToInt32(this.Order.PositionPrice(g.Key.Id) * 100);
                    labeledPrice[counter].Label  = g.Key.Name + " x " + this.Order.PositionCount(g.Key.Id).ToString() + "  " + g.Key.Unit.ShortName;
                    counter++;
                }

                this.Title         = "Заказ №" + this.Order.Number.ToString();
                this.Desc          = "Оплатите заказ с помощью банковской карты, через Telegram";
                this.PayLoad       = this.Order.Id.ToString();
                this.StartParametr = "pay";
                this.ProviderToken = PaymentTypeConfig.Pass;
                this.CurrencyCode  = this.BotInfo.Configuration.Currency.Code;

                return(this);
            }

            else
            {
                return(null);
            }
        }