Исправлено: расписание, где пары начинаются не с 8 часов

Изменено: автоподгрузка каждый раз
This commit is contained in:
far-galaxy 2023-04-01 08:53:30 +04:00
parent 38b9aede57
commit b78ccaaba9
4 changed files with 47 additions and 12 deletions

View File

@ -68,8 +68,33 @@ func Parse(doc *goquery.Document, isGroup bool, sheduleId int64, week int) (*She
}) })
var shedule [][]Lesson var shedule [][]Lesson
var firstNum int
for t := 0; t < len(raw_times); t += 2 { 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 var time_line []Lesson
for d, date := range raw_dates { for d, date := range raw_dates {
begin_raw := date + raw_times[t] begin_raw := date + raw_times[t]
@ -86,7 +111,7 @@ func Parse(doc *goquery.Document, isGroup bool, sheduleId int64, week int) (*She
lesson := Lesson{ lesson := Lesson{
Begin: begin, Begin: begin,
End: end, End: end,
NumInShedule: t / 2, NumInShedule: t/2 + firstNum,
SubLessons: lessons[idx], SubLessons: lessons[idx],
} }
time_line = append(time_line, lesson) time_line = append(time_line, lesson)

View File

@ -34,7 +34,7 @@ func (bot *Bot) InitUser(id int64, name string) (*database.TgUser, error) {
L9Id: l9id, L9Id: l9id,
Name: name, Name: name,
TgId: id, TgId: id,
PosTag: "not_started", PosTag: "ready",
} }
_, err = db.Insert(user, tg_user) _, err = db.Insert(user, tg_user)
if err != nil { if err != nil {
@ -53,7 +53,11 @@ func (bot *Bot) Start() error {
if err != nil { if err != nil {
return err return err
} }
msg := tgbotapi.NewMessage(bot.TG_user.TgId, "Привет! У меня можно посмотреть расписание занятий\nПросто введи <b>номер группы</b> или <b>фамилию преподавателя</b>") msg := tgbotapi.NewMessage(
bot.TG_user.TgId,
`Привет! Я новая версия этого бота и пока тут за главного (:
У меня можно посмотреть в удобном формате <b>ближайшие пары</b>, расписание <b>по дням</b> и даже <b>по неделям</b>!
Просто напиши мне <b>номер группы</b> или <b>фамилию преподавателя</b>`)
msg.ParseMode = tgbotapi.ModeHTML msg.ParseMode = tgbotapi.ModeHTML
_, err = bot.TG.Send(msg) _, err = bot.TG.Send(msg)
return err return err

View File

@ -188,9 +188,7 @@ func (bot *Bot) GetLessons(shedules []database.ShedulesInUser, now time.Time, is
return nil, err return nil, err
} }
if len(lessons) > 0 { if len(isRetry) == 0 || isRetry[0] < 2 {
return lessons, nil
} else if len(isRetry) == 0 || isRetry[0] < 2 {
_, week := now.ISOWeek() _, week := now.ISOWeek()
isRetry, err = bot.LoadShedule(shedules, week, isRetry...) isRetry, err = bot.LoadShedule(shedules, week, isRetry...)
if err != nil { if err != nil {
@ -198,6 +196,8 @@ func (bot *Bot) GetLessons(shedules []database.ShedulesInUser, now time.Time, is
} }
dw := isRetry[0] dw := isRetry[0]
return bot.GetLessons(shedules, now, dw+1) return bot.GetLessons(shedules, now, dw+1)
} else if len(isRetry) != 0 && len(lessons) != 0 {
return lessons, nil
} else { } else {
return nil, nil return nil, nil
} }

View File

@ -29,15 +29,15 @@ func (bot *Bot) GetWeekLessons(shedules []database.ShedulesInUser, week int, isR
if err != nil { if err != nil {
return nil, err return nil, err
} }
if len(lessons) > 0 { if len(isRetry) == 0 || isRetry[0] < 2 {
return lessons, nil
} else if len(isRetry) == 0 || isRetry[0] < 2 {
isRetry, err = bot.LoadShedule(shedules, week+bot.Week, isRetry...) isRetry, err = bot.LoadShedule(shedules, week+bot.Week, isRetry...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
dw := isRetry[0] dw := isRetry[0]
return bot.GetWeekLessons(shedules, week, dw+1) return bot.GetWeekLessons(shedules, week, dw+1)
} else if len(isRetry) != 0 && len(lessons) != 0 {
return lessons, nil
} else { } else {
return nil, nil 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 { func (bot *Bot) GetWeekSummary(shedules []database.ShedulesInUser, dw int, isPersonal bool, editMsg ...tgbotapi.Message) error {
_, week := time.Now().ISOWeek() _, week := time.Now().ISOWeek()
week += dw 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 var dates []time.Time
begins := make(map[time.Time]bool) begins := make(map[time.Time]bool)
ends := make(map[time.Time]bool) ends := make(map[time.Time]bool)
height := 0 height := 0
minDay := lessons[0].NumInShedule
for _, lesson := range lessons { for _, lesson := range lessons {
t := lesson.Begin t := lesson.Begin
begin := time.Date(2000, 1, 1, t.Hour(), t.Minute(), 0, 0, t.Location()) 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 { if lesson.NumInShedule > height {
height = lesson.NumInShedule height = lesson.NumInShedule
} else if lesson.NumInShedule < minDay {
minDay = lesson.NumInShedule
} }
} }
var times []ssau_parser.Lesson 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))) 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) pairs := GroupPairs(lessons)
for _, p := range pairs { for _, p := range pairs {
day := int(math.Floor(p[0].Begin.Sub(weekBegin).Hours() / 24)) 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) html := bot.CreateHTMLShedule(week, shedule, dates, times)