private async Task <Teachers> ConfirmTeacherPasswordAsync(string key)
        {
            if (await GoogleSpreadsheetController.ConnectToSheetsAsync() == true)
            {
                GoogleSpreadsheetController.TeacherInformation teacherInformation = new GoogleSpreadsheetController.TeacherInformation();
                var datas = await teacherInformation.GetSheetDataAsync().
                            ContinueWith <IList <IList <object> > >(t => teacherInformation.GetTeacherInformation().Result);

                foreach (var data in datas)
                {
                    if (data.Count == 4 && key == data[1].ToString())
                    {
                        var teacher = new Teachers()
                        {
                            FullName = data[2].ToString(),
                            Subjects = data[3].ToString()
                        };
                        return(teacher);
                    }
                }
                User.TypeUser = await ConfirmUserRoleAsync(key);

                if (User.TypeUser != null && User.TypeUser == TypeUser.Pupil.ToString()) // if pupil
                {
                    User.State = RegistrationStateMachine.EnterName.ToString();
                    await BalDbController.ChangeUserStateAsync(User.State, User.ChatId)
                    .ContinueWith(_ => BalDbController.AddPupilAsync(User.ChatId).Wait())
                    .ContinueWith(_ => BalDbController.UpdateUserDataAsync(User).Wait());
                }
            }
            return(null);
        }
Пример #2
0
        public static async Task <string[]> GenerateLessonMessage(UserInfo user, GoogleSpreadsheetController.SchedulerSheet schedulerSheet, ISchedulerController scheduler, string day, int lesson)
        {
            await schedulerSheet.GetSheetDataAsync();

            var formattingData =
                await scheduler.FormatingDataFromGSAsync(scheduler : await schedulerSheet.GetScheduler());

            string answer       = " Невдалось знайти урок.";
            string callBackData = default;

            if (user.TypeUser == TypeUser.Teacher.ToString())
            {
                var teacherInfo = await BalDbController.GetTeacherInformationAsync(user.ChatId);

                var schedulerDay = await scheduler.GetConcreteDayInformationAsync(
                    scheduler : await scheduler.GetConcreteWeekInformationAsync(teacherInfo.Teachers.First().FullName),
                    dayOfWeek : day);

                string title       = $"{new SendPupilsMessage().Name}{lesson} урок у {ConverteEngMonthToUkr(day, LanguageCases.Rodovyy).Result}:\n";
                int    pointLesson = lesson * 3;
                string @class      = schedulerDay[pointLesson];
                callBackData = @class;
                string subject    = schedulerDay[pointLesson + 1];
                string classRoom  = schedulerDay[pointLesson + 2];
                string timeLesson = timeLessons[lesson];

                string body = $"🕐 Час: {timeLesson}\n" + $"📚 Предмет: {subject}\n" + $"💡 Клас: {@class}\n" + $"🏴 Кабінет: {classRoom}\n";
                answer = title + body;
            }

            if (user.TypeUser == TypeUser.Pupil.ToString())
            {
                var pupilInfo = await BalDbController.GetPupilInformationAsync(user.ChatId);

                var schedulerDay = await scheduler.GetConcreteDayInformationAsync(
                    scheduler : await scheduler.GetConcreteWeekInformationAsync(pupilInfo.Pupils.First().Class),
                    dayOfWeek : day);

                string title       = $"{new SendTeacherMessage().Name}{lesson} урок у {ConverteEngMonthToUkr(day, LanguageCases.Rodovyy).Result}:\n";
                int    pointLesson = lesson * 3;
                string subject     = schedulerDay[pointLesson];
                string nameTeacher = schedulerDay[pointLesson + 1];
                callBackData = nameTeacher;
                string classRoom  = schedulerDay[pointLesson + 2];
                string timeLesson = timeLessons[lesson];

                string body = $"🕐 Час: {timeLesson}\n" + $"📚 Предмет: {subject}\n" + $"💡 Вчитель: {nameTeacher}\n" + $"🏴 Кабінет: {classRoom}\n";
                answer = title + body;
            }

            return(new[] { answer, callBackData });
        }
        public override async Task <dynamic> Execute(Message message, TelegramBotClient client, UserInfo userInformation)
        {
            userInformation.TypeUser = TypeUser.Guest.ToString();
            userInformation.State    = RegistrationStateMachine.None.ToString();

            await BalDbController.UpdateUserDataAsync(userInformation);

            await client.SendTextMessageAsync(userInformation.ChatId,
                                              text : $"Ви увійшли як гість. Щоб зареєструватись - відправте команду {RegistrationCommandText}",
                                              replyMarkup : new ReplyKeyboardRemove());

            await Task.Run(() => new MainMenuCommand().Execute(null, client, userInformation)); // go to main menu

            return(true);
        }
