From b78ccaaba9c642c627b792283c02a99ac604a686 Mon Sep 17 00:00:00 2001 From: far-galaxy Date: Sat, 1 Apr 2023 08:53:30 +0400 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE:=20=D1=80=D0=B0=D1=81=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5,=20=D0=B3=D0=B4=D0=B5=20=D0=BF=D0=B0?= =?UTF-8?q?=D1=80=D1=8B=20=D0=BD=D0=B0=D1=87=D0=B8=D0=BD=D0=B0=D1=8E=D1=82?= =?UTF-8?q?=D1=81=D1=8F=20=D0=BD=D0=B5=20=D1=81=208=20=D1=87=D0=B0=D1=81?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE?= =?UTF-8?q?:=20=D0=B0=D0=B2=D1=82=D0=BE=D0=BF=D0=BE=D0=B4=D0=B3=D1=80?= =?UTF-8?q?=D1=83=D0=B7=D0=BA=D0=B0=20=D0=BA=D0=B0=D0=B6=D0=B4=D1=8B=D0=B9?= =?UTF-8?q?=20=D1=80=D0=B0=D0=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ssau_parser/shedule.go | 27 ++++++++++++++++++++++++++- modules/tg/handlers.go | 8 ++++++-- modules/tg/shedule.go | 6 +++--- modules/tg/week_shedule.go | 18 ++++++++++++------ 4 files changed, 47 insertions(+), 12 deletions(-) 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)