Исправлено: расписание, где пары начинаются не с 8 часов
Изменено: автоподгрузка каждый раз
This commit is contained in:
parent
38b9aede57
commit
b78ccaaba9
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Reference in New Issue