Исправлено: расписание, где пары начинаются не с 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 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)

View File

@ -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Просто введи <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
_, err = bot.TG.Send(msg)
return err

View File

@ -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
}

View File

@ -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)