Пример #1
0
        public async Task GroupLogs(CommandContext ctx)
        {
            try {
                using (var db = new JackTheStudentContext()){
                    var groups = db.Group.ToList();
                    if (groups.Count == 0)
                    {
                        await ctx.RespondAsync("No groups logged!");
                    }
                    else
                    {
                        string result = String.Empty;
                        foreach (Group group in groups)
                        {
                            result = result + "\n" + group.GroupId;
                        }
                        await ctx.RespondAsync(result);
                    }
                }
            } catch (Exception ex) {
                Console.Error.WriteLine("[Jack] " + ex.ToString());
                await ctx.RespondAsync("Show logs failed");

                return;
            }
            return;
        }
Пример #2
0
        public async Task ReminderLog(CommandContext ctx, string date, string time, string about)
        {
            DateTime parsedEventDate;
            DateTime parsedEventTime;

            DateTime.TryParse(time, out parsedEventTime);
            DateTime.TryParse(date, out parsedEventDate);

            PersonalReminder reminder = new PersonalReminder {
                SetForDate    = parsedEventDate.Date.Add(parsedEventTime.TimeOfDay),
                LogById       = ctx.Message.Author.Id,
                LogByUsername = ctx.Message.Author.Username + "#" + ctx.Message.Author.Discriminator,
                About         = about,
                UserMention   = ctx.Message.Author.Mention,
                ChannelId     = ctx.Channel.Id
            };

            try {
                JackTheStudent.Program.reminderList.Add(reminder);
                using (var db = new JackTheStudentContext()) {
                    db.PersonalReminder.Add(reminder);
                    await db.SaveChangesAsync();
                }
            } catch (Exception ex) {
                Console.Error.WriteLine("[Jack] " + ex.ToString());
                await ctx.RespondAsync("Log failed");

                return;
            }

            await ctx.RespondAsync($"Reminder about \"{about}\" set for {date} {time}");
        }
Пример #3
0
        public async Task ClassesLogs(CommandContext ctx)
        {
            try {
                using (var db = new JackTheStudentContext()){
                    var classes = db.Class.ToList();
                    if (classes.Count == 0)
                    {
                        await ctx.RespondAsync("No classes logged!");
                    }
                    else
                    {
                        string result = String.Empty;
                        foreach (Class uniClass in classes)
                        {
                            result = result + "\n" + "Class - " + uniClass.Name + ", short version - " + uniClass.ShortName;
                        }
                        await ctx.RespondAsync(result);
                    }
                }
            } catch (Exception ex) {
                Console.Error.WriteLine("[Jack] " + ex.ToString());
                await ctx.RespondAsync("Show logs failed");

                return;
            }
            return;
        }
Пример #4
0
        public async Task Truncate(CommandContext ctx)
        {
            using (var db = new JackTheStudentContext()){
            }

            /* Send the message "I'm Alive!" to the channel the message was recieved from */
            await ctx.RespondAsync("All tables have been cleared!");
        }
        public async Task RestoreClasses(List <Class> backupList, CommandContext ctx)
        {
            await ctx.RespondAsync("Failed, aborting and restoring from backup.");

            using (var db = new JackTheStudentContext()) {
                await db.Database.ExecuteSqlRawAsync("truncate table class");

                foreach (Class backupClass in backupList)
                {
                    db.Class.Add(backupClass);
                }
                await db.SaveChangesAsync();
            }
            await ctx.RespondAsync("Groups restored from backup.");

            return;
        }
Пример #6
0
 private async Task Remind()
 {
     if (reminderList.Count == 0)
     {
         return;
     }
     for (int i = 1; i <= reminderList.Count(); i++)
     {
         if (DateTime.Now >= reminderList[i - 1].SetForDate)
         {
             await reminderList[i - 1].Ping(_discord);
             try {
                 using (var db = new JackTheStudentContext()) {
                     db.PersonalReminder.Remove(reminderList[i - 1]);
                     await db.SaveChangesAsync();
                 }
                 reminderList.Remove(reminderList[i - 1]);
             } catch (Exception ex) {
                 Console.Error.WriteLine("[Jack] " + ex.ToString());
             }
         }
     }
 }
