Пример #1
0
        public static async void Ask(Question question, Message message, TelegramBotClient Bot)
        {
            using IServiceScope scope = _provider.CreateScope();
            var _context = scope.ServiceProvider.GetRequiredService <ApplicationDbContext>();

            var chatId         = message.Chat.Id;
            var userId         = message.From.Id;
            var questionToSend = _context.Questions.Where(c => c.Id == question.Id).FirstOrDefault();

            await Bot.SendTextMessageAsync(
                chatId : chatId,
                text : questionToSend.Text
                );

            var history = new QuestionTreeHistory()
            {
                Id         = Guid.NewGuid(),
                CreateDate = DateTimeOffset.Now,
                QuestionId = question.Id,
                // ScenarioId = question.ScenarioId,
                UserId = userId
            };

            _context.Add(history);
            _context.SaveChanges();
        }
Пример #2
0
        private static void AddValue(Update update, ApplicationDbContext _context, QuestionTreeHistory lastAskedQuestionOfScenario, Question question, Param param, ParamValue paramValue)
        {
            var paramValueId = Guid.NewGuid();

            if (param.HasUnit)
            {
                if (paramValue != null && !string.IsNullOrEmpty(paramValue.Value))
                {
                    paramValue.Unit = update.Message.Text;
                }
            }

            if (paramValue == null)
            {
                var paramVlaue = new ParamValue()
                {
                    Id             = paramValueId,
                    ParamId        = param.Id,
                    QuestionId     = question.Id,
                    Value          = update.Message.Text,
                    MedcinId       = lastAskedQuestionOfScenario.MedcinId,
                    DateTimeCreate = DateTimeOffset.Now
                };
                _context.Add(paramVlaue);

                var medcinParam = new MedcinParam()
                {
                    Id            = Guid.NewGuid(),
                    MedcinId      = lastAskedQuestionOfScenario.MedcinId,
                    ParamsValueId = paramValueId
                };

                _context.Add(medcinParam);
            }
        }
Пример #3
0
        //private static IServiceProvider _provider;

        //public AddMedcine(IServiceProvider serviceProvider)
        //{
        //    _provider = serviceProvider;
        //}


        public static async Task NewMedcine(Update update, TelegramBotClient Bot, IServiceProvider _provider)
        {
            using IServiceScope scope = _provider.CreateScope();
            var _context = scope.ServiceProvider.GetRequiredService <ApplicationDbContext>();
            var message  = update.Message;

            var scenario = new Scenario()
            {
                Id       = Guid.NewGuid(),
                Type     = ScenarioType.AddMedcine,
                Finished = false,
                //QuestionTreeId = Guid.Parse("guid добавления лекарства"),
                StartDate = DateTimeOffset.Now,
                UserId    = message.From.Id
            };

            _context.Add(scenario);

            var medcine = new Medcin()
            {
                Id = Guid.NewGuid()
            };

            _context.Add(medcine);

            var firstQuestion = _context.Questions
                                .Include(c => c.QuestionTree)
                                .Where(c => c.IsFirst == true)
                                .Where(c => c.QuestionTree.Type == QuestionTreeType.AddMedcine)
                                .FirstOrDefault();

            await Bot.SendTextMessageAsync(
                chatId : message.Chat.Id,
                text : firstQuestion.Text
                );

            var history = new QuestionTreeHistory()
            {
                Id         = Guid.NewGuid(),
                CreateDate = DateTimeOffset.Now,
                QuestionId = firstQuestion.Id,
                //QuestionTreeId = scenario.QuestionTreeId,
                UserId     = message.From.Id,
                MedcinId   = medcine.Id,
                ScenarioId = scenario.Id
            };

            _context.Add(history);
            _context.SaveChanges();
        }
Пример #4
0
        private static async Task AskNextQuestion(Guid scenarioId, Guid medcinId, Update update, Guid nextQuestionId, TelegramBotClient Bot, ApplicationDbContext _context)
        {
            var chatId = update.Message.Chat.Id;
            var userId = update.Message.From.Id;

            var question = _context.Questions
                           .Where(c => c.Id == nextQuestionId)
                           .FirstOrDefault();

            if (/*question.Type == QuestionType.Parametr & */ question.ScenarioType == QuestionScenarioType.Simple)
            {
                if (question.ResponseType == ResponseType.Text)
                {
                    await Bot.SendTextMessageAsync(
                        chatId : chatId,
                        text : question.Text
                        );
                }
                else
                {
                    var answers = JsonConvert.DeserializeObject <List <string> >(question.Answers.ToString());

                    var keys = new KeyboardButton[answers.Count()];

                    for (var i = 0; i < answers.Count(); i++)
                    {
                        keys[i] = new KeyboardButton(answers[i]);
                    }

                    var replyKeyboardMarkup = new ReplyKeyboardMarkup(keys, true, true);

                    await Bot.SendTextMessageAsync(
                        chatId : chatId,
                        text : question.Text,
                        replyMarkup : replyKeyboardMarkup);
                }
            }
            else if (question.ScenarioType == QuestionScenarioType.Complex)
            {
                var answers = JsonConvert.DeserializeObject <List <string> >(question.Answers.ToString());

                var keys = new List <KeyboardButton>();

                foreach (var answer in answers)
                {
                    var key = new KeyboardButton(answer);
                    keys.Add(key);
                }
                var replyKeyboardMarkup = new ReplyKeyboardMarkup(keys, true, true);

                await Bot.SendTextMessageAsync(
                    chatId : chatId,
                    text : "Choose",
                    replyMarkup : replyKeyboardMarkup);
            }

            var history = new QuestionTreeHistory()
            {
                Id         = Guid.NewGuid(),
                CreateDate = DateTimeOffset.Now,
                MedcinId   = medcinId,
                ScenarioId = scenarioId,
                QuestionId = question.Id,
                UserId     = userId
            };

            _context.Add(history);
            _context.SaveChanges();
        }