110 lines
2.5 KiB
Go
110 lines
2.5 KiB
Go
package notify
|
||
|
||
import (
|
||
"fmt"
|
||
"log"
|
||
"time"
|
||
|
||
"git.l9labs.ru/anufriev.g.a/l9_stud_bot/modules/database"
|
||
"git.l9labs.ru/anufriev.g.a/l9_stud_bot/modules/ssau_parser"
|
||
"git.l9labs.ru/anufriev.g.a/l9_stud_bot/modules/tg"
|
||
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
|
||
)
|
||
|
||
func CheckShedules(bot *tg.Bot, now time.Time) {
|
||
var groups []database.Group
|
||
if err := bot.DB.Where("groupid >= 0").Find(&groups); err != nil {
|
||
log.Println(err)
|
||
}
|
||
for _, group := range groups {
|
||
du := now.Sub(group.LastCheck).Hours()
|
||
if du < 24 {
|
||
continue
|
||
}
|
||
group.LastCheck = now
|
||
if _, err := bot.DB.ID(group.GroupId).Update(group); err != nil {
|
||
log.Println(err)
|
||
}
|
||
sh := ssau_parser.WeekShedule{
|
||
IsGroup: true,
|
||
SheduleId: group.GroupId,
|
||
}
|
||
add, del, err := bot.LoadShedule(sh, now)
|
||
if err != nil {
|
||
log.Println(err)
|
||
}
|
||
// Очищаем от лишних пар
|
||
var n_a, n_d []database.Lesson
|
||
for _, a := range add {
|
||
if a.GroupId == group.GroupId {
|
||
n_a = append(n_a, a)
|
||
}
|
||
}
|
||
for _, d := range del {
|
||
if d.GroupId == group.GroupId {
|
||
n_d = append(n_d, d)
|
||
}
|
||
}
|
||
if len(n_a) > 0 || len(n_d) > 0 {
|
||
str := "‼ Обнаружены изменения в расписании\n"
|
||
str = strChanges(n_a, str, true, group.GroupId)
|
||
str = strChanges(n_d, str, false, group.GroupId)
|
||
var users []database.TgUser
|
||
if err := bot.DB.
|
||
UseBool("isgroup").
|
||
Table("ShedulesInUser").
|
||
Cols("tgid").
|
||
Join("INNER", "TgUser", "TgUser.l9id = ShedulesInUser.l9id").
|
||
Find(&users, tg.Swap(sh)); err != nil {
|
||
log.Println(err)
|
||
}
|
||
for _, user := range users {
|
||
msg := tgbotapi.NewMessage(user.TgId, str)
|
||
if _, err := bot.TG.Send(msg); nil != err {
|
||
log.Println(err)
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
func strChanges(add []database.Lesson, str string, isAdd bool, group int64) string {
|
||
add_len := len(add)
|
||
if add_len > 0 {
|
||
if add_len > 10 {
|
||
add = add[:10]
|
||
}
|
||
if isAdd {
|
||
str += "➕ Добавлено:\n"
|
||
} else {
|
||
str += "➖ Удалено:\n"
|
||
}
|
||
for _, a := range add {
|
||
str += ShortPairStr(a)
|
||
}
|
||
/*
|
||
if add_len > 0 {
|
||
str += fmt.Sprintf("\nВсего замен: %d\n\n", add_len)
|
||
}
|
||
*/
|
||
}
|
||
return str
|
||
}
|
||
|
||
func ShortPairStr(lesson database.Lesson) string {
|
||
beginStr := fmt.Sprintf(lesson.Begin.Format("02 %s 15:04"), tg.Month[lesson.Begin.Month()-1])
|
||
var endStr string
|
||
if lesson.Type == "mil" {
|
||
endStr = "∞"
|
||
} else {
|
||
endStr = lesson.End.Format("15:04")
|
||
}
|
||
return fmt.Sprintf(
|
||
"📆 %s - %s\n%s%s\n-----------------\n",
|
||
beginStr,
|
||
endStr,
|
||
tg.Icons[lesson.Type],
|
||
lesson.Name,
|
||
)
|
||
}
|