Пример #4
0
        internal override async Task Execute(CallbackQuery message, TelegramBotClient client, UserInfo userInformation)
        {
            if (message.Data is null)
            {
                return;
            }

            var pupils = await BalDbController.GetPupilsAsync(message.Data);

            string responceMessage;

            if (pupils is null || pupils.Count < 1)
            {
                responceMessage =
                    $"Повідомленя неможливо надіслати *{message.Data}* класу. Жоден учень не зареєстрований у системі.";
            }
Пример #5
0
        public override async Task <dynamic> Execute(Message message, TelegramBotClient botClient, UserInfo userInformation)
        {
            if (userInformation != null)
            {
                if (userInformation.IsRegistred == true || userInformation.TypeUser == TypeUser.Guest.ToString()) // Main Menu
                {
                    await Task.Run(() => new MainMenuCommand().Execute(null, botClient, userInformation));        // go to main menu

                    return(true);
                }
            }
            else //  Hello start message && Create data user in db
            {
                await botClient.SendTextMessageAsync(message.Chat.Id,
                                                     text : "Привіт! Я радий, що ти вирішив мене запустити 🙂 Через декілька секунд я почну тобі допомогати. Зачекай будь ласка ⏳",
                                                     parseMode : Telegram.Bot.Types.Enums.ParseMode.Markdown,
                                                     replyMarkup : new ReplyKeyboardRemove());

                await BalDbController.CreateUserInDbAsync(new UserInfo()
                {
                    ChatId = message.Chat.Id, NameTelegram = message.Chat.FirstName + " " + message.Chat.LastName
                });
            }
            // Start- State Machine Registration
            ReplyKeyboardMarkup registrationKeyboard = new ReplyKeyboardMarkup(new List <KeyboardButton>()
            {
                new KeyboardButton()
                {
                    Text = RegistartionButtonText
                },
                new KeyboardButton()
                {
                    Text = LoginGuestButtonText
                }
            })
            {
                ResizeKeyboard = true
            };

            await botClient.SendTextMessageAsync(message.Chat.Id,
                                                 text : $"Нажаль, не можу знайти Вас у системі. Якщо Ви вже зареєстровані - напишіть адміністратору - {AppSettings.Admin}. Або зареєструйтесь для повноцінного користування ботом 🤖👌",
                                                 parseMode : Telegram.Bot.Types.Enums.ParseMode.Markdown,
                                                 replyMarkup : registrationKeyboard);

            return(true);
        }
Пример #6
0
        internal override async Task Execute(CallbackQuery message, TelegramBotClient client, UserInfo userInformation)
        {
            if (message.Data != null)
            {
                Registration_State_Machine.RegistrationState.DecipherRegistartionResult(message.Data,
                                                                                        out long pupilChatId, out bool resultRegistration);

                var user = await BalDbController.GetUserInformationAsync(pupilChatId);

                if (user.IsRegistred == true) //-V3080
                {
                    return;
                }

                Registration_State_Machine.RegistrationState registration =
                    new Registration_State_Machine.RegistrationState(client, userInformation)
                {
                    StateRegistration = Registration_State_Machine.RegistrationStateMachine
                                        .WaitingForConfirmation
                };

                string messageCreator = resultRegistration == true
                    ? $"Користувач chatId: {pupilChatId} [{user.NameUser}](tg://user?id={pupilChatId}) додан до системи"
                    : $"Користувачеві chatId: {pupilChatId} [{user.NameUser}](tg://user?id={pupilChatId}) відмовлено";
                await client.SendTextMessageAsync(chatId : AppSettings.ChatIdCreator, text : messageCreator,
                                                  parseMode : ParseMode.Markdown);

                string messageAdmin = resultRegistration
                    ? $"Користувач: [{user.NameUser}](tg://user?id={pupilChatId}) додан до системи"
                    : $"Користувачеві: [{user.NameUser}](tg://user?id={pupilChatId}) відмовлено";
                await client.SendTextMessageAsync(chatId : userInformation.ChatId,
                                                  text : messageAdmin, ParseMode.Markdown);

                await registration.HandleStateRegistrationAsync(new Message()
                {
                    Text = resultRegistration.ToString(),
                    Chat = new Chat()
                    {
                        Id = pupilChatId
                    }
                });
            }
        }
Пример #7
0
        internal override async Task Execute(CallbackQuery message, TelegramBotClient client, UserInfo userInformation)
        {
            if (message.Data is null)
            {
                return;
            }

            var teacher = await BalDbController.GetTeacherInformationAsync(message.Data);

            var responceMessage = teacher == null
                ? $"Повідомленя неможливо надіслати вчителю *{message.Data}*. Вчитель не зареєстрований у системі."
                : "Введіть текст повідомлення: ";

            await client.SendTextMessageAsync(chatId : userInformation.ChatId,
                                              text : responceMessage,
                                              parseMode : Telegram.Bot.Types.Enums.ParseMode.Markdown);

            userInformation.State =
                SendMessagesCommand.SendMessageState.FromPupilToTeacher.ToString() + "_" + message.Data;
            await BalDbController.ChangeUserStateAsync(userInformation.State, userInformation.ChatId);
        }
Пример #8
0
        public async Task Execute(Message message, TelegramBotClient client, UserInfo user)
        {
            if (message is null || client is null || user is null)
            {
                return;
            }
            string state = user.State.Split("_").First();
            string data  = user.State.Split("_").Last();

            if (state == SendMessageState.FromPupilToClassmates.ToString()) // From pupil to classmates
            {
                user = await BalDbController.GetPupilInformationAsync(user.ChatId);

                var classmates = await BalDbController.GetPupilsAsync(user.Pupils.First().Class);

                string userMessage = $"Повідомлення від _{user.NameUser}_:\n*{message.Text}*";
                if (classmates != null)
                {
                    foreach (var pupil in classmates)
                    {
                        if (pupil.ChatId == user.ChatId)
                        {
                            await client.SendTextMessageAsync(chatId : user.ChatId, text : "Повідомлення однокласникам надіслано.");

                            continue;
                        }
                        await client.SendTextMessageAsync(pupil.ChatId, text : userMessage, parseMode : Telegram.Bot.Types.Enums.ParseMode.Markdown);
                    }
                }
            }
            if (state == SendMessageState.FromTeacherToPupils.ToString()) // From teacher to pupils
            {
                var pupils = await BalDbController.GetPupilsAsync(data);

                string teacherMessage = $"Повідомлення від вчителя _{user.NameUser}_:\n*{message.Text}*";

                foreach (var pupil in pupils)
                {
                    await client.SendTextMessageAsync(chatId : pupil.ChatId,
                                                      text : teacherMessage,
                                                      parseMode : Telegram.Bot.Types.Enums.ParseMode.Markdown);
                }

                await client.SendTextMessageAsync(chatId : user.ChatId,
                                                  text : $"Ваше повідомлення надіслано _{pupils.Count}_ учням(ю) *{data}* класу.",
                                                  parseMode : Telegram.Bot.Types.Enums.ParseMode.Markdown);
            }

            if (state == SendMessageState.FromPupilToTeacher.ToString())
            {
                var teacher = await BalDbController.GetTeacherInformationAsync(data);

                user = await BalDbController.GetPupilInformationAsync(user.ChatId);

                string pupilMessage = $"Повідомлення від учня {user.Pupils.First().Class} класу [{user.NameUser}](tg://user?id={user.ChatId}): *{message.Text}*";

                await client.SendTextMessageAsync(chatId : teacher.ChatId, text : pupilMessage,
                                                  parseMode : ParseMode.Markdown);

                await client.SendTextMessageAsync(chatId : user.ChatId, text : $"Ваше повідомлення надіслано вчителю _{teacher.NameUser}_", parseMode : ParseMode.Markdown);
            }
            await BalDbController.ChangeUserStateAsync(SendMessageState.Sended.ToString(), user.ChatId);
        }
        internal async Task HandleStateRegistrationAsync(Message message)
        {
            string userMessage = message.Text;

            if (StateRegistration == default)
            {
                StateRegistration = (RegistrationStateMachine)Enum.Parse(typeof(RegistrationStateMachine), User.State);
            }
            switch (StateRegistration)
            {
            case RegistrationStateMachine.None:     // S-0
            {
                StateRegistration = RegistrationStateMachine.EnterRole;
                await BalDbController.ChangeUserStateAsync(StateRegistration.ToString(), User.ChatId);         // Next state (s-1)

                var answerText = $"Якщо Ви учень ліцею, ведіть пароль, для користуванням ботом. Його можна отримати у класного керівника або написавши адміністратору {AppSettings.Admin}.  Якщо Ви вчитель - натисніть кнопку *{TeacherButtonText}* - щоб перейти далі.";

                await BotClient.SendTextMessageAsync(chatId : User.ChatId,
                                                     text : answerText,
                                                     parseMode : Telegram.Bot.Types.Enums.ParseMode.Markdown,
                                                     replyMarkup : new ReplyKeyboardMarkup(new List <KeyboardButton>()
                    {
                        new KeyboardButton()
                        {
                            Text = TeacherButtonText
                        }
                    })
                    {
                        ResizeKeyboard = true
                    });

                break;
            }

            case RegistrationStateMachine.EnterRole:     // S-1
                // connect to db
            {
                if (userMessage == TeacherButtonText)         // if Teacher
                {
                    StateRegistration = RegistrationStateMachine.EnterTeacherPassword;
                    await BalDbController.ChangeUserStateAsync(StateRegistration.ToString(), User.ChatId);         // Next state (s-2)

                    await BotClient.SendTextMessageAsync(chatId : User.ChatId,
                                                         text : $@"Адміністратор боту <a href= ""tg://user?id=363574232"">{AppSettings.NameAdmin}</a> надасть Вам унікальний пароль. Зверніться будь ласка до нього.",
                                                         parseMode : Telegram.Bot.Types.Enums.ParseMode.Html,
                                                         replyMarkup : new ReplyKeyboardRemove());

                    return;
                }
                // if pupil
                User.TypeUser = await ConfirmUserRoleAsync(userMessage);         // Confirm password from pupil

                if (User.TypeUser != null)
                {
                    StateRegistration = RegistrationStateMachine.EnterName;
                    await BalDbController.ChangeUserStateAsync(StateRegistration.ToString(), User.ChatId);         // Next state (s-2)

                    await BalDbController.AddPupilAsync(User.ChatId)
                    .ContinueWith(_ => BalDbController.UpdateUserDataAsync(User));

                    await BotClient.SendTextMessageAsync(chatId : User.ChatId,
                                                         text : $"Вітаємо! Ви успішно авторизувались у системі, як учень ліцею. Як до Вас звертатись? (Напишіть своє прізвище, ім'я, по-батькові українською мовою)",
                                                         replyMarkup : new ReplyKeyboardRemove());
                }
                else
                {
                    await BotClient.SendTextMessageAsync(chatId : User.ChatId,
                                                         text : @"Секретний ключ не підійшов 😢 Спробуйте будь-ласка ще раз 🙂",
                                                         replyMarkup : new ReplyKeyboardRemove());
                }
                break;
            }

            case RegistrationStateMachine.EnterTeacherPassword:     // S-2
            {
                if (userMessage == null)
                {
                    return;
                }
                string responceMessage = default;

                var teacher = await ConfirmTeacherPasswordAsync(userMessage);

                if (teacher == null)
                {
                    responceMessage = User.TypeUser == TypeUser.Pupil.ToString() ? $"Вітаємо! Ви успішно авторизувались у системі, як учень ліцею. Як до Вас звертатись? (Напишіть своє прізвище, ім'я, по-батькові українською мовою)" : "Пароль не підійшов. Спробуйте будь ласка ще.";
                    await BotClient.SendTextMessageAsync(chatId : User.ChatId,
                                                         text : responceMessage,
                                                         parseMode : Telegram.Bot.Types.Enums.ParseMode.Markdown);

                    return;
                }
                responceMessage = $"Вітаємо! Ви зареєструвалися у системі як: *{teacher.FullName}*.\nПредмет, який викладаєте: *{teacher.Subjects}*.";
                User.NameUser   = teacher.FullName;
                User.TypeUser   = TypeUser.Teacher.ToString();
                User.Teachers.Add(teacher);

                if (await BalDbController.AddTeacherAsync(User.ChatId) == true)         // if teacher add complete
                {
                    StateRegistration = RegistrationStateMachine.EnterPhone;
                    await BalDbController.ChangeUserStateAsync(StateRegistration.ToString(), User.ChatId);         // Next state (s-3)

                    await BalDbController.UpdateUserDataAsync(User);

                    await BotClient.SendTextMessageAsync(chatId : User.ChatId,
                                                         text : responceMessage,
                                                         parseMode : Telegram.Bot.Types.Enums.ParseMode.Markdown);

                    await BotClient.SendTextMessageAsync(chatId : User.ChatId,
                                                         text : $"{User.NameUser} теперь введіть свій телефон або надішліть його",
                                                         replyMarkup : new ReplyKeyboardMarkup(new KeyboardButton()
                        {
                            Text = SendPhoneButtonText, RequestContact = true
                        })
                        {
                            ResizeKeyboard = true
                        });
                }
                else
                {
                    responceMessage = "Вчитель з таким паролем вже зареєстрований у системі.";
                    await BotClient.SendTextMessageAsync(chatId : User.ChatId,
                                                         text : responceMessage,
                                                         parseMode : Telegram.Bot.Types.Enums.ParseMode.Markdown);
                }
            }
            break;

            case RegistrationStateMachine.EnterName:     // S-3
            {
                User.NameUser     = userMessage;
                StateRegistration = RegistrationStateMachine.EnterPhone;
                await BalDbController.ChangeUserStateAsync(StateRegistration.ToString(), User.ChatId); // Next state (s-4)

                await BalDbController.UpdateUserDataAsync(User);                                       // Send user name in db

                await BotClient.SendTextMessageAsync(chatId : User.ChatId,
                                                     text : $"{User.NameUser} теперь введіть свій телефон або надішліть його",
                                                     replyMarkup : new ReplyKeyboardMarkup(new KeyboardButton()
                    {
                        Text = SendPhoneButtonText, RequestContact = true
                    })
                    {
                        ResizeKeyboard = true
                    });

                break;
            }

            case RegistrationStateMachine.EnterPhone:     // S-4
            {
                User.Phone = message.Text ?? message.Contact.PhoneNumber;

                await BalDbController.UpdateUserDataAsync(User);         // Send user phone to db

                var          botMessage = $"Сталася помилка при регістрації. Напишіть адміну -> {AppSettings.Admin}";
                IReplyMarkup keyboard   = new ReplyKeyboardRemove();

                StateRegistration = RegistrationStateMachine.EnterClass;
                await BalDbController.ChangeUserStateAsync(StateRegistration.ToString(), User.ChatId); // Next state (s-5)

                await BalDbController.UpdateUserDataAsync(User);                                       // Send user name in db

                if (User.TypeUser == TypeUser.Teacher.ToString())
                {
                    botMessage = $"Якщо Ви маєте класне керівництво - введіть будь ласка Ваш клас: (Наприклад *5А* чи *8Г*).\nЯкщо у вас немає класу - натисніть кнопку {NotClassmatesTeacherButtonText}";
                    keyboard   = new ReplyKeyboardMarkup(new KeyboardButton(NotClassmatesTeacherButtonText))
                    {
                        ResizeKeyboard = true
                    };
                }
                if (User.TypeUser == TypeUser.Pupil.ToString())
                {
                    botMessage = @"Введіть клас, в якому навчаєтесь. Пам'ятайте, змінити потім клас буде неможливо! Наприклад: *11А* чи *9Б*";
                }

                await BotClient.SendTextMessageAsync(chatId : User.ChatId,
                                                     text : botMessage,
                                                     replyMarkup : keyboard,
                                                     parseMode : Telegram.Bot.Types.Enums.ParseMode.Markdown);

                break;
            }

            case RegistrationStateMachine.EnterClass:     // S-5
            {
                string botMessage = default;
                // Check correct input class
                {
                    string pattern = @"^[0-9A-ZА-ЯЁ]{2,3}$";
                    if (Regex.IsMatch(message.Text, pattern) == false &&
                        Regex.IsMatch(message.Text, NotClassmatesTeacherButtonText) == false)
                    {
                        await BotClient.SendTextMessageAsync(chatId : User.ChatId,
                                                             text : "Неправильно введений клас. Спробуйте ще раз. (_Приклад: 5А, 11Б_)",
                                                             parseMode : ParseMode.Markdown);

                        return;
                    }
                }
                if (User.TypeUser == TypeUser.Teacher.ToString())        // if teacher
                {
                    User = await BalDbController.GetTeacherInformationAsync(User.ChatId);

                    User.Teachers.First().Class = message.Text == NotClassmatesTeacherButtonText ? "--" : message.Text;

                    string name    = $"\nПрізвище, ім'я, по-батькові: *{User.NameUser}*";
                    string phone   = $"\nНомер телефону: *{User.Phone}*";
                    string subject = $"\nПредмет: *{User.Teachers.First().Subjects}*";
                    string @class  = $"\nКласне керівництво: *{User.Teachers.First().Class}*";
                    botMessage = $"Будь-ласка перевірте введену інформацію.{name}{phone}{subject}{@class}\nЯкщо вона правильна - натисніть {CorrectInformationUserButtonText}, якщо ні - {InCorrectInformationUserButtonText}";
                }
                if (User.TypeUser == TypeUser.Pupil.ToString())         // if pupil
                {
                    User.Pupils.Add(new Pupils()
                        {
                            Class = message.Text
                        });

                    string name   = $"\nПрізвище, ім'я, по-батькові: *{User.NameUser}*";
                    string phone  = $"\nНомер телефону: *{User.Phone}*";
                    string @class = $"\nКлас: *{User.Pupils.First().Class}*";
                    botMessage = $"Будь-ласка перевірте введену інформацію.{name}{phone}{@class}\nЯкщо вона правильна - натисніть {CorrectInformationUserButtonText}, якщо ні - {InCorrectInformationUserButtonText}";
                }
                await BalDbController.UpdateUserDataAsync(User);

                StateRegistration = RegistrationStateMachine.CheckInformation;
                await BalDbController.ChangeUserStateAsync(StateRegistration.ToString(), User.ChatId);         // Next state (s-6)

                await BotClient.SendTextMessageAsync(chatId : User.ChatId,
                                                     text : botMessage,
                                                     replyMarkup : new ReplyKeyboardMarkup(new List <KeyboardButton>()
                    {
                        new KeyboardButton()
                        {
                            Text = CorrectInformationUserButtonText
                        },
                        new KeyboardButton()
                        {
                            Text = InCorrectInformationUserButtonText
                        }
                    })
                    {
                        ResizeKeyboard = true
                    },
                                                     parseMode : Telegram.Bot.Types.Enums.ParseMode.Markdown);

                break;
            }

            case RegistrationStateMachine.CheckInformation:     // S-6
            {
                if (userMessage == CorrectInformationUserButtonText)
                {
                    StateRegistration = RegistrationStateMachine.WaitingForConfirmation;
                    await BalDbController.ChangeUserStateAsync(StateRegistration.ToString(), User.ChatId);         // Check for admin confirm

                    string adminMessage = default;
                    string name         = default;
                    string phone        = default;
                    string @class       = default;

                    InlineKeyboardMarkup inlineKeyboard = new InlineKeyboardMarkup(new List <InlineKeyboardButton>()
                        {
                            new InlineKeyboardButton()
                            {
                                Text = ConfirmRegistrationButtonText, CallbackData = EncryptionRegistartionResult(User.ChatId, true)
                            },
                            new InlineKeyboardButton()
                            {
                                Text = NotConfirmRegistrationButtonText, CallbackData = EncryptionRegistartionResult(User.ChatId, false)
                            }
                        });

                    if (User.TypeUser == TypeUser.Pupil.ToString())
                    {
                        var info = await BalDbController.GetPupilInformationAsync(User.ChatId);

                        name         = $"\nУчень: [{User.NameUser}](tg://user?id={User.ChatId})";
                        phone        = $"\nНомер телефону: *{info.Phone}*";
                        @class       = $"\nКлас: *{info.Pupils.First().Class}*";
                        adminMessage = $"{new ConfirmPupilRegistration().Name}{name}{phone}{@class}\n";
                    }
                    if (User.TypeUser == TypeUser.Teacher.ToString())
                    {
                        var info = await BalDbController.GetTeacherInformationAsync(User.ChatId);

                        name   = $"\nВчитель: [{User.NameUser}](tg://user?id={User.ChatId})";
                        phone  = $"\nНомер телефону: *{info.Phone}*";
                        @class = $"\nКласний керівник: *{info.Teachers.First().Class}*";
                        string subject = $"\nПредмет: *{info.Teachers.First().Subjects}*";
                        adminMessage = $"{new ConfirmPupilRegistration().Name}{name}{phone}{@class}{subject}\n";
                    }

                    await BotClient.SendTextMessageAsync(User.ChatId,
                                                         text : "Запит на реєстрацію відправлено. Чекайте сповіщення про результат 🙂",
                                                         replyMarkup : new ReplyKeyboardRemove());

                    var admins = await GetAdmins();

                    foreach (var admin in admins)
                    {
                        await BotClient.SendTextMessageAsync(admin.ChatId,
                                                             text : adminMessage,
                                                             replyMarkup : inlineKeyboard,
                                                             parseMode : Telegram.Bot.Types.Enums.ParseMode.Markdown);
                    }
                    break;
                }
                if (userMessage == InCorrectInformationUserButtonText)
                {
                    string       responceMessage = "default";
                    IReplyMarkup keyboard        = new ReplyKeyboardRemove();
                    if (User.TypeUser == TypeUser.Pupil.ToString())
                    {
                        StateRegistration = RegistrationStateMachine.EnterName;         // Return to S-3 State
                        responceMessage   = $"Як до Вас звертатись?  (Напишіть своє прізвище, ім'я, по-батькові українською мовою)";
                    }
                    if (User.TypeUser == TypeUser.Teacher.ToString())
                    {
                        StateRegistration = RegistrationStateMachine.EnterPhone;         // Return to S-4 State
                        responceMessage   = $@"Адміністратор боту <a href= ""tg://user?id=363574232"">{AppSettings.NameAdmin}</a> надасть Вам унікальний пароль. Зверніться будь ласка до нього.";
                    }
                    await BalDbController.ChangeUserStateAsync(StateRegistration.ToString(), User.ChatId);

                    await BotClient.SendTextMessageAsync(chatId : User.ChatId,
                                                         text : responceMessage,
                                                         replyMarkup : keyboard);
                }
                break;
            }

            case RegistrationStateMachine.WaitingForConfirmation:     // S-7
            {
                if (bool.TryParse(message.Text, out bool result) == true)
                {
                    if (Convert.ToBoolean(message.Text) == false)         // if registred not confirm
                    {
                        var requestUser = await BalDbController.GetUserInformationAsync(message.Chat.Id);

                        await BotClient.SendTextMessageAsync(chatId : requestUser.ChatId,
                                                             text : "Нажаль, Вам відмовлено в реєстрації за введеними даними. Виправте данні, та спробуйте ще раз.");

                        string       responceMessage = "default";
                        IReplyMarkup keyboard        = new ReplyKeyboardRemove();
                        if (requestUser.TypeUser == TypeUser.Pupil.ToString())
                        {
                            StateRegistration = RegistrationStateMachine.EnterName;         // Return to S-3 State
                            responceMessage   = $"Як до Вас звертатись?  (Напишіть своє прізвище, ім'я, по-батькові українською мовою)";
                        }
                        if (requestUser.TypeUser == TypeUser.Teacher.ToString())
                        {
                            StateRegistration = RegistrationStateMachine.EnterTeacherPassword;         // Return to S-4 State
                            responceMessage   = $@"Адміністратор боту <a href= ""tg://user?id=363574232"">{AppSettings.NameAdmin}</a> надасть Вам унікальний пароль. Зверніться будь ласка до нього.";
                        }

                        await BalDbController.ChangeUserStateAsync(StateRegistration.ToString(), requestUser.ChatId);

                        await BotClient.SendTextMessageAsync(chatId : requestUser.ChatId,
                                                             text : responceMessage,
                                                             replyMarkup : keyboard,
                                                             parseMode : ParseMode.Html);

                        return;
                    }
                    else         // true
                    {
                        var requestUser = await BalDbController.GetUserInformationAsync(message.Chat.Id);

                        StateRegistration = RegistrationStateMachine.Registred;
                        await BalDbController.ChangeUserStateAsync(StateRegistration.ToString(), requestUser.ChatId);         // Finaly state

                        requestUser.IsRegistred = true;
                        await BalDbController.UpdateUserDataAsync(requestUser);

                        if (requestUser.TypeUser == TypeUser.Teacher.ToString())
                        {
                            var teacherInfo = await BalDbController.GetTeacherInformationAsync(requestUser.ChatId);

                            if (teacherInfo.Teachers.First().Class == "--")
                            {
                                break;
                            }
                            else
                            {
                                var pupils = await BalDbController.GetPupilsAsync(teacherInfo.Teachers.First().Class);         // Add pupils chatId her classmatesTeacher

                                if (pupils != null && pupils.Count > 0)
                                {
                                    foreach (var pupil in pupils)
                                    {
                                        var pupilInfo = await BalDbController.GetPupilInformationAsync(pupil.ChatId);

                                        pupilInfo.Pupils.First().ClassromTeacherId = teacherInfo.Teachers.First().Id;
                                        await BalDbController.UpdateUserDataAsync(pupilInfo);
                                    }
                                }
                            }
                        }
                        if (requestUser.TypeUser == TypeUser.Pupil.ToString())        // Add teacher Id to pupil
                        {
                            var pupilInfo = await BalDbController.GetPupilInformationAsync(requestUser.ChatId);

                            var teacherChatId = await BalDbController.GetClassmateTeacherAsync(pupilInfo.Pupils.First().Class);

                            if (teacherChatId != default)
                            {
                                pupilInfo.Pupils.First().ClassromTeacherId = BalDbController.GetTeacherInformationAsync(teacherChatId).Result.Teachers.First().Id;
                                await BalDbController.UpdateUserDataAsync(pupilInfo);
                            }
                        }
                        await BotClient.SendTextMessageAsync(chatId : requestUser.ChatId,
                                                             text : $"Ваш профіль підтверджено! Вітаємо у системі 🥳",
                                                             replyMarkup : new ReplyKeyboardRemove());

                        await Task.Run(() => new MainMenuCommand().Execute(null, BotClient, requestUser));         // go to main menu

                        break;
                    }
                }
                else
                {
                    await BotClient.SendTextMessageAsync(chatId : User.ChatId,
                                                         text : $"Вашу заявку ще не підтвердили... Будь ласка зачекайте ⏳",
                                                         replyMarkup : new ReplyKeyboardRemove());

                    break;
                }
            }

            default:
                break;
            }
        }
Пример #10
0
        public static async Task <string> CreateDayScheduler(ISchedulerController scheduler, UserInfo userInformation, string day)
        {
            if (day.ToLowerInvariant() == DayOfWeek.Saturday.ToString().ToLowerInvariant() ||
                day.ToLowerInvariant() == DayOfWeek.Sunday.ToString().ToLowerInvariant())
            {
                return("Насолоджуйтесь вихідним 🌞");
            }
            string title      = $"Розклад на {ConverteEngMonthToUkr(day, LanguageCases.Rodovyy).Result}:\n";
            string bodyAnswer = default;
            string answer     = default;

            string subject       = default;
            string classroom     = default;
            string uniqueCommand = default;
            int    lesson        = default;


            if (userInformation.TypeUser == TypeUser.Teacher.ToString())
            {
                var teacherInfo = await BalDbController.GetTeacherInformationAsync(userInformation.ChatId);

                var schedulerDay = await scheduler.GetConcreteDayInformationAsync(
                    scheduler : await scheduler.GetConcreteWeekInformationAsync(teacherInfo.Teachers.First().FullName),
                    dayOfWeek : day);

                if (schedulerDay == null)
                {
                    return("Невдалось завантажити розклад. ");
                }
                for (int lessonPointer = 0; lessonPointer < schedulerDay.Count; lessonPointer += 3)
                {
                    string @class = default;
                    if (schedulerDay[lessonPointer] == String.Empty || schedulerDay[lessonPointer] == "-")
                    {
                        subject       = "Вікно 🙂";
                        @class        = String.Empty;
                        classroom     = String.Empty;
                        uniqueCommand = String.Empty;
                    }
                    else
                    {
                        @class        = $"Кл.: {schedulerDay[lessonPointer]}";
                        subject       = $" {schedulerDay[lessonPointer + 1]}";
                        classroom     = $" Каб.: {schedulerDay[lessonPointer + 2]}.";
                        uniqueCommand = $"\nДетальніше -->" + $" {new SchedulerUniqueCommand.Teacher().Name }{lesson}{day.ToLower()}_scheduler";
                    }
                    bodyAnswer += $"{smileNumber[lesson]} {@class}{subject}{classroom}{uniqueCommand}\n";
                    lesson++;
                }
                answer = title + bodyAnswer;
                return(answer);
            }

            if (userInformation.TypeUser == TypeUser.Pupil.ToString())
            {
                var pupilInfo = await BalDbController.GetPupilInformationAsync(userInformation.ChatId);

                var schedulerDay = await scheduler.GetConcreteDayInformationAsync(
                    scheduler : await scheduler.GetConcreteWeekInformationAsync(pupilInfo.Pupils.First().Class),
                    dayOfWeek : day);

                if (schedulerDay == null)
                {
                    return("Невдалось завантажити розклад. ");
                }

                string teacher = default;

                for (int lessonPointer = 0; lessonPointer < schedulerDay.Count; lessonPointer += 3)
                {
                    if (schedulerDay[lessonPointer] == String.Empty)
                    {
                        subject       = " Уроку немає 🙂";
                        teacher       = String.Empty;
                        classroom     = String.Empty;
                        uniqueCommand = String.Empty;
                    }
                    else
                    {
                        subject       = $" {schedulerDay[lessonPointer]}";
                        teacher       = $" Вч.: {schedulerDay[lessonPointer + 1]}";
                        classroom     = $" Каб.: {schedulerDay[lessonPointer + 2]}.";
                        uniqueCommand = $"\nДетальніше -->" + $" /p{lesson}{day.ToLower()}_scheduler";
                    }
                    bodyAnswer += $"{smileNumber[lesson]} {subject}{classroom}{uniqueCommand}\n";
                    lesson++;
                }
                answer = title + bodyAnswer;
                return(answer);
            }

            return("Невдалось завантажити розклад. ");
        }