Пример #1
0
        public ActionResult Settings()
        {
            var settingRepo = new SettingRepo(BotInstanceId, Db);
            var model       = settingRepo.Load <Setting>();

            return(View(model));
        }
Пример #2
0
        public void Update(Update update, SubscriberRecord subscriberRecord)
        {
            if (update.Type == UpdateType.CallbackQuery)
            {
                HandleCallbackQuery(update);
                return;
            }

            if (update.Type != UpdateType.Message)
            {
                return;
            }

            var isAdmin = StoreAdminRepo.GetAdmin(subscriberRecord.ChatId) != null;

            switch (update.Message.Text)
            {
            case StateManager.Keyboards.StartCommand:
                TelegramClient.SendTextMessageAsync(subscriberRecord.ChatId, SettingRepo.Load <Setting>().WelcomeMessage, parseMode: ParseMode.Markdown, replyMarkup: isAdmin ? StateManager.Keyboards.StartAdmin : StateManager.Keyboards.StartUser);
                break;

            case StateManager.Keyboards.NewProductCommand:
                if (!isAdmin)
                {
                    TelegramClient.SendTextMessageAsync(update.Message.Chat.Id, "متاسفانه مجوز اجرای این دستور را ندارید.");
                    return;
                }

                if (!NewProductStates.TryGetValue(subscriberRecord.ChatId, out _))
                {
                    NewProductStates.Add(subscriberRecord.ChatId, null);
                }

                NewProductStates[subscriberRecord.ChatId] = new NewProductInState();
                NewProductStates[subscriberRecord.ChatId].ProductRecord.BotInstanceRecordId = BotInstanceId;

                HandleNewProductMessage(update, subscriberRecord);
                break;

            case StateManager.Keyboards.ListProductsCommand:
                using (var db = Db)
                {
                    var products = db.StoreProductRecords.Include(x => x.ImageFileRecords).AsNoTracking().Where(x => x.BotInstanceRecordId == BotInstanceId);

                    if (!products.Any())
                    {
                        TelegramClient.SendTextMessageAsync(subscriberRecord.ChatId, "محصولی برای نمایش وجود ندارد.");
                        return;
                    }

                    var i = 0;
                    var productDetailTemplate = SettingRepo.Load <Setting>().ProductDetailTemplate;

                    foreach (var product in products)
                    {
                        var detail = productDetailTemplate
                                     .Replace("[Index]", (++i).ToString())
                                     .Replace("[Name]", product.Name)
                                     .Replace("[Code]", product.Code)
                                     .Replace("[Price]", product.Price.ToCurrency())
                                     .Replace("[Description]", product.Description);

                        var buttons = new List <List <InlineKeyboardButton> >
                        {
                            new List <InlineKeyboardButton>
                            {
                                InlineKeyboardButton.WithCallbackData($"تصاویر ({product.ImageFileRecords.Count})", "images:" + product.Id)
                            }
                        };

                        if (isAdmin)
                        {
                            buttons.Add(GetAdminRow(product));
                        }

                        Task.Delay(i * 500)
                        .ContinueWith(task =>
                        {
                            TelegramClient.SendPhotoAsync(
                                subscriberRecord.ChatId,
                                product.ImageFileRecords.First().ImageFileId,
                                detail,
                                parseMode: ParseMode.Markdown,
                                replyMarkup: new InlineKeyboardMarkup(buttons));
                        })
                        .ContinueWith(task =>
                        {
                            Logger.LogError("Delayed Message Exception: {Message}", task.Exception?.GetBaseException().Message);
                        }, TaskContinuationOptions.OnlyOnFaulted);
                    }
                }
                break;

            case StateManager.Keyboards.CancelCommand:
                if (NewProductStates.TryGetValue(subscriberRecord.ChatId, out _))
                {
                    NewProductStates.Remove(subscriberRecord.ChatId);
                }

                TelegramClient.SendTextMessageAsync(subscriberRecord.ChatId, "عملیات فعلی لغو شد", replyMarkup: StateManager.Keyboards.StartAdmin);
                break;

            default:
                if (NewProductStates.TryGetValue(subscriberRecord.ChatId, out _))
                {
                    if (!isAdmin)
                    {
                        TelegramClient.SendTextMessageAsync(update.Message.Chat.Id, "متاسفانه مجوز اجرای این دستور را ندارید.");
                        return;
                    }

                    HandleNewProductMessage(update, subscriberRecord);
                }
                else
                {
                    TelegramClient.SendTextMessageAsync(subscriberRecord.ChatId, "متوجه پیام نشدم..");
                }
                break;
            }
        }