Добавлено: уведомление о след. неделе

main
far-galaxy 2023-08-11 20:39:46 +04:00
parent 2c09b3ab5a
commit b038afa2a3
5 changed files with 74 additions and 37 deletions

View File

@ -186,6 +186,7 @@ func Mailing(bot *tg.Bot, notes []Notify, now time.Time) {
case NextDay:
query.NextDay = true
txt, err = StrNextDay(bot, note)
// TODO: установить время удаления на момент сообщения о начале пар
tempTime = note.Lesson.Begin.Add(-60 * time.Minute)
case NextWeek:
query.NextWeek = true
@ -193,30 +194,49 @@ func Mailing(bot *tg.Bot, notes []Notify, now time.Time) {
if err != nil {
log.Println(err)
}
var condition string
if note.Lesson.SubGroup == 0 {
condition = "subgroup in (?, 1, 2)"
} else {
condition = "subgroup in (0, ?)"
}
if err := bot.DB.
UseBool(string(note.NotifyType)).
Table("ShedulesInUser").
Cols("tgid").
Join("INNER", "tguser", "tguser.l9id = ShedulesInUser.l9id").
Where("subgroup in (0, ?)", note.Lesson.SubGroup).
Where(condition, note.Lesson.SubGroup).
Find(&users, &query); err != nil {
log.Println(err)
}
for _, user := range users {
if !slices.Contains(ids, user.TgId) {
msg := tgbotapi.NewMessage(user.TgId, txt)
msg.ParseMode = tgbotapi.ModeHTML
m, err := bot.TG.Send(msg)
if err != nil {
log.Println(err)
}
temp := database.TempMsg{
TgId: m.Chat.ID,
MessageId: m.MessageID,
Destroy: tempTime,
}
if _, err := bot.DB.InsertOne(temp); err != nil {
log.Println(err)
if note.NotifyType != NextWeek {
msg := tgbotapi.NewMessage(user.TgId, txt)
msg.ParseMode = tgbotapi.ModeHTML
m, err := bot.TG.Send(msg)
if err != nil {
log.Println(err)
}
temp := database.TempMsg{
TgId: m.Chat.ID,
MessageId: m.MessageID,
Destroy: tempTime,
}
if _, err := bot.DB.InsertOne(temp); err != nil {
log.Println(err)
}
} else {
if err = bot.GetWeekSummary(
note.Lesson.Begin,
&user,
database.ShedulesInUser{},
0,
true,
"На этой неделе больше ничего нет\n\nВыше расписание на следующую неделю",
); err != nil {
log.Println(err)
}
}
ids = append(ids, user.TgId)
}

View File

@ -226,7 +226,7 @@ func (bot *Bot) HandleSummary(user *database.TgUser, query *tgbotapi.CallbackQue
bot.DB.ID(user.L9Id).Find(&shedules)
_, err = bot.GetDaySummary(now[0], user, shedules, dt, true, *query.Message)
case "week":
err = bot.GetWeekSummary(now[0], user, shedule[0], dt, true, *query.Message)
err = bot.GetWeekSummary(now[0], user, shedule[0], dt, true, "", *query.Message)
default:
_, err = bot.GetPersonal(now[0], user, *query.Message)
}
@ -235,7 +235,7 @@ func (bot *Bot) HandleSummary(user *database.TgUser, query *tgbotapi.CallbackQue
case "day":
_, err = bot.GetDaySummary(now[0], user, shedule, dt, false, *query.Message)
case "week":
err = bot.GetWeekSummary(now[0], user, shedule[0], dt, false, *query.Message)
err = bot.GetWeekSummary(now[0], user, shedule[0], dt, false, "", *query.Message)
default:
_, err = bot.GetSummary(now[0], user, shedule, false, *query.Message)

View File

@ -249,7 +249,7 @@ func TestGetWeekLessons(t *testing.T) {
if err != nil {
log.Fatal(err)
}
err = bot.CreateWeekImg(now, &user, []database.ShedulesInUser{Swap(sh)}, 0, false)
err = bot.CreateWeekImg(now, &user, []database.ShedulesInUser{Swap(sh)}, 0, false, "")
if err != nil {
log.Fatal(err)
}

View File

@ -165,7 +165,9 @@ func (bot *Bot) EditOrSend(
)
newMsg.Caption = str
newMsg.ParseMode = tgbotapi.ModeHTML
newMsg.ReplyMarkup = &markup
if len(markup.InlineKeyboard) != 0 {
newMsg.ReplyMarkup = &markup
}
return bot.TG.Send(newMsg)
} else if len(editMsg[0].Photo) == 0 {
// Фото нет и не было, только текст
@ -174,7 +176,9 @@ func (bot *Bot) EditOrSend(
editMsg[0].MessageID,
str,
)
msg.ReplyMarkup = &markup
if len(markup.InlineKeyboard) != 0 {
msg.ReplyMarkup = &markup
}
msg.ParseMode = tgbotapi.ModeHTML
if _, err := bot.TG.Request(msg); err != nil {
if strings.Contains(err.Error(), "message is not modified") {
@ -195,7 +199,9 @@ func (bot *Bot) EditOrSend(
}
msg := tgbotapi.NewMessage(id, str)
msg.ReplyMarkup = &markup
if len(markup.InlineKeyboard) != 0 {
msg.ReplyMarkup = &markup
}
msg.ParseMode = tgbotapi.ModeHTML
return bot.TG.Send(msg)
}
@ -209,12 +215,16 @@ func (bot *Bot) EditOrSend(
)
newMsg.Caption = str
newMsg.ParseMode = tgbotapi.ModeHTML
newMsg.ReplyMarkup = &markup
if len(markup.InlineKeyboard) != 0 {
newMsg.ReplyMarkup = &markup
}
return bot.TG.Send(newMsg)
} else {
// Только текст
msg := tgbotapi.NewMessage(id, str)
msg.ReplyMarkup = &markup
if len(markup.InlineKeyboard) != 0 {
msg.ReplyMarkup = &markup
}
msg.ParseMode = tgbotapi.ModeHTML
return bot.TG.Send(msg)
}

View File

@ -23,6 +23,7 @@ func (bot *Bot) GetWeekSummary(
shedule database.ShedulesInUser,
dw int,
isPersonal bool,
caption string,
editMsg ...tgbotapi.Message,
) error {
_, week := now.ISOWeek()
@ -75,7 +76,7 @@ func (bot *Bot) GetWeekSummary(
} else {
shedules = append(shedules, shedule)
}
return bot.CreateWeekImg(now, user, shedules, dw, isPersonal, editMsg...)
return bot.CreateWeekImg(now, user, shedules, dw, isPersonal, caption, editMsg...)
} else {
var shId int64
if isPersonal {
@ -83,14 +84,17 @@ func (bot *Bot) GetWeekSummary(
} else {
shId = shedule.SheduleId
}
markup := SummaryKeyboard(
"sh_week",
shId,
shedule.IsGroup,
dw,
)
markup := tgbotapi.InlineKeyboardMarkup{}
if caption == "" {
markup = SummaryKeyboard(
"sh_week",
shId,
shedule.IsGroup,
dw,
)
}
_, err := bot.EditOrSend(user.TgId, "", image.FileId, markup, editMsg...)
_, err := bot.EditOrSend(user.TgId, caption, image.FileId, markup, editMsg...)
return err
}
}
@ -114,6 +118,7 @@ func (bot *Bot) CreateWeekImg(
shedules []database.ShedulesInUser,
dw int,
isPersonal bool,
caption string,
editMsg ...tgbotapi.Message,
) error {
_, week := now.ISOWeek()
@ -270,16 +275,18 @@ func (bot *Bot) CreateWeekImg(
} else {
shId = shedules[0].SheduleId
}
markup := SummaryKeyboard(
"sh_week",
shId,
shedules[0].IsGroup,
dw,
)
// Качаем фото и сохраняем данные о нём в БД
photo := tgbotapi.NewPhoto(user.TgId, photoFileBytes)
photo.ReplyMarkup = &markup
photo.Caption = caption
if caption == "" {
photo.ReplyMarkup = SummaryKeyboard(
"sh_week",
shId,
shedules[0].IsGroup,
dw,
)
}
resp, err := bot.TG.Send(photo)
if err != nil {
return err