Добавлено: кнопочки (пока работает только сводка и день)

This commit is contained in:
far-galaxy 2023-03-24 12:30:47 +04:00
parent 7d3ac7ee6a
commit bd823194bd
4 changed files with 249 additions and 36 deletions

22
main.go
View File

@ -68,6 +68,28 @@ func main() {
} else if strings.Contains(tg_user.PosTag, "confirm_see") {
bot.SeeShedule(query)
bot.DeleteMsg(query)
} else if strings.Contains(query.Data, "day") {
data := strings.Split(query.Data, "_")
if data[1] == "personal" {
bot.GetPersonalDaySummary(0, *query.Message)
} else {
shedule, err := tg.ParseQuery(data)
if err != nil {
log.Fatal(err)
}
bot.GetDaySummary(shedule, 0, false, *query.Message)
}
} else if strings.Contains(query.Data, "near") {
data := strings.Split(query.Data, "_")
if data[1] == "personal" {
bot.GetPersonalSummary(*query.Message)
} else {
shedule, err := tg.ParseQuery(data)
if err != nil {
log.Fatal(err)
}
bot.GetSummary(shedule, false, *query.Message)
}
}
}
}

View File

@ -141,7 +141,7 @@ func (bot *Bot) SeeShedule(query *tgbotapi.CallbackQuery) error {
IsTeacher: !isGroup,
SheduleId: groupId,
}
err = bot.GetSummary([]database.ShedulesInUser{shedule})
err = bot.GetSummary([]database.ShedulesInUser{shedule}, false)
if err != nil {
return err
}

View File

@ -13,7 +13,7 @@ import (
"xorm.io/xorm"
)
func (bot *Bot) GetPersonalSummary() {
func (bot *Bot) GetPersonalSummary(msg ...tgbotapi.Message) {
var shedules []database.ShedulesInUser
bot.DB.ID(bot.TG_user.L9Id).Find(&shedules)
@ -21,15 +21,167 @@ func (bot *Bot) GetPersonalSummary() {
bot.Etc()
return
} else {
err := bot.GetSummary(shedules)
err := bot.GetSummary(shedules, true, msg...)
if err != nil {
log.Fatal(err)
}
}
}
func (bot *Bot) GetSummary(shedules []database.ShedulesInUser, isRetry ...bool) error {
now := time.Now().Add(time.Hour * time.Duration(5) * (-1))
func (bot *Bot) GetSummary(shedules []database.ShedulesInUser, isPersonal bool, editMsg ...tgbotapi.Message) error {
now := time.Now() //.Add(time.Hour * time.Duration(5) * (-1))
lessons, err := bot.GetLessons(shedules, now)
if err != nil {
return err
}
if len(lessons) != 0 {
var firstPair, secondPair []database.Lesson
pairs := GroupPairs(lessons)
firstPair = pairs[0]
log.Println(firstPair, secondPair)
var str string
if pairs[0][0].Begin.Day() != time.Now().Day() {
str = "❗️Сегодня пар нет\nБлижайшие занятия "
if time.Until(firstPair[0].Begin).Hours() < 48 {
str += "завтра\n"
} else {
str += fmt.Sprintf("%s\n\n", firstPair[0].Begin.Format("02.01"))
}
day, err := bot.GetDayShedule(pairs)
if err != nil {
return err
}
str += day
} else {
if firstPair[0].Begin.Before(now) {
str = "Сейчас:\n\n"
} else {
str = "Ближайшая пара сегодня:\n\n"
}
firstStr, err := PairToStr(firstPair, bot.DB)
if err != nil {
return err
}
str += firstStr
if len(pairs) > 1 {
secondPair = pairs[1]
if firstPair[0].Begin.Day() == secondPair[0].Begin.Day() {
str += "\nПосле неё:\n\n"
secondStr, err := PairToStr(secondPair, bot.DB)
if err != nil {
return err
}
str += secondStr
} else {
str += "\nБольше ничего сегодня нет"
}
} else {
str += "\nБольше ничего сегодня нет"
}
}
var shId int64
if isPersonal {
shId = 0
} else {
shId = shedules[0].SheduleId
}
markup := SummaryKeyboard(
"near",
shId,
shedules[0].IsTeacher,
)
if len(editMsg) > 0 {
msg := tgbotapi.NewEditMessageText(
editMsg[0].Chat.ID,
editMsg[0].MessageID,
str,
)
msg.ReplyMarkup = &markup
bot.TG.Request(msg)
} else {
msg := tgbotapi.NewMessage(bot.TG_user.TgId, str)
msg.ReplyMarkup = markup
bot.TG.Send(msg)
}
} else {
msg := tgbotapi.NewMessage(bot.TG_user.TgId, "Ой! Пар не обнаружено ):")
bot.TG.Send(msg)
}
return nil
}
func (bot *Bot) GetPersonalDaySummary(dt int, msg ...tgbotapi.Message) {
var shedules []database.ShedulesInUser
bot.DB.ID(bot.TG_user.L9Id).Find(&shedules)
if len(shedules) == 0 {
bot.Etc()
return
} else {
err := bot.GetDaySummary(shedules, dt, true, msg...)
if err != nil {
log.Fatal(err)
}
}
}
func (bot *Bot) GetDaySummary(shedules []database.ShedulesInUser, dt int, isPersonal bool, editMsg ...tgbotapi.Message) error {
now := time.Now()
day := time.Date(now.Year(), now.Month(), now.Day()+dt, 0, 0, 0, 0, now.Location())
lessons, err := bot.GetLessons(shedules, day)
if err != nil {
return err
}
if len(lessons) != 0 {
pairs := GroupPairs(lessons)
var str string
str = fmt.Sprintf("Расписание на %s\n\n", pairs[0][0].Begin.Format("02.01"))
day, err := bot.GetDayShedule(pairs)
if err != nil {
return err
}
str += day
var shId int64
if isPersonal {
shId = 0
} else {
shId = shedules[0].SheduleId
}
markup := SummaryKeyboard(
"day",
shId,
shedules[0].IsTeacher,
)
if len(editMsg) > 0 {
msg := tgbotapi.NewEditMessageText(
editMsg[0].Chat.ID,
editMsg[0].MessageID,
str,
)
msg.ReplyMarkup = &markup
bot.TG.Request(msg)
} else {
msg := tgbotapi.NewMessage(bot.TG_user.TgId, str)
msg.ReplyMarkup = markup
bot.TG.Send(msg)
}
} else {
msg := tgbotapi.NewMessage(bot.TG_user.TgId, "Ой! Пар не обнаружено ):")
bot.TG.Send(msg)
}
return nil
}
func (bot *Bot) GetLessons(shedules []database.ShedulesInUser, now time.Time, isRetry ...bool) ([]database.Lesson, error) {
log.Println(now.Format("01-02-2006 15:04:05 -07"), now.Format("01-02-2006 15:04:05"))
var groups []string
@ -65,54 +217,32 @@ func (bot *Bot) GetSummary(shedules []database.ShedulesInUser, isRetry ...bool)
Find(&lessons)
if err != nil {
return err
return nil, err
}
if len(lessons) != 0 {
var firstPair, secondPair []database.Lesson
pairs := GroupPairs(lessons)
firstPair = pairs[0]
secondPair = pairs[1]
log.Println(firstPair, secondPair)
var str string
if pairs[0][0].Begin.Day() != time.Now().Day() {
str = "❗️Сегодня пар нет\nБлижайшие занятия "
if time.Until(firstPair[0].Begin).Hours() < 48 {
str += "завтра\n"
} else {
str += fmt.Sprintf("%s\n\n", firstPair[0].Begin.Format("02.01"))
}
day, _ := bot.GetDayShedule(pairs)
str += day
} else {
str = "Сводка на сегодня\n\n"
day, _ := bot.GetDayShedule(pairs)
str += day
}
msg := tgbotapi.NewMessage(bot.TG_user.TgId, str)
bot.TG.Send(msg)
if len(lessons) > 0 {
return lessons, nil
} else if len(isRetry) == 0 {
_, week := time.Now().ISOWeek()
week -= bot.Week
for _, sh := range shedules {
doc, err := ssau_parser.ConnectById(sh.SheduleId, sh.IsTeacher, week)
if err != nil {
return err
return nil, err
}
shedule, err := ssau_parser.Parse(doc, !sh.IsTeacher, sh.SheduleId, week)
if err != nil {
return err
return nil, err
}
err = ssau_parser.UploadShedule(bot.DB, *shedule)
if err != nil {
return err
return nil, err
}
}
bot.GetSummary(shedules, true)
return bot.GetLessons(shedules, now, true)
} else {
return nil, nil
}
return nil
}
func (bot *Bot) GetDayShedule(lessons [][]database.Lesson) (string, error) {

View File

@ -52,6 +52,67 @@ func GenerateKeyboard(array []tgbotapi.InlineKeyboardButton, query string) tgbot
return tgbotapi.InlineKeyboardMarkup{InlineKeyboard: markup}
}
func SummaryKeyboard(clickedButton string, sheduleId int64, isTeacher bool) tgbotapi.InlineKeyboardMarkup {
var tail string
if sheduleId == 0 {
tail = "_personal"
} else if isTeacher {
tail = fmt.Sprintf("_teacher_%d", sheduleId)
} else {
tail = fmt.Sprintf("_group_%d", sheduleId)
}
near := []tgbotapi.InlineKeyboardButton{
tgbotapi.NewInlineKeyboardButtonData("Краткая сводка", "near"+tail),
}
day := []tgbotapi.InlineKeyboardButton{
tgbotapi.NewInlineKeyboardButtonData("День", "day"+tail),
}
week := []tgbotapi.InlineKeyboardButton{
tgbotapi.NewInlineKeyboardButtonData("Неделя", "week"+tail),
}
arrows := []tgbotapi.InlineKeyboardButton{
tgbotapi.NewInlineKeyboardButtonData("<", "prev_"+clickedButton+tail),
tgbotapi.NewInlineKeyboardButtonData(">", "next_"+clickedButton+tail),
}
options := []tgbotapi.InlineKeyboardButton{
tgbotapi.NewInlineKeyboardButtonData("Настройки", "options"),
}
var markup [][]tgbotapi.InlineKeyboardButton
switch clickedButton {
case "day":
markup = [][]tgbotapi.InlineKeyboardButton{
arrows, near, week,
}
case "week":
markup = [][]tgbotapi.InlineKeyboardButton{
arrows, near, day,
}
default:
markup = [][]tgbotapi.InlineKeyboardButton{
day, week,
}
}
if sheduleId == 0 {
markup = append(markup, options)
}
return tgbotapi.InlineKeyboardMarkup{InlineKeyboard: markup}
}
func ParseQuery(data []string) ([]database.ShedulesInUser, error) {
isGroup := data[1] == "group"
sheduleId, err := strconv.ParseInt(data[2], 0, 64)
if err != nil {
return nil, err
}
shedule := database.ShedulesInUser{
IsTeacher: !isGroup,
SheduleId: sheduleId,
}
return []database.ShedulesInUser{shedule}, nil
}
func (bot *Bot) DeleteMsg(query *tgbotapi.CallbackQuery) {
delete := tgbotapi.NewDeleteMessage(query.From.ID, query.Message.MessageID)
bot.TG.Request(delete)