예제 #1
0
        public async override void Execute(MessageEventArgs e)
        {
            User user = Program.GetCurrentUser(e);

            try
            {
                string text  = "";
                int    index = e.Message.Text.IndexOf(" ");
                if (index == -1)
                {
                    text = "Для перегляду питань оберить тест за номером (/testlist 'id')\n";
                    for (int i = 0; i < Program.testlist.Count; i++)
                    {
                        text += $"{i}: {Program.testlist[i].Text}\n";
                    }
                }
                else
                {
                    int id = Int32.Parse(e.Message.Text.Remove(0, Name.Length));
                    text = $"Тест {id}: {Program.testlist[id].Text}\n";
                    for (int i = 0; i < Program.testlist[id].questions.Count; i++)
                    {
                        text += "----------------------------\n";
                        Question question = Program.testlist[id].questions[i];
                        //Check question type
                        if (question.GetType() == typeof(TestQuestion))
                        {
                            TestQuestion q = (TestQuestion)question;
                            text += $"Питання {i + 1}, тип 'Тест':\n{q.text}\n";
                            text += $"Варіанти відповіді: \n";
                            foreach (string s in q.variants)
                            {
                                text += s + "\n";
                            }
                            text += $"Правильна відповідь: {q.answer}\n";
                            text += $"Кількіст стовпців: {q.columns}\n";
                            text += $"Кількість балів: {q.points}\n";
                        }
                        else if (question.GetType() == typeof(FreeQuestion))
                        {
                            FreeQuestion q = (FreeQuestion)question;
                            text += $"Питання {i + 1}, тип 'Вільна відповідь':\n{q.text}\n";
                            text += $"Правильна відповідь: {q.answer}\n";
                            text += $"Кількість балів: {q.points}\n";
                        }
                        else if (question.GetType() == typeof(ConformityQuestion))
                        {
                            ConformityQuestion q = (ConformityQuestion)question;
                            text += $"Питання {i + 1}, тип 'Відповідність':\n{q.text}\n";
                            text += $"Правильна відповідь: {q.answer}\n";
                            text += $"Кількість балів: {q.points}\n";
                        }
                    }
                }
                await Program.bot.SendTextMessageAsync(user.id, text);
            }
            catch (Exception exception)
            {
                await Program.bot.SendTextMessageAsync(user.id, $"Виникла помилка при виконанні програми. Текст помилки: '{exception.Message}'");
            }
        }
예제 #2
0
        public async override void Execute(MessageEventArgs e)
        {
            User user = Program.GetCurrentUser(e);

            if (!user.testcreation)
            {
                int index = e.Message.Text.IndexOf(" ");
                if (index == -1)
                {
                    await Program.bot.SendTextMessageAsync(user.id, "Використовуйте команду наступним чином: /addtest 'Правило нового тесту(текст)'");
                }
                else
                {
                    user.testcreation = true;
                    test.Text         = e.Message.Text.Substring(index + 1);
                    y = e;
                    string[]             arr      = { "Тест", "Відповідність", "Вільна відповідь", "Закінчити створення" };
                    InlineKeyboardMarkup keyboard = Program.GetInlineKeyboard(arr, 2);
                    await Program.bot.SendTextMessageAsync(user.id, "Виберіть тип нового питання", replyMarkup : keyboard);
                }
            }
            else if (callback != null)
            {
                try
                {
                    switch (callback)
                    {
                    case "Тест":
                        switch (stage)
                        {
                        case 1:
                            await Program.bot.SendTextMessageAsync(user.id, "Введіть текст запитання");

                            stage++; break;

                        case 2:
                            text = e.Message.Text;
                            await Program.bot.SendTextMessageAsync(user.id, "Введіть варіванти відповідей(використовуйте ',', '.', табуляцію або нову стрічку для розділення варіантів)");

                            stage++; break;

                        case 3:
                            variants = e.Message.Text.Split(Program.delimiterChars);
                            for (int i = 0; i < variants.Length; i++)
                            {
                                if (variants[i].IndexOf(' ') == 0)
                                {
                                    variants[i] = variants[i].Remove(0, 1);
                                }
                            }
                            await Program.bot.SendTextMessageAsync(user.id, "Введіть кількість стовпчиків у яких будуть відображатися варіанти");

                            stage++; break;

                        case 4:
                            columns = Int32.Parse(e.Message.Text);
                            await Program.bot.SendTextMessageAsync(user.id, "Введіть правильну відповідь(має повністю співпадати з одним із варіантів)");

                            stage++; break;

                        case 5:
                            answer = e.Message.Text;
                            await Program.bot.SendTextMessageAsync(user.id, "Введіть кількість балів за це запитання");

                            stage++; break;

                        case 6:
                            points = Int32.Parse(e.Message.Text);
                            if (Program.ExecuteMySql($"INSERT INTO Questions (Type, Text, Points, Variants, Answer, Columns) VALUES (1, '{text}', {points}, '{string.Join(";", variants)}', '{answer}', {columns})"))
                            {
                                TestQuestion q = new TestQuestion(text, points, variants, columns, answer);
                                test.questions.Add(q);
                                Program.questions.Add(q);
                                questions.Add(Program.questions.IndexOf(q) + 1);
                                await Program.bot.SendTextMessageAsync(user.id, "Питання створено.");

                                stage    = 0;
                                callback = null;
                                Execute(e); break;
                            }
                            else
                            {
                                await Program.bot.SendTextMessageAsync(user.id, $"Виникла помилка при внесенні змін у БД. Будь ласка, зверніться до технічного адміністратора!");

                                break;
                            }

                        default: break;
                        }
                        break;

                    case "Відповідність":
                        switch (stage)
                        {
                        case 1:
                            await Program.bot.SendTextMessageAsync(user.id, "Введіть текст запитання");

                            stage++; break;

                        case 2:
                            text = e.Message.Text;
                            await Program.bot.SendTextMessageAsync(user.id, "Введіть правильну відповідь");

                            stage++; break;

                        case 3:
                            answer = e.Message.Text;
                            await Program.bot.SendTextMessageAsync(user.id, "Введіть кількість балів за це запитання");

                            stage++; break;

                        case 4:
                            points = Int32.Parse(e.Message.Text);
                            if (Program.ExecuteMySql($"INSERT INTO Questions (Type, Text, Points, Answer) VALUES (3, '{text}', {points}, '{answer}')"))
                            {
                                ConformityQuestion q = new ConformityQuestion(text, points, answer);
                                test.questions.Add(q);
                                Program.questions.Add(q);
                                questions.Add(Program.questions.IndexOf(q) + 1);
                                await Program.bot.SendTextMessageAsync(user.id, "Питання створено.");

                                stage    = 0;
                                callback = null;
                                Execute(e); break;
                            }
                            else
                            {
                                await Program.bot.SendTextMessageAsync(user.id, $"Виникла помилка при внесенні змін у БД. Будь ласка, зверніться до технічного адміністратора!");

                                break;
                            }

                        default: break;
                        }
                        break;

                    case "Вільна відповідь":
                        switch (stage)
                        {
                        case 1:
                            await Program.bot.SendTextMessageAsync(user.id, "Введіть текст запитання");

                            stage++; break;

                        case 2:
                            text = e.Message.Text;
                            await Program.bot.SendTextMessageAsync(user.id, "Введіть правильну відповідь");

                            stage++; break;

                        case 3:
                            answer = e.Message.Text;
                            await Program.bot.SendTextMessageAsync(user.id, "Введіть кількість балів за це запитання");

                            stage++; break;

                        case 4:
                            points = Int32.Parse(e.Message.Text);
                            if (Program.ExecuteMySql($"INSERT INTO Questions (Type, Text, Points, Answer) VALUES (2, '{text}', {points}, '{answer}')"))
                            {
                                FreeQuestion q = new FreeQuestion(text, points, answer);
                                test.questions.Add(q);
                                Program.questions.Add(q);
                                questions.Add(Program.questions.IndexOf(q) + 1);
                                await Program.bot.SendTextMessageAsync(user.id, "Питання створено.");

                                stage    = 0;
                                callback = null;
                                Execute(e); break;
                            }
                            else
                            {
                                await Program.bot.SendTextMessageAsync(user.id, $"Виникла помилка при внесенні змін у БД. Будь ласка, зверніться до технічного адміністратора!");

                                break;
                            }

                        default: break;
                        }
                        break;

                    case "Закінчити створення":
                        user.testcreation = false;
                        stage             = 0;
                        if (Program.ExecuteMySql($"INSERT INTO Tests (Rule, Questions) VALUES ('{test.Text}', '{string.Join(';',questions)}')"))
                        {
                            Program.testlist.Add(new Test(test));
                            test = null;
                            SaveSystem.SaveTests();
                            await Program.bot.SendTextMessageAsync(user.id, "Ви успішно закінчили створення нового тесту");

                            break;
                        }
                        else
                        {
                            await Program.bot.SendTextMessageAsync(user.id, $"Виникла помилка при внесенні змін у БД. Будь ласка, зверніться до технічного адміністратора!");

                            break;
                        }

                    default: break;
                    }
                }
                catch (Exception exception)
                {
                    user.testcreation = false;
                    stage             = 0;
                    test = null;
                    await Program.bot.SendTextMessageAsync(user.id, $"Виникла помилка при створенні тесту. Вожливо ви ввели невірні дані. Помилка:{exception.Message}");
                }
            }
            else
            {
                string[]             arr      = { "Тест", "Відповідність", "Вільна відповідь", "Закінчити створення" };
                InlineKeyboardMarkup keyboard = Program.GetInlineKeyboard(arr, 2);
                await Program.bot.SendTextMessageAsync(user.id, "Виберіть тип нового питання", replyMarkup : keyboard);
            }
        }