Пример #7
0
        private async Task AutoRemind()
        {
            if (examList.Count == 0)
            {
                return;
            }
            TimeSpan interval        = new TimeSpan(7, 00, 00, 00);
            TimeSpan timeLeft        = new TimeSpan();
            TimeSpan checkTime       = new TimeSpan(15, 20, 00);
            bool     isTime          = DateTime.Now.TimeOfDay >= checkTime;
            bool     isLessThanAWeek = false;

            if (!isTime)
            {
                return;
            }

            for (int i = 1; i <= examList.Count(); i++)
            {
                timeLeft        = examList[i - 1].Date.Date - DateTime.Now.Date;
                isLessThanAWeek = timeLeft <= interval;
                if (isLessThanAWeek)
                {
                    await examList[i - 1].Ping(_discord);
                    examList[i - 1].wasReminded = true;
                    using (var db = new JackTheStudentContext()) {
                        try {
                            var exam = db.Exam.Where(e => e.Id == examList[i - 1].Id).FirstOrDefault();
                            exam.wasReminded = true;
                            await db.SaveChangesAsync();
                        } catch (Exception ex) {
                            Console.Error.WriteLine("[Jack] " + ex.ToString());
                        }
                    }
                }
            }
        }
        public async Task ProjectLog(CommandContext ctx,
                                     [Description("\nTakes either 1 (true) or 0 (false)\n")] string isGroup = "",
                                     [Description("\nTakes group IDs, type !group to retrieve all groups.\n")] string groupId              = "",
                                     [Description("\nTakes class' short names, type !class to retrive all classes.\n")] string classType   = "",
                                     [Description("\nTakes dates in dd/mm/yyyy format, accepts different separators.\n")] string eventDate = "",
                                     [Description("\nTakes time in hh:mm format.\n")] string eventTime = "",
                                     [Description("\nTakes additional information, multiple words must be wrapped with \"\".\n")] string additionalInfo = "")
        {
            DateTime parsedEventDate = new DateTime();
            DateTime parsedEventTime = new DateTime();

            if (isGroup == "")
            {
                await ctx.RespondAsync("Learn to read you dumbass. The command looks like: !project <isGroup> <group> <class> <projectDate> <projectTime> Try again!");

                return;
            }
            else if (isGroup != "0" && isGroup != "1")
            {
                await ctx.RespondAsync("How stupid are you, really? isGroup argument takes either 1 (true) or 0 (false)!");

                return;
            }
            else if (groupId == "")
            {
                await ctx.RespondAsync("Learn to read you dumbass. The command looks like: !project <isGroup> <group> <class> <projectDate> <projectTime> Try again!");

                return;
            }
            else if (!JackTheStudent.Program.groupList.Contains(groupId))
            {
                await ctx.RespondAsync("There's no such group dumbass. Try again!");

                return;
            }
            else if (classType == "")
            {
                await ctx.RespondAsync("Learn to read you dumbass. The command looks like: !project <isGroup> <group> <class> <projectDate> <projectTime> Try again!");

                return;
            }
            else if (!JackTheStudent.Program.classList.Any(c => c.ShortName == classType))
            {
                await ctx.RespondAsync("There's no such class, you high bruh?");

                return;
            }
            else if (eventDate == "")
            {
                await ctx.RespondAsync("There's date missing, fix it!");

                return;
            }
            else if (!DateTime.TryParse(eventDate, out parsedEventDate))
            {
                await ctx.RespondAsync("That's not a valid date you retard, learn to type!");

                return;
            }
            else if (eventTime == "")
            {
                await ctx.RespondAsync("There's time missing, fix it!");

                return;
            }
            else if (!DateTime.TryParse(eventTime, out parsedEventTime))
            {
                await ctx.RespondAsync("That's not a valid time you retard, learn to type!");

                return;
            }
            else if (isGroup == "0")
            {
                try {
                    using (var db = new JackTheStudentContext()){
                        var project = new Project {
                            Class          = classType,
                            Date           = parsedEventDate.Date.Add(parsedEventTime.TimeOfDay),
                            GroupId        = groupId,
                            isGroup        = Convert.ToBoolean(Convert.ToInt16(isGroup)),
                            LogById        = ctx.Message.Author.Id.ToString(),
                            LogByUsername  = ctx.Message.Author.Username + "#" + ctx.Message.Author.Discriminator,
                            AdditionalInfo = additionalInfo
                        };
                        db.Project.Add(project);
                        await db.SaveChangesAsync();
                    }
                } catch (Exception ex) {
                    Console.Error.WriteLine("[Jack] " + ex.ToString());
                    await ctx.RespondAsync("Log failed");

                    return;
                }
                await ctx.RespondAsync("Project logged successfully");

                return;
            }
            else
            {
                await ctx.RespondAsync("How many members does the project have?");

                var intr     = ctx.Client.GetInteractivity();  // Grab the interactivity module
                var response = await intr.WaitForMessageAsync(
                    c => c.Author.Id == ctx.Message.Author.Id, // Make sure the response is from the same person who sent the command
                    TimeSpan.FromSeconds(5)                    // Wait 60 seconds for a response instead of the default 30 we set earlier!
                    );

                short membersCount = 1;
                while (!Int16.TryParse(response.Result.Content, out membersCount) && membersCount <= 2)
                {
                    await ctx.RespondAsync("Ever heard of intigers? Try again.");

                    response = await intr.WaitForMessageAsync(
                        c => c.Author.Id == ctx.Message.Author.Id, // Make sure the response is from the same person who sent the command
                        TimeSpan.FromSeconds(5)                    // Wait 60 seconds for a response instead of the default 30 we set earlier!
                        );
                }

                try {
                    using (var db = new JackTheStudentContext()){
                        var project = new Project {
                            Class               = classType,
                            Date                = parsedEventDate.Date.Add(parsedEventTime.TimeOfDay),
                            GroupId             = groupId,
                            isGroup             = Convert.ToBoolean(Convert.ToInt16(isGroup)),
                            LogById             = ctx.Message.Author.Id.ToString(),
                            LogByUsername       = ctx.Message.Author.Username + "#" + ctx.Message.Author.Discriminator,
                            AdditionalInfo      = additionalInfo,
                            GroupProjectMembers = new List <GroupProjectMember>()
                        };
                        for (int i = 1; i <= membersCount; i++)
                        {
                            await ctx.RespondAsync("What's the name of the " + i + " participant?");

                            var participant = await intr.WaitForMessageAsync(
                                c => c.Author.Id == ctx.Message.Author.Id, // Make sure the response is from the same person who sent the command
                                TimeSpan.FromSeconds(5)                    // Wait 60 seconds for a response instead of the default 30 we set earlier!
                                );

                            var groupProjectMember = new GroupProjectMember {
                                Member = participant.Result.Content
                            };
                            project.GroupProjectMembers.Add(groupProjectMember);
                        }
                        JackTheStudent.Program.projectList.Add(project);
                        db.Project.Add(project);
                        await db.SaveChangesAsync();
                    }
                } catch (Exception ex) {
                    Console.Error.WriteLine("[Jack] " + ex.ToString());
                    await ctx.RespondAsync("Log failed");

                    return;
                }
                await ctx.RespondAsync("Project logged successfully");

                return;
            }
        }
        public async Task ProjectLogs(CommandContext ctx,
                                      [Description("\nTakes group IDs or \".\", type !group to retrieve all groups, usage of \".\" will tell Jack to retrieve project for ALL groups.\n")] string group = ".",
                                      [Description("\nTakes class' short names or \".\", type !class to retrieve all classes, usage of \".\" will tell Jack to retrieve project for ALL classes.\n")] string classType = ".",
                                      [Description("\nTakes 0 for only individual projects, 1 for group projects or \".\" for all projects\n")] string isGroup = ".",
                                      [Description("\nTakes \".\" or \"planned\", usage of \".\" will tell Jack to retrieve all LOGGED project, \"planned\" retrieves only future events.\n")] string span = "planned")
        {
            bool isParticipants = false;

            if (!JackTheStudent.Program.groupList.Contains(group) && group != ".")
            {
                await ctx.RespondAsync("There's no such group dumbass. Try again!");

                return;
            }
            else if (!JackTheStudent.Program.classList.Any(c => c.ShortName == classType) && classType != ".")
            {
                await ctx.RespondAsync("There's no such class, you high bruh?");

                return;
            }
            else if (isGroup != "." && isGroup != "0" && isGroup != "1")
            {
                await ctx.RespondAsync("... isGroup only takes . , 0 i 1");

                return;
            }
            if (group == "." && classType == "." && span == "planned")
            {
                try {
                    using (var db = new JackTheStudentContext()){
                        var projects = db.Project
                                       .Where(x => x.Date > DateTime.Now)
                                       .ToList();
                        if (projects.Count == 0)
                        {
                            await ctx.RespondAsync("Wait what!? There are literally no projects planned at all!");
                        }
                        else
                        {
                            string result             = String.Empty;
                            string participantsString = String.Empty;
                            isParticipants = await ParticipantsQuestion(ctx);

                            foreach (Project project in projects)
                            {
                                if (project.isGroup && isParticipants)
                                {
                                    participantsString = await GetParticipantsString(await project.GetParticipants());
                                }
                                result = result + "\n" + CultureInfo.CurrentCulture.TextInfo
                                         .ToTitleCase(JackTheStudent.Program.classList
                                                      .Where(c => c.ShortName == project.Class)
                                                      .Select(c => c.Name)
                                                      .FirstOrDefault()) + " project for group " + project.GroupId + ", deadline is " + project.Date + participantsString;
                            }
                            await ctx.RespondAsync(result);
                        }
                    }
                } catch (Exception ex) {
                    Console.Error.WriteLine("[Jack] " + ex.ToString());
                    await ctx.RespondAsync("Show logs failed");

                    return;
                }
                return;
            }
            else if (classType == "." && span == "." && group != ".")
            {
                try {
                    using (var db = new JackTheStudentContext()){
                        var projects = db.Project
                                       .Where(x => x.GroupId == group)
                                       .ToList();
                        if (projects.Count == 0)
                        {
                            await ctx.RespondAsync("There are no projects logged for group " + group + "!");
                        }
                        else
                        {
                            string result             = String.Empty;
                            string participantsString = String.Empty;

                            if (isGroup == "1" || isGroup == ".")
                            {
                                isParticipants = await ParticipantsQuestion(ctx);
                            }

                            foreach (Project project in projects)
                            {
                                if (project.isGroup && isParticipants)
                                {
                                    participantsString = await GetParticipantsString(await project.GetParticipants());
                                }
                                result = result + "\n" + CultureInfo.CurrentCulture.TextInfo
                                         .ToTitleCase(JackTheStudent.Program.classList
                                                      .Where(c => c.ShortName == project.Class)
                                                      .Select(c => c.Name)
                                                      .FirstOrDefault()) + " project for group " + project.GroupId + ", deadline is/was " + project.Date + participantsString;
                            }
                            await ctx.RespondAsync(result);
                        }
                    }
                } catch (Exception ex) {
                    Console.Error.WriteLine("[Jack] " + ex.ToString());
                    await ctx.RespondAsync("Show logs failed");

                    return;
                }
                return;
            }
            else if (classType == "." && span == "planned" && group != ".")
            {
                try {
                    using (var db = new JackTheStudentContext()){
                        var projects = db.Project
                                       .Where(x => x.Date > DateTime.Now && x.GroupId == group)
                                       .ToList();
                        if (projects.Count == 0)
                        {
                            await ctx.RespondAsync("Wait what!? There are no projects planned for any class for group " + group + "!");
                        }
                        else
                        {
                            string result             = String.Empty;
                            string participantsString = String.Empty;

                            if (isGroup == "1" || isGroup == ".")
                            {
                                isParticipants = await ParticipantsQuestion(ctx);
                            }

                            foreach (Project project in projects)
                            {
                                if (project.isGroup && isParticipants)
                                {
                                    participantsString = await GetParticipantsString(await project.GetParticipants());
                                }

                                result = result + "\n" + CultureInfo.CurrentCulture.TextInfo
                                         .ToTitleCase(JackTheStudent.Program.classList
                                                      .Where(c => c.ShortName == project.Class)
                                                      .Select(c => c.Name)
                                                      .FirstOrDefault()) + " project for group " + project.GroupId + ", deadline is " + project.Date + participantsString;
                            }
                            await ctx.RespondAsync(result);
                        }
                    }
                } catch (Exception ex) {
                    Console.Error.WriteLine("[Jack] " + ex.ToString());
                    await ctx.RespondAsync("Show logs failed");

                    return;
                }
                return;
            }
            else if (classType != "." && span == "planned" && group != ".")
            {
                if (JackTheStudent.Program.classList.Any(c => c.ShortName == classType))
                {
                    try {
                        using (var db = new JackTheStudentContext()){
                            var projects = db.Project
                                           .Where(x => x.Date > DateTime.Now && x.Class == classType && x.GroupId == group)
                                           .ToList();

                            if (projects.Count == 0)
                            {
                                string response = "There are no " + JackTheStudent.Program.classList
                                                  .Where(c => c.ShortName == classType)
                                                  .Select(c => c.Name)
                                                  .FirstOrDefault() + " projects planned for group " + group + "!";
                                await ctx.RespondAsync(response);

                                return;
                            }
                            else
                            {
                                string result             = String.Empty;
                                string participantsString = String.Empty;

                                if (isGroup == "1" || isGroup == ".")
                                {
                                    isParticipants = await ParticipantsQuestion(ctx);
                                }

                                foreach (Project project in projects)
                                {
                                    if (project.isGroup && isParticipants)
                                    {
                                        participantsString = await GetParticipantsString(await project.GetParticipants());
                                    }
                                    result = result + "\n" + CultureInfo.CurrentCulture.TextInfo
                                             .ToTitleCase(JackTheStudent.Program.classList
                                                          .Where(c => c.ShortName == project.Class)
                                                          .Select(c => c.Name)
                                                          .FirstOrDefault()) + " project for group " + project.GroupId + ", deadline is " + project.Date + participantsString;
                                }
                                await ctx.RespondAsync(result);

                                return;
                            }
                        }
                    } catch (Exception ex) {
                        Console.Error.WriteLine("[Jack] " + ex.ToString());
                        await ctx.RespondAsync("Show logs failed");

                        return;
                    }
                }
                else
                {
                    await ctx.RespondAsync("Learn to read you dumbass. The command looks like: !projects <group> <group> <projectDate> <projectTime> Try again!");

                    return;
                }
            }
            else if (classType != "." && span == "." && group != ".")
            {
                if (JackTheStudent.Program.classList.Any(c => c.ShortName == classType))
                {
                    try {
                        using (var db = new JackTheStudentContext()){
                            var projects = db.Project
                                           .Where(x => x.Class == classType && x.GroupId == group)
                                           .ToList();

                            if (projects.Count == 0)
                            {
                                string response = "There is no project logged for " + JackTheStudent.Program.classList
                                                  .Where(c => c.ShortName == classType)
                                                  .Select(c => c.Name)
                                                  .FirstOrDefault() + " class " + "for group " + group + "!";;
                                await ctx.RespondAsync(response);

                                return;
                            }
                            else
                            {
                                string result             = String.Empty;
                                string participantsString = String.Empty;

                                if (isGroup == "1" || isGroup == ".")
                                {
                                    isParticipants = await ParticipantsQuestion(ctx);
                                }

                                foreach (Project project in projects)
                                {
                                    if (project.isGroup && isParticipants)
                                    {
                                        participantsString = await GetParticipantsString(await project.GetParticipants());
                                    }
                                    result = result + "\n" + CultureInfo.CurrentCulture.TextInfo
                                             .ToTitleCase(JackTheStudent.Program.classList
                                                          .Where(c => c.ShortName == project.Class)
                                                          .Select(c => c.Name)
                                                          .FirstOrDefault()) + " project for group " + project.GroupId + ", will happen / happened on " + project.Date + participantsString;
                                }
                                await ctx.RespondAsync(result);

                                return;
                            }
                        }
                    } catch (Exception ex) {
                        Console.Error.WriteLine("[Jack] " + ex.ToString());
                        await ctx.RespondAsync("Show logs failed");

                        return;
                    }
                }
                else
                {
                    await ctx.RespondAsync("Ya know there's only either all possible events or the ones that didn't happen right? Get yo facts straight negro!");

                    return;
                }
            }
            else
            {
                try {
                    using (var db = new JackTheStudentContext()){
                        var projects = db.Project.ToList();

                        if (projects.Count == 0)
                        {
                            string response = "There aren no projects logged!";
                            await ctx.RespondAsync(response);

                            return;
                        }
                        else
                        {
                            string result             = String.Empty;
                            string participantsString = String.Empty;

                            if (isGroup == "1" || isGroup == ".")
                            {
                                isParticipants = await ParticipantsQuestion(ctx);
                            }


                            foreach (Project project in projects)
                            {
                                if (project.isGroup && isParticipants)
                                {
                                    participantsString = await GetParticipantsString(await project.GetParticipants());
                                }
                                result = result + "\n" + CultureInfo.CurrentCulture.TextInfo
                                         .ToTitleCase(JackTheStudent.Program.classList
                                                      .Where(c => c.ShortName == project.Class)
                                                      .Select(c => c.Name)
                                                      .FirstOrDefault()) + " project for group " + project.GroupId + ", will happen / happened " + project.Date + participantsString;
                            }
                            await ctx.RespondAsync(result);

                            return;
                        }
                    }
                } catch (Exception ex) {
                    Console.Error.WriteLine("[Jack] " + ex.ToString());
                    await ctx.RespondAsync("Show logs failed");

                    return;
                }
            }
        }
        public async Task HomeworkLog(CommandContext ctx,
                                      [Description("\nTakes group IDs, type !group to retrieve all groups.\n")] string groupId              = "",
                                      [Description("\nTakes class' short names, type !class to retrive all classes.\n")] string classType   = "",
                                      [Description("\nTakes dates in dd/mm/yyyy format, accepts different separators.\n")] string eventDate = "",
                                      [Description("\nTakes time in hh:mm format.\n")] string eventTime = "",
                                      [Description("\nTakes additional information, multiple words must be wrapped with \"\".\n")] string additionalInfo = "",
                                      [Description("\nTakes material links, multiple links must be wrapped with \"\".\n")] string materials = "")
        {
            DateTime parsedEventDate = new DateTime();
            DateTime parsedEventTime = new DateTime();

            if (groupId == "")
            {
                await ctx.RespondAsync("Learn to read you dumbass. The command looks like: !homework <group> <class> <deadlineDate> <deadlineTime> Try again!");

                return;
            }
            else if (!JackTheStudent.Program.groupList.Contains(groupId))
            {
                await ctx.RespondAsync("There's no such group dumbass. Try again!");

                return;
            }
            else if (classType == "")
            {
                await ctx.RespondAsync("Learn to read you dumbass. The command looks like: !homework <group> <class> <deadlineDate> <deadlineTime> Try again!");

                return;
            }
            else if (!JackTheStudent.Program.classList.Any(c => c.ShortName == classType))
            {
                await ctx.RespondAsync("There's no such class, you high bruh?");

                return;
            }
            else if (eventDate == "")
            {
                await ctx.RespondAsync("There's date missing, fix it!");

                return;
            }
            else if (!DateTime.TryParse(eventDate, out parsedEventDate))
            {
                await ctx.RespondAsync("That's not a valid date you retard, learn to type!");

                return;
            }
            else if (eventTime == "")
            {
                await ctx.RespondAsync("There's time missing, fix it!");

                return;
            }
            else if (!DateTime.TryParse(eventTime, out parsedEventTime))
            {
                await ctx.RespondAsync("That's not a valid time you retard, learn to type!");

                return;
            }
            else
            {
                try {
                    using (var db = new JackTheStudentContext()){
                        var homeWork = new Homework {
                            Class          = classType,
                            Date           = parsedEventDate.Date.Add(parsedEventTime.TimeOfDay),
                            GroupId        = groupId,
                            LogById        = ctx.Message.Author.Id.ToString(),
                            LogByUsername  = ctx.Message.Author.Username + "#" + ctx.Message.Author.Discriminator,
                            AdditionalInfo = additionalInfo,
                            Materials      = materials
                        };
                        JackTheStudent.Program.homeworkList.Add(homeWork);
                        db.Homework.Add(homeWork);
                        await db.SaveChangesAsync();
                    }
                } catch (Exception ex) {
                    Console.Error.WriteLine("[Jack] " + ex.ToString());
                    await ctx.RespondAsync("Log failed");

                    return;
                }
                await ctx.RespondAsync("Homework logged successfully");

                return;
            }
        }
        public async Task HomeworkLogs(CommandContext ctx,
                                       [Description("\nTakes group IDs or \".\", type !group to retrieve all groups, usage of \".\" will tell Jack to retrieve homework for ALL groups.\n")] string group = ".",
                                       [Description("\nTakes class' short names or \".\", type !class to retrieve all classes, usage of \".\" will tell Jack to retrieve homework for ALL classes.\n")] string classType = ".",
                                       [Description("\nTakes \".\" or \"planned\", usage of \".\" will tell Jack to retrieve all LOGGED homework, \"planned\" retrieves only future events.\n")] string span             = "planned")
        {
            if (!JackTheStudent.Program.groupList.Contains(group) && group != ".")
            {
                await ctx.RespondAsync("There's no such group dumbass. Try again!");

                return;
            }
            else if (!JackTheStudent.Program.classList.Any(c => c.ShortName == classType) && classType != ".")
            {
                await ctx.RespondAsync("There's no such class, you high bruh?");

                return;
            }
            if (group == "." && classType == "." && span == "planned")
            {
                try {
                    using (var db = new JackTheStudentContext()){
                        var homeworks = db.Homework
                                        .Where(x => x.Date > DateTime.Now)
                                        .ToList();
                        if (homeworks.Count == 0)
                        {
                            await ctx.RespondAsync("Wait what!? There is literally no homework planned at all!");
                        }
                        else
                        {
                            string result = String.Empty;
                            foreach (Homework homework in homeworks)
                            {
                                result = result + "\n" + CultureInfo.CurrentCulture.TextInfo
                                         .ToTitleCase(JackTheStudent.Program.classList
                                                      .Where(c => c.ShortName == homework.Class)
                                                      .Select(c => c.Name)
                                                      .FirstOrDefault()) + " homework for group " + homework.GroupId + ", deadline is " + homework.Date;
                            }
                            await ctx.RespondAsync(result);
                        }
                    }
                } catch (Exception ex) {
                    Console.Error.WriteLine("[Jack] " + ex.ToString());
                    await ctx.RespondAsync("Show logs failed");

                    return;
                }
                return;
            }
            else if (classType == "." && span == "." && group != ".")
            {
                try {
                    using (var db = new JackTheStudentContext()){
                        var homeworks = db.Homework
                                        .Where(x => x.GroupId == group)
                                        .ToList();
                        if (homeworks.Count == 0)
                        {
                            await ctx.RespondAsync("Wait what!? There is no homework logged for group " + group + "!");
                        }
                        else
                        {
                            string result = String.Empty;
                            foreach (Homework homework in homeworks)
                            {
                                result = result + "\n" + CultureInfo.CurrentCulture.TextInfo
                                         .ToTitleCase(JackTheStudent.Program.classList
                                                      .Where(c => c.ShortName == homework.Class)
                                                      .Select(c => c.Name)
                                                      .FirstOrDefault()) + " homework for group " + homework.GroupId + ", deadline is/was " + homework.Date;
                            }
                            await ctx.RespondAsync(result);
                        }
                    }
                } catch (Exception ex) {
                    Console.Error.WriteLine("[Jack] " + ex.ToString());
                    await ctx.RespondAsync("Show logs failed");

                    return;
                }
                return;
            }
            else if (classType == "." && span == "planned" && group != ".")
            {
                try {
                    using (var db = new JackTheStudentContext()){
                        var homeworks = db.Homework
                                        .Where(x => x.Date > DateTime.Now && x.GroupId == group)
                                        .ToList();
                        if (homeworks.Count == 0)
                        {
                            await ctx.RespondAsync("Wait what!? There is no planned homework for group " + group + ", hmm... league?");
                        }
                        else
                        {
                            string result = String.Empty;
                            foreach (Homework homework in homeworks)
                            {
                                result = result + "\n" + CultureInfo.CurrentCulture.TextInfo
                                         .ToTitleCase(JackTheStudent.Program.classList
                                                      .Where(c => c.ShortName == homework.Class)
                                                      .Select(c => c.Name)
                                                      .FirstOrDefault()) + " homework for group " + homework.GroupId + ", deadline is " + homework.Date;
                            }
                            await ctx.RespondAsync(result);
                        }
                    }
                } catch (Exception ex) {
                    Console.Error.WriteLine("[Jack] " + ex.ToString());
                    await ctx.RespondAsync("Show logs failed");

                    return;
                }
                return;
            }
            else if (classType != "." && span == "planned" && group != ".")
            {
                if (JackTheStudent.Program.classList.Any(c => c.ShortName == classType))
                {
                    try {
                        using (var db = new JackTheStudentContext()){
                            var homeworks = db.Homework
                                            .Where(x => x.Date > DateTime.Now && x.Class == classType && x.GroupId == group)
                                            .ToList();

                            if (homeworks.Count == 0)
                            {
                                string response = "There is no " + JackTheStudent.Program.classList
                                                  .Where(c => c.ShortName == classType)
                                                  .Select(c => c.Name)
                                                  .FirstOrDefault() + " homework planned for group " + group + " at all!";
                                await ctx.RespondAsync(response);

                                return;
                            }
                            else
                            {
                                string result = String.Empty;
                                foreach (Homework homework in homeworks)
                                {
                                    result = result + "\n" + CultureInfo.CurrentCulture.TextInfo
                                             .ToTitleCase(JackTheStudent.Program.classList
                                                          .Where(c => c.ShortName == homework.Class)
                                                          .Select(c => c.Name)
                                                          .FirstOrDefault()) + " homework for group " + homework.GroupId + ", deadline is " + homework.Date;
                                }
                                await ctx.RespondAsync(result);

                                return;
                            }
                        }
                    } catch (Exception ex) {
                        Console.Error.WriteLine("[Jack] " + ex.ToString());
                        await ctx.RespondAsync("Show logs failed");

                        return;
                    }
                }
                else
                {
                    await ctx.RespondAsync("Learn to read you dumbass. The command looks like: !homeworks <group> <group> <eventDate> <eventTime> Try again!");

                    return;
                }
            }
            else if (classType != "." && span == "." && group != ".")
            {
                if (JackTheStudent.Program.classList.Any(c => c.ShortName == classType))
                {
                    try {
                        using (var db = new JackTheStudentContext()){
                            var homeworks = db.Homework
                                            .Where(x => x.Class == classType && x.GroupId == group)
                                            .ToList();

                            if (homeworks.Count == 0)
                            {
                                string response = "There is no homework logged for " + JackTheStudent.Program.classList
                                                  .Where(c => c.ShortName == classType)
                                                  .Select(c => c.Name)
                                                  .FirstOrDefault() + " class " + "for group " + group + "!";
                                await ctx.RespondAsync(response);

                                return;
                            }
                            else
                            {
                                string result = String.Empty;
                                foreach (Homework homework in homeworks)
                                {
                                    result = result + "\n" + CultureInfo.CurrentCulture.TextInfo
                                             .ToTitleCase(JackTheStudent.Program.classList
                                                          .Where(c => c.ShortName == homework.Class)
                                                          .Select(c => c.Name)
                                                          .FirstOrDefault()) + " homework for group " + homework.GroupId + ", deadline is/was " + homework.Date;
                                }
                                await ctx.RespondAsync(result);

                                return;
                            }
                        }
                    } catch (Exception ex) {
                        Console.Error.WriteLine("[Jack] " + ex.ToString());
                        await ctx.RespondAsync("Show logs failed");

                        return;
                    }
                }
                else
                {
                    await ctx.RespondAsync("Ya know there's only either all possible events or the ones that didn't happen right? Get yo facts straight negro!");

                    return;
                }
            }
            else
            {
                try {
                    using (var db = new JackTheStudentContext()){
                        var homeworks = db.Homework.ToList();

                        if (homeworks.Count == 0)
                        {
                            string response = "There is no logged homework!";
                            await ctx.RespondAsync(response);

                            return;
                        }
                        else
                        {
                            string result = String.Empty;
                            foreach (Homework homework in homeworks)
                            {
                                result = result + "\n" + CultureInfo.CurrentCulture.TextInfo
                                         .ToTitleCase(JackTheStudent.Program.classList
                                                      .Where(c => c.ShortName == homework.Class)
                                                      .Select(c => c.Name)
                                                      .FirstOrDefault()) + " homework for group " + homework.GroupId + ", deadline is/was " + homework.Date;
                            }
                            await ctx.RespondAsync(result);

                            return;
                        }
                    }
                } catch (Exception ex) {
                    Console.Error.WriteLine("[Jack] " + ex.ToString());
                    await ctx.RespondAsync("Show logs failed");

                    return;
                }
            }
        }
        public async Task SemeterGroup(CommandContext ctx)
        {
            List <Group> backupGroups = new List <Group>();

            await ctx.RespondAsync("Are you absolutely sure you wanna do it?");

            var intr         = ctx.Client.GetInteractivity();
            var sureResponse = await intr.WaitForMessageAsync(
                c => c.Author.Id == ctx.Message.Author.Id,
                TimeSpan.FromSeconds(5)
                );

            if (sureResponse.Result.Content.ToLower() != "yes" || sureResponse.Result == null)
            {
                await ctx.RespondAsync("Aborting, all good");

                return;
            }

            using (var context = new JackTheStudentContext()) {
                backupGroups = context.Group.ToList();
                var truncateText = "truncate table `group`";
                try {
                    await context.Database.ExecuteSqlRawAsync(truncateText);
                } catch (Exception ex) {
                    Console.Error.WriteLine("[Jack] " + ex.ToString());
                    await ctx.RespondAsync("Truncate failed");

                    return;
                }
                await context.SaveChangesAsync();

                await ctx.RespondAsync("Truncate successful");
            }

            using (var db = new JackTheStudentContext()){
                await ctx.RespondAsync("Let's populate the table with new data, how many groups are there for the new semester?");

                var amountOfGroupsResponse = await intr.WaitForMessageAsync(
                    c => c.Author.Id == ctx.Message.Author.Id,
                    TimeSpan.FromSeconds(10)
                    );

                if (amountOfGroupsResponse.Result == null)
                {
                    await RestoreGroups(backupGroups, ctx);

                    return;
                }
                short groupsCount = 0;

                while (!Int16.TryParse(amountOfGroupsResponse.Result.Content, out groupsCount) || groupsCount < 1)
                {
                    await ctx.RespondAsync("That's not a valid number, try again.");

                    amountOfGroupsResponse = await intr.WaitForMessageAsync(
                        c => c.Author.Id == ctx.Message.Author.Id,
                        TimeSpan.FromSeconds(10)
                        );

                    if (amountOfGroupsResponse.TimedOut)
                    {
                        await RestoreGroups(backupGroups, ctx);

                        return;
                    }
                }

                for (int i = 1; i <= groupsCount; i++)
                {
                    await ctx.RespondAsync($"What's the ID of the {i} group? Answer with ID");

                    var groupId = await intr.WaitForMessageAsync(
                        c => c.Author.Id == ctx.Message.Author.Id,
                        TimeSpan.FromSeconds(30)
                        );

                    if (groupId.Result == null)
                    {
                        await RestoreGroups(backupGroups, ctx);

                        return;
                    }

                    var newGroup = new Group {
                        GroupId = groupId.Result.Content
                    };
                    db.Group.Add(newGroup);
                    await ctx.RespondAsync($"Added group with ID: {newGroup.GroupId}.");

                    Task.Delay(1000).Wait();
                }

                try {
                    await db.SaveChangesAsync();
                } catch (Exception ex) {
                    Console.Error.WriteLine("[Jack] " + ex.ToString());
                    await RestoreGroups(backupGroups, ctx);

                    return;
                }
                await ctx.RespondAsync("Group table repopulated successfully");
            }
            return;
        }
        public async Task TeamsLinkLogs(CommandContext ctx,
                                        [Description("\nTakes class' short names or \".\", type !class to retrieve all classes, usage of \".\" will tell Jack to retrieve teamsLink for ALL classes.\n")] string uniClass  = ".",
                                        [Description("\nTakes class' short names or \".\", type !class to retrieve all classes, usage of \".\" will tell Jack to retrieve teamsLink for ALL classes.\n")] string classType = ".",
                                        [Description("\nTakes group IDs or \".\", type !group to retrieve all groups, usage of \".\" will tell Jack to retrieve teamsLink for ALL groups.\n")] string group = ".")
        {
            string chosenUniClass    = String.Empty;
            string chosenGroupString = String.Empty;
            string chosenClassType   = String.Empty;
            string result            = String.Empty;

            if (!JackTheStudent.Program.classList.Any(c => c.ShortName == uniClass) && uniClass != ".")
            {
                await ctx.RespondAsync("There's no such class, you high bruh?");

                return;
            }
            else if (!JackTheStudent.Program.classTypeList.Any(c => c.ShortName == classType) && classType != ".")
            {
                await ctx.RespondAsync("There's no such class type!");

                return;
            }
            else if (!JackTheStudent.Program.groupList.Contains(group) && group != ".")
            {
                await ctx.RespondAsync("There's no such group dumbass. Try again!");

                return;
            }
            if (uniClass == "." && classType == "." && group == ".")
            {
                try {
                    using (var db = new JackTheStudentContext()){
                        var teamsLinks = db.TeamsLink
                                         .ToList();
                        if (teamsLinks.Count == 0)
                        {
                            await ctx.RespondAsync("There are no teams links logged!");
                        }
                        else
                        {
                            foreach (TeamsLink teamsLink in teamsLinks)
                            {
                                chosenClassType = teamsLink.GetFullClassType();
                                chosenUniClass  = teamsLink.GetFullClassName();

                                if (teamsLink.GroupId == ".")
                                {
                                    chosenGroupString = "everyone";
                                }
                                else
                                {
                                    chosenGroupString = $"group {teamsLink.GroupId}";
                                }
                                result = result + "\n" + CultureInfo.CurrentCulture.TextInfo.ToTitleCase(chosenUniClass) + $" {chosenClassType} teams link for {chosenGroupString}, takes place on {teamsLink.Date}. Link: {teamsLink.Link}";
                            }
                            await ctx.RespondAsync(result);
                        }
                    }
                } catch (Exception ex) {
                    Console.Error.WriteLine("[Jack] " + ex.ToString());
                    await ctx.RespondAsync("Show logs failed");

                    return;
                }
                return;
            }
            else if (uniClass != "." && classType == "." && group == ".")
            {
                try {
                    chosenUniClass = JackTheStudent.Program.classList.Where(c => c.ShortName == uniClass).Select(c => c.Name).FirstOrDefault();
                    using (var db = new JackTheStudentContext()){
                        var teamsLinks = db.TeamsLink
                                         .Where(x => x.Class == uniClass)
                                         .ToList();
                        if (teamsLinks.Count == 0)
                        {
                            await ctx.RespondAsync($"There are no {chosenUniClass} teams links logged.");
                        }
                        else
                        {
                            foreach (TeamsLink teamsLink in teamsLinks)
                            {
                                chosenClassType = teamsLink.GetFullClassType();

                                if (teamsLink.GroupId == ".")
                                {
                                    chosenGroupString = "everyone";
                                }
                                else
                                {
                                    chosenGroupString = $"group {teamsLink.GroupId}";
                                }
                                result = result + "\n" + CultureInfo.CurrentCulture.TextInfo.ToTitleCase(chosenUniClass) + $" {chosenClassType} teams link for {chosenGroupString}, takes place on {teamsLink.Date}. Link: {teamsLink.Link}";
                            }
                            await ctx.RespondAsync(result);
                        }
                    }
                } catch (Exception ex) {
                    Console.Error.WriteLine("[Jack] " + ex.ToString());
                    await ctx.RespondAsync("Show logs failed");

                    return;
                }
                return;
            }
            else if (uniClass != "." && classType != "." && group == ".")
            {
                try {
                    chosenUniClass  = JackTheStudent.Program.classList.Where(c => c.ShortName == uniClass).Select(c => c.Name).FirstOrDefault();
                    chosenClassType = JackTheStudent.Program.classTypeList.Where(c => c.ShortName == classType).Select(c => c.Name).FirstOrDefault();
                    using (var db = new JackTheStudentContext()){
                        var teamsLinks = db.TeamsLink
                                         .Where(x => x.Class == uniClass && x.ClassType == classType)
                                         .ToList();
                        if (teamsLinks.Count == 0)
                        {
                            await ctx.RespondAsync($"There are no {chosenUniClass} {chosenClassType} teams links logged.");
                        }
                        else
                        {
                            foreach (TeamsLink teamsLink in teamsLinks)
                            {
                                if (teamsLink.GroupId == ".")
                                {
                                    chosenGroupString = "everyone";
                                }
                                else
                                {
                                    chosenGroupString = $"group {teamsLink.GroupId}";
                                }
                                result = result + "\n" + CultureInfo.CurrentCulture.TextInfo.ToTitleCase(chosenUniClass) + $" {chosenClassType} teams link for {chosenGroupString}, takes place on {teamsLink.Date}. Link: {teamsLink.Link}";
                            }
                            await ctx.RespondAsync(result);
                        }
                    }
                } catch (Exception ex) {
                    Console.Error.WriteLine("[Jack] " + ex.ToString());
                    await ctx.RespondAsync("Show logs failed");

                    return;
                }
                return;
            }
            else if (uniClass == "." && classType != "." && group == ".")
            {
                chosenClassType = JackTheStudent.Program.classTypeList.Where(c => c.ShortName == classType).Select(c => c.Name).FirstOrDefault();
                try {
                    using (var db = new JackTheStudentContext()){
                        var teamsLinks = db.TeamsLink
                                         .Where(x => x.ClassType == classType)
                                         .ToList();

                        if (teamsLinks.Count == 0)
                        {
                            string response = $"There are no {chosenClassType}s teams links logged!";
                            await ctx.RespondAsync(response);

                            return;
                        }
                        else
                        {
                            foreach (TeamsLink teamsLink in teamsLinks)
                            {
                                chosenUniClass = teamsLink.GetFullClassName();

                                if (teamsLink.GroupId == ".")
                                {
                                    chosenGroupString = "everyone";
                                }
                                else
                                {
                                    chosenGroupString = $"group {teamsLink.GroupId}";
                                }
                                result = result + "\n" + CultureInfo.CurrentCulture.TextInfo.ToTitleCase(chosenUniClass) + $" {chosenClassType} teams link for {chosenGroupString}, takes place on {teamsLink.Date}. Link: {teamsLink.Link}";
                            }
                            await ctx.RespondAsync(result);

                            return;
                        }
                    }
                } catch (Exception ex) {
                    Console.Error.WriteLine("[Jack] " + ex.ToString());
                    await ctx.RespondAsync("Show logs failed");

                    return;
                }
            }
            else if (uniClass == "." && classType != "." && group != ".")
            {
                chosenClassType   = JackTheStudent.Program.classTypeList.Where(c => c.ShortName == classType).Select(c => c.Name).FirstOrDefault();
                chosenGroupString = $"group {group}";
                try {
                    using (var db = new JackTheStudentContext()){
                        var teamsLinks = db.TeamsLink
                                         .Where(x => x.ClassType == classType && x.GroupId == group)
                                         .ToList();

                        if (teamsLinks.Count == 0)
                        {
                            string response = $"There are no {chosenClassType}s teams links logged for group {group}!";
                            await ctx.RespondAsync(response);

                            return;
                        }
                        else
                        {
                            result = String.Empty;
                            foreach (TeamsLink teamsLink in teamsLinks)
                            {
                                chosenUniClass = teamsLink.GetFullClassName();
                                result         = result + "\n" + CultureInfo.CurrentCulture.TextInfo.ToTitleCase(chosenUniClass) + $" {chosenClassType} teams link for {chosenGroupString}, takes place on {teamsLink.Date}. Link: {teamsLink.Link}";
                            }
                            await ctx.RespondAsync(result);

                            return;
                        }
                    }
                } catch (Exception ex) {
                    Console.Error.WriteLine("[Jack] " + ex.ToString());
                    await ctx.RespondAsync("Show logs failed");

                    return;
                }
            }
            else if (uniClass != "." && classType == "." && group != ".")
            {
                chosenUniClass    = JackTheStudent.Program.classList.Where(c => c.ShortName == uniClass).Select(c => c.Name).FirstOrDefault();
                chosenGroupString = $"group {group}";
                try {
                    using (var db = new JackTheStudentContext()){
                        var teamsLinks = db.TeamsLink
                                         .Where(x => x.Class == uniClass && x.GroupId == group)
                                         .ToList();

                        if (teamsLinks.Count == 0)
                        {
                            string response = $"There are no {chosenUniClass} teams links logged for group {group} logged!";
                            await ctx.RespondAsync(response);

                            return;
                        }
                        else
                        {
                            foreach (TeamsLink teamsLink in teamsLinks)
                            {
                                teamsLink.GetFullClassType();
                                result = result + "\n" + CultureInfo.CurrentCulture.TextInfo.ToTitleCase(chosenUniClass) + $" {chosenClassType} teams link for {chosenGroupString}, takes place on {teamsLink.Date}. Link: {teamsLink.Link}";
                            }
                            await ctx.RespondAsync(result);

                            return;
                        }
                    }
                } catch (Exception ex) {
                    Console.Error.WriteLine("[Jack] " + ex.ToString());
                    await ctx.RespondAsync("Show logs failed");

                    return;
                }
            }
            else
            {
                chosenUniClass    = JackTheStudent.Program.classList.Where(c => c.ShortName == uniClass).Select(c => c.Name).FirstOrDefault();
                chosenClassType   = JackTheStudent.Program.classTypeList.Where(c => c.ShortName == classType).Select(c => c.Name).FirstOrDefault();
                chosenGroupString = $"group {group}";
                try {
                    using (var db = new JackTheStudentContext()){
                        var teamsLinks = db.TeamsLink
                                         .Where(x => x.Class == uniClass && x.ClassType == classType && x.GroupId == group)
                                         .ToList();

                        if (teamsLinks.Count == 0)
                        {
                            string response = $"There are no {chosenUniClass} {chosenClassType}s for group {group} logged!";
                            await ctx.RespondAsync(response);

                            return;
                        }
                        else
                        {
                            foreach (TeamsLink teamsLink in teamsLinks)
                            {
                                result = result + "\n" + CultureInfo.CurrentCulture.TextInfo.ToTitleCase(chosenUniClass) + $" {chosenClassType} teams link for {chosenGroupString}, takes place on {teamsLink.Date}. Link: {teamsLink.Link}";
                            }
                            await ctx.RespondAsync(result);

                            return;
                        }
                    }
                } catch (Exception ex) {
                    Console.Error.WriteLine("[Jack] " + ex.ToString());
                    await ctx.RespondAsync("Show logs failed");

                    return;
                }
            }
        }
Пример #14
0
        async Task InitBot(string[] args)
        {
            try {
                using (var db = new JackTheStudentContext()){
                    classTypeList     = db.ClassType.ToList();
                    groupList         = db.Group.Select(x => x.GroupId).ToList();
                    classList         = db.Class.ToList();
                    reminderList      = db.PersonalReminder.ToList();
                    examList          = db.Exam.ToList();
                    shortTestList     = db.ShortTest.ToList();
                    ClassMaterialList = db.ClassMaterial.ToList();
                    homeworkList      = db.Homework.ToList();
                    labReportList     = db.LabReport.ToList();
                    projectList       = db.Project.ToList();
                    testList          = db.Test.ToList();
                    teamsLinkList     = db.TeamsLink.ToList();
                }
            } catch (Exception ex) {
                Console.Error.WriteLine("[Jack] " + ex.ToString());
            }

            try {
                using (var fileStream = File.OpenRead(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "resource", "quotes.txt")))
                    using (var reader = new StreamReader(fileStream)) {
                        String quote;
                        while ((quote = reader.ReadLine()) != null)
                        {
                            quotes.Add(quote);
                        }
                        reader.Close();
                        fileStream.Close();
                    }
            } catch (Exception ex) {
                Console.Error.WriteLine("[Jack] " + ex.ToString());
            }

            CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();

            culture.DateTimeFormat.ShortDatePattern = "dd-MM-yyyy HH:mm";
            culture.DateTimeFormat.LongTimePattern  = "";
            Thread.CurrentThread.CurrentCulture     = culture;

            try {
                Console.WriteLine("[Jack] Welcome!");
                _cts = new CancellationTokenSource();

                Console.WriteLine("[Jack] Loading config file..");
                _config = new ConfigurationBuilder()
                          .SetBasePath(Directory.GetCurrentDirectory())
                          .AddJsonFile("config.json", optional: false, reloadOnChange: true)
                          .Build();

                Console.WriteLine("[Jack] Creating discord client..");

                _discord = new DiscordClient(new DiscordConfiguration {
                    Token         = Environment.GetEnvironmentVariable("BOT_TOKEN"),
                    TokenType     = TokenType.Bot,
                    AutoReconnect = true
                });


                _discord.UseInteractivity(new InteractivityConfiguration()
                {
                    PaginationBehaviour = PaginationBehaviour.WrapAround,
                    Timeout             = TimeSpan.FromSeconds(30)
                });

                _commands = _discord.UseCommandsNext(new CommandsNextConfiguration {
                    StringPrefixes      = new string[] { _config.GetValue <string>("discord:CommandPrefix") },
                    EnableDms           = true,
                    EnableMentionPrefix = true,
                    DmHelp = true
                });

                Console.WriteLine("[Jack] Loading command modules..");

                _commands.RegisterCommands(Assembly.GetExecutingAssembly());

                Console.WriteLine("[Jack] Command modules loaded.");

                _discord.Ready += OnClientReady;

                RunAsync(args).Wait();
            }
            catch (Exception ex) {
                Console.Error.WriteLine("[Jack] " + ex.ToString());
            }
        }
        public async Task SemesterClass(CommandContext ctx)
        {
            List <Class> backupClasses = new List <Class>();

            await ctx.RespondAsync("Are you absolutely sure you want to do it?");

            var intr         = ctx.Client.GetInteractivity();
            var sureResponse = await intr.WaitForMessageAsync(
                c => c.Author.Id == ctx.Message.Author.Id,
                TimeSpan.FromSeconds(5)
                );

            if (sureResponse.Result.Content.ToLower() != "yes" || sureResponse.Result == null)
            {
                await ctx.RespondAsync("Aborting, all good");

                return;
            }

            using (var context = new JackTheStudentContext()) {
                backupClasses = context.Class.ToList();
                var truncateText = "truncate table class";
                try {
                    await context.Database.ExecuteSqlRawAsync(truncateText);
                } catch (Exception ex) {
                    Console.Error.WriteLine("[Jack] " + ex.ToString());
                    await ctx.RespondAsync("Truncate failed");

                    return;
                }
                await context.SaveChangesAsync();

                await ctx.RespondAsync("Truncate successful");
            }



            using (var db = new JackTheStudentContext()){
                await ctx.RespondAsync("Let's populate the table with new data, how many classes are there for the new semester?");

                var amountOfClassesResponse = await intr.WaitForMessageAsync(
                    c => c.Author.Id == ctx.Message.Author.Id,
                    TimeSpan.FromSeconds(10)
                    );

                if (amountOfClassesResponse.Result == null)
                {
                    await RestoreClasses(backupClasses, ctx);

                    return;
                }
                short classesCount = 0;
                while (!Int16.TryParse(amountOfClassesResponse.Result.Content, out classesCount) || classesCount < 2)
                {
                    await ctx.RespondAsync("That's not a valid number, try again.");

                    amountOfClassesResponse = await intr.WaitForMessageAsync(
                        c => c.Author.Id == ctx.Message.Author.Id,
                        TimeSpan.FromSeconds(10)
                        );

                    if (amountOfClassesResponse.TimedOut)
                    {
                        await RestoreClasses(backupClasses, ctx);

                        return;
                    }
                }

                if (amountOfClassesResponse.Result == null)
                {
                    await RestoreClasses(backupClasses, ctx);

                    return;
                }

                for (int i = 1; i <= classesCount; i++)
                {
                    await ctx.RespondAsync($"What's the name and shortname of the {i} class? Answer with NAME SHORTNAME");

                    var newClassNames = await intr.WaitForMessageAsync(
                        c => c.Author.Id == ctx.Message.Author.Id,
                        TimeSpan.FromSeconds(30)
                        );

                    if (newClassNames.TimedOut)
                    {
                        await RestoreClasses(backupClasses, ctx);

                        return;
                    }

                    string[] classArray = newClassNames.Result.Content.Split(new Char[] { ' ' });

                    while (classArray.Count() != 2)
                    {
                        await ctx.RespondAsync("Try again -.-");

                        newClassNames = await intr.WaitForMessageAsync(
                            c => c.Author.Id == ctx.Message.Author.Id,
                            TimeSpan.FromSeconds(30)
                            );

                        classArray = newClassNames.Result.Content.Split(new Char[] { ' ' });

                        if (newClassNames.TimedOut)
                        {
                            await RestoreClasses(backupClasses, ctx);

                            return;
                        }
                    }

                    var newClass = new Class {
                        Name      = classArray[0],
                        ShortName = classArray[1]
                    };
                    db.Class.Add(newClass);
                    await ctx.RespondAsync($"Added class: {newClass.Name} with short name: {newClass.ShortName}");

                    Task.Delay(1000).Wait();
                }

                try {
                    await db.SaveChangesAsync();
                } catch (Exception ex) {
                    Console.Error.WriteLine("[Jack] " + ex.ToString());
                    await RestoreClasses(backupClasses, ctx);

                    return;
                }
                await db.SaveChangesAsync();

                await ctx.RespondAsync("Class table repopulated successfully");
            }
            return;
        }
        public async Task TeamsLinkLog(CommandContext ctx,
                                       [Description("\nTakes class' short names, type !class to retrive all classes.\n")] string uniClass         = "",
                                       [Description("\nTakes class' short names, type !class to retrive all classes.\n")] string classType        = "",
                                       [Description("\nTakes dates in dd/mm/yyyy format, accepts different separators.\n")] string eventDayOfWeek = "",
                                       [Description("\nTakes time in hh:mm format.\n")] string eventTime = "",
                                       [Description("\nTakes group IDs, type !group to retrieve all groups.\n")] string groupId = ".",
                                       [Description("\nTakes time in hh:mm format.\n")] string link = "",
                                       [Description("\nTakes additional information, multiple words must be wrapped with \"\".\n")] string additionalInfo = "")
        {
            DayOfWeek parsedEventDayOfWeek = new DayOfWeek();
            DateTime  parsedEventTime      = new DateTime();

            if (uniClass == "")
            {
                await ctx.RespondAsync("Learn to read you dumbass. The command looks like: !teamsLink <group> <class> <teamsLinkDate> <teamsLinkTime> Try again!");

                return;
            }
            else if (!JackTheStudent.Program.classList.Any(c => c.ShortName == uniClass))
            {
                await ctx.RespondAsync("There's no such class, you high bruh?");

                return;
            }
            else if (classType == "")
            {
                await ctx.RespondAsync("Class type is missing!");

                return;
            }
            else if (!JackTheStudent.Program.classTypeList.Any(c => c.ShortName == classType))
            {
                await ctx.RespondAsync("There's no such class type -_- . Try again!");

                return;
            }
            else if (eventDayOfWeek == "")
            {
                await ctx.RespondAsync("There's date missing, fix it!");

                return;
            }
            else if (!DayOfWeek.TryParse(eventDayOfWeek, out parsedEventDayOfWeek))
            {
                await ctx.RespondAsync("That's not a valid date you retard, learn to type!");

                return;
            }
            else if (eventTime == "")
            {
                await ctx.RespondAsync("There's time missing, fix it!");

                return;
            }
            else if (!DateTime.TryParse(eventTime, out parsedEventTime))
            {
                await ctx.RespondAsync("That's not a valid time you retard, learn to type!");

                return;
            }
            else if (link == "")
            {
                await ctx.RespondAsync("Learn to read you dumbass. The command looks like: !teamsLink <group> <class> <teamsLinkDate> <teamsLinkTime> Try again!");

                return;
            }
            else if (!link.Contains("teams.microsoft.com/l/meetup-join/19%3ameeting"))
            {
                await ctx.RespondAsync("That's not a valid teams meetup link!");

                return;
            }
            else if (!JackTheStudent.Program.groupList.Contains(groupId) && groupId != ".")
            {
                await ctx.RespondAsync("There's no such group dumbass. Try again!");

                return;
            }
            else
            {
                try {
                    using (var db = new JackTheStudentContext()){
                        var teamsLink = new TeamsLink {
                            Class          = uniClass,
                            ClassType      = classType,
                            Date           = $"{parsedEventDayOfWeek} {eventTime}",
                            GroupId        = groupId,
                            Link           = link,
                            LogById        = ctx.Message.Author.Id.ToString(),
                            LogByUsername  = ctx.Message.Author.Username + "#" + ctx.Message.Author.Discriminator,
                            AdditionalInfo = additionalInfo
                        };
                        JackTheStudent.Program.teamsLinkList.Add(teamsLink);
                        db.TeamsLink.Add(teamsLink);
                        await db.SaveChangesAsync();
                    }
                } catch (Exception ex) {
                    Console.Error.WriteLine("[Jack] " + ex.ToString());
                    await ctx.RespondAsync("Log failed");

                    return;
                }
                await ctx.RespondAsync("Teams link logged successfully");

                return;
            }
        }
Пример #17
0
        public async Task ExamLog(CommandContext ctx,
                                  [Description("\nTakes class' short names, type !class to retrive all classes.\n")] string classType  = "",
                                  [Description("\nTakes dates in dd/mm/yyyy format, accepts different separators.\n")] string examDate = "",
                                  [Description("\nTakes time in hh:mm format.\n")] string examTime = "",
                                  [Description("\nTakes additional information, multiple words must be wrapped with \"\".\n")] string additionalInfo = "",
                                  [Description("\nTakes material links, multiple links must be wrapped with \"\".\n")] string materials = "")
        {
            DateTime parsedEventDate = new DateTime();
            DateTime parsedEventTime = new DateTime();

            if (classType == "")
            {
                await ctx.RespondAsync("Learn to read you dumbass. The command looks like: !exam <class> <examDate> <examTime> Try again!");

                return;
            }
            else if (!JackTheStudent.Program.classList.Any(c => c.ShortName == classType))
            {
                await ctx.RespondAsync("There's no such class, you high bruh?");

                return;
            }
            else if (examDate == "")
            {
                await ctx.RespondAsync("There's date missing, fix it!");

                return;
            }
            else if (!DateTime.TryParse(examDate, out parsedEventDate))
            {
                await ctx.RespondAsync("That's not a valid date you retard, learn to type!");

                return;
            }
            else if (examTime == "")
            {
                await ctx.RespondAsync("There's time missing, fix it!");

                return;
            }
            else if (!DateTime.TryParse(examTime, out parsedEventTime))
            {
                await ctx.RespondAsync("That's not a valid time you retard, learn to type!");

                return;
            }
            else
            {
                try {
                    using (var db = new JackTheStudentContext()){
                        var exam = new Exam {
                            ClassShortName = classType,
                            Class          = JackTheStudent.Program.classList.Where(e => e.ShortName == classType).Select(e => e.Name).FirstOrDefault(),
                            Date           = parsedEventDate.Date.Add(parsedEventTime.TimeOfDay),
                            LogById        = ctx.Message.Author.Id.ToString(),
                            LogByUsername  = ctx.Message.Author.Username + "#" + ctx.Message.Author.Discriminator,
                            AdditionalInfo = additionalInfo,
                            Materials      = materials
                        };
                        JackTheStudent.Program.examList.Add(exam);
                        db.Exam.Add(exam);
                        await db.SaveChangesAsync();
                    }
                } catch (Exception ex) {
                    Console.Error.WriteLine("[Jack] " + ex.ToString());
                    await ctx.RespondAsync("Exam log failed");

                    return;
                }
                await ctx.RespondAsync("Logged successfully");

                return;
            }
        }