Beispiel #1
0
        public override bool SameSubject(ClassHomework hwk)
        {
            var subject = hwk.Subject;

            subject = subject.Replace("Maths", "Mathematics");
            return((subject == Subject || SubjectAliases.Contains(subject)) && hwk.SetBy == Teacher);
        }
Beispiel #2
0
        public static void RefreshHomework(bool overrideTimeout = false)
        {
            TimeSpan diff = DateTime.Now - lastSentRequests;

            if (diff.TotalMinutes < 15 && !overrideTimeout)
            {
                return;        // don't update if spammy
            }
#pragma warning disable CS0162 // Unreachable code detected
            lastSentRequests = DateTime.Now;
#pragma warning restore CS0162 // Unreachable code detected
            AllHomework = new Dictionary <int, ClassHomework>();
            foreach (var u in Users)
            {
                u.Homework = new List <IHomework>();
                foreach (var cls in u.Classes)
                {
                    var clsObj = Classes.FirstOrDefault(x => x.Key == cls).Value;
                    if (clsObj != null && clsObj.Users.Contains(u) == false)
                    {
                        clsObj.Users.Add(u);
                    }
                }
                if (u.IsNotifyOnly)
                {
                    continue; // the user hasn't given their password, and only wants to recieve Hwk via classes.
                }
                IHomework[] homework = null;
                try
                {
                    homework = u.Client.GetHomework();
                } catch (EdulinkException ex)
                {
                    LogMsg($"For {u.UserName}: {ex}", LogSeverity.Error, "EdulinkClientError");
                    try
                    {
                        BotUser bUser   = Program.GetUser(u.User);
                        int     errdiff = DateTime.Now.DayOfYear - bUser.DayOfEdulinkLastError;
                        if (errdiff < 5)
                        {
                            continue; // don't send an error
                        }
                        bUser.DayOfEdulinkLastError = DateTime.Now.DayOfYear;
#if DEBUG
                        if (u.UserName != "cheale14")
                        {
                            continue; // don't send a message to others if we are debug
                        }
#endif
                        u.User.SendMessageAsync($"While attempting to login to your EduLink account to find your homework, the bot errored" +
                                                $"The error is as follows: `{ex.Message}`");
                    } catch (Exception _ex)
                    {
                        LogMsg($"Failed to send to {u.Name ?? "<unable to get name>"}: {_ex}", LogSeverity.Error, "EdulinkInnerError");
                    }
                } catch (Exception ex)
                {
                    LogMsg(ex.ToString(), LogSeverity.Error, "EdulinkOtherError");
                }
                if (homework == null) // the above failed to get the hwk
                {
                    continue;
                }
                List <ClassHomework> current = homework.Where(x => x.Current).Select(x => ClassHomework.Create(x, ((Homework)x).Client)).ToList();
                foreach (var hwk in current)
                {
                    u.Homework.Add(hwk);
                    if (AllHomework.ContainsKey(hwk.Id))
                    {
                        // we have it, so add us to the applies to
                        AllHomework[hwk.Id].AppliesTo.Add(u);
                    }
                    else
                    {
                        AllHomework.Add(hwk.Id, hwk);
                        hwk.AppliesTo.Add(u);
                        BaseClass cls = null;
                        foreach (var c in u.Classes)
                        {
                            var clas = Classes.FirstOrDefault(x => x.Key == c);
                            if (clas.Value.SameSubject(hwk))
                            {
                                cls = clas.Value;
                                break;
                            }
                        }
                        if (cls != null && hwk.GivenTo.Contains(cls) == false)
                        {
                            hwk.GivenTo.Add(cls);
                        }
                    }
                }
            }
        }