diff --git a/modules/ssau_parser/shedule.go b/modules/ssau_parser/shedule.go index a9148e5..e1210d6 100644 --- a/modules/ssau_parser/shedule.go +++ b/modules/ssau_parser/shedule.go @@ -68,8 +68,33 @@ func Parse(doc *goquery.Document, isGroup bool, sheduleId int64, week int) (*She }) var shedule [][]Lesson + var firstNum int for t := 0; t < len(raw_times); t += 2 { + if t == 0 { + begin, err := time.Parse(" 15:04 -07", raw_times[t]) + if err != nil { + return nil, err + } + switch begin.Hour() { + case 8: + firstNum = 0 + case 9: + firstNum = 1 + case 11: + firstNum = 2 + case 13: + firstNum = 3 + case 15: + firstNum = 4 + case 17: + firstNum = 5 + case 18: + firstNum = 6 + case 20: + firstNum = 7 + } + } var time_line []Lesson for d, date := range raw_dates { begin_raw := date + raw_times[t] @@ -86,7 +111,7 @@ func Parse(doc *goquery.Document, isGroup bool, sheduleId int64, week int) (*She lesson := Lesson{ Begin: begin, End: end, - NumInShedule: t / 2, + NumInShedule: t/2 + firstNum, SubLessons: lessons[idx], } time_line = append(time_line, lesson) diff --git a/modules/tg/handlers.go b/modules/tg/handlers.go index c433cde..1bc8fb8 100644 --- a/modules/tg/handlers.go +++ b/modules/tg/handlers.go @@ -34,7 +34,7 @@ func (bot *Bot) InitUser(id int64, name string) (*database.TgUser, error) { L9Id: l9id, Name: name, TgId: id, - PosTag: "not_started", + PosTag: "ready", } _, err = db.Insert(user, tg_user) if err != nil { @@ -53,7 +53,11 @@ func (bot *Bot) Start() error { if err != nil { return err } - msg := tgbotapi.NewMessage(bot.TG_user.TgId, "Привет! У меня можно посмотреть расписание занятий\nПросто введи номер группы или фамилию преподавателя") + msg := tgbotapi.NewMessage( + bot.TG_user.TgId, + `Привет! Я новая версия этого бота и пока тут за главного (: +У меня можно посмотреть в удобном формате ближайшие пары, расписание по дням и даже по неделям! +Просто напиши мне номер группы или фамилию преподавателя`) msg.ParseMode = tgbotapi.ModeHTML _, err = bot.TG.Send(msg) return err diff --git a/modules/tg/shedule.go b/modules/tg/shedule.go index 58465ac..9d39b3f 100644 --- a/modules/tg/shedule.go +++ b/modules/tg/shedule.go @@ -188,9 +188,7 @@ func (bot *Bot) GetLessons(shedules []database.ShedulesInUser, now time.Time, is return nil, err } - if len(lessons) > 0 { - return lessons, nil - } else if len(isRetry) == 0 || isRetry[0] < 2 { + if len(isRetry) == 0 || isRetry[0] < 2 { _, week := now.ISOWeek() isRetry, err = bot.LoadShedule(shedules, week, isRetry...) if err != nil { @@ -198,6 +196,8 @@ func (bot *Bot) GetLessons(shedules []database.ShedulesInUser, now time.Time, is } dw := isRetry[0] return bot.GetLessons(shedules, now, dw+1) + } else if len(isRetry) != 0 && len(lessons) != 0 { + return lessons, nil } else { return nil, nil } diff --git a/modules/tg/week_shedule.go b/modules/tg/week_shedule.go index 2af1e6e..8df982e 100644 --- a/modules/tg/week_shedule.go +++ b/modules/tg/week_shedule.go @@ -29,15 +29,15 @@ func (bot *Bot) GetWeekLessons(shedules []database.ShedulesInUser, week int, isR if err != nil { return nil, err } - if len(lessons) > 0 { - return lessons, nil - } else if len(isRetry) == 0 || isRetry[0] < 2 { + if len(isRetry) == 0 || isRetry[0] < 2 { isRetry, err = bot.LoadShedule(shedules, week+bot.Week, isRetry...) if err != nil { return nil, err } dw := isRetry[0] return bot.GetWeekLessons(shedules, week, dw+1) + } else if len(isRetry) != 0 && len(lessons) != 0 { + return lessons, nil } else { return nil, nil } @@ -63,12 +63,16 @@ func (bot *Bot) GetPersonalWeekSummary(dt int, msg ...tgbotapi.Message) { func (bot *Bot) GetWeekSummary(shedules []database.ShedulesInUser, dw int, isPersonal bool, editMsg ...tgbotapi.Message) error { _, week := time.Now().ISOWeek() week += dw - lessons, _ := bot.GetWeekLessons(shedules, week-bot.Week) + lessons, err := bot.GetWeekLessons(shedules, week-bot.Week) + if err != nil { + log.Fatal(err) + } var dates []time.Time begins := make(map[time.Time]bool) ends := make(map[time.Time]bool) height := 0 + minDay := lessons[0].NumInShedule for _, lesson := range lessons { t := lesson.Begin begin := time.Date(2000, 1, 1, t.Hour(), t.Minute(), 0, 0, t.Location()) @@ -80,6 +84,8 @@ func (bot *Bot) GetWeekSummary(shedules []database.ShedulesInUser, dw int, isPer if lesson.NumInShedule > height { height = lesson.NumInShedule + } else if lesson.NumInShedule < minDay { + minDay = lesson.NumInShedule } } var times []ssau_parser.Lesson @@ -110,12 +116,12 @@ func (bot *Bot) GetWeekSummary(shedules []database.ShedulesInUser, dw int, isPer dates = append(dates, weekBegin.Add(time.Hour*time.Duration(24*i))) } - shedule := make([][6][]database.Lesson, height+1) + shedule := make([][6][]database.Lesson, height-minDay+1) pairs := GroupPairs(lessons) for _, p := range pairs { day := int(math.Floor(p[0].Begin.Sub(weekBegin).Hours() / 24)) - shedule[p[0].NumInShedule][day] = p + shedule[p[0].NumInShedule-minDay][day] = p } html := bot.CreateHTMLShedule(week, shedule, dates, times)