public override bool SameSubject(ClassHomework hwk) { var subject = hwk.Subject; subject = subject.Replace("Maths", "Mathematics"); return((subject == Subject || SubjectAliases.Contains(subject)) && hwk.SetBy == Teacher); }
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); } } } } }