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); } } } }
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); } }
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()); }
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); } }