From 2232b69a57c6fb43a6d5c7de1be5167b4fda928d Mon Sep 17 00:00:00 2001 From: far-galaxy Date: Mon, 7 Aug 2023 22:18:44 +0400 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE:=20=D0=BB=D0=B8=D1=87=D0=BD=D0=BE=D0=B5=20=D1=80?= =?UTF-8?q?=D0=B0=D1=81=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/tg/bot.go | 5 ++ modules/tg/handlers.go | 108 ++++++++++++++++++++++++----------------- modules/tg/shedule.go | 23 +++++++++ modules/tg/utils.go | 7 +++ 4 files changed, 99 insertions(+), 44 deletions(-) diff --git a/modules/tg/bot.go b/modules/tg/bot.go index d3056bd..8931bbb 100644 --- a/modules/tg/bot.go +++ b/modules/tg/bot.go @@ -132,6 +132,11 @@ func (bot *Bot) HandleUpdate(update tgbotapi.Update, now ...time.Time) (tgbotapi if len(now) == 0 { now = append(now, msg.Time()) } + if msg.Text == "Моё расписание" { + return bot.GetPersonal(now[0], user) + } + return bot.Find(now[0], user, msg.Text) + case database.Add: return bot.Find(now[0], user, msg.Text) default: return bot.Etc(user) diff --git a/modules/tg/handlers.go b/modules/tg/handlers.go index d57f2d8..d59c3bb 100644 --- a/modules/tg/handlers.go +++ b/modules/tg/handlers.go @@ -15,6 +15,7 @@ import ( // Приветственное сообщение func (bot *Bot) Start(user *database.TgUser) error { user.PosTag = database.Ready + // TODO: исправить первичный ключ во всех обновлениях _, err := bot.DB.Update(user) if err != nil { return err @@ -24,6 +25,7 @@ func (bot *Bot) Start(user *database.TgUser) error { `Привет! У меня можно посмотреть в удобном формате ближайшие пары, расписание по дням и даже по неделям! Просто напиши мне номер группы или фамилию преподавателя`) msg.ParseMode = tgbotapi.ModeHTML + msg.ReplyMarkup = GeneralKeyboard() _, err = bot.TG.Send(msg) return err } @@ -80,41 +82,48 @@ func (bot *Bot) Find(now time.Time, user *database.TgUser, query string) (tgbota // Если получен единственный результат, сразу выдать (подключить) расписание if len(allGroups) == 1 || len(allTeachers) == 1 { + var sheduleId int64 + var isGroup bool + if len(allGroups) == 1 { + sheduleId = allGroups[0].GroupId + isGroup = true + } else { + sheduleId = allTeachers[0].TeacherId + isGroup = false + } + shedule := ssau_parser.WeekShedule{ + IsGroup: isGroup, + SheduleId: sheduleId, + } + not_exists, _ := ssau_parser.CheckGroupOrTeacher(bot.DB, shedule) + if not_exists { + msg := tgbotapi.NewMessage(user.TgId, "Загружаю расписание...\nЭто займёт некоторое время") + bot.TG.Send(msg) + err := bot.LoadShedule(shedule) + if err != nil { + bot.Debug.Println(err) + } + } + if user.PosTag == database.Add { - msg := tgbotapi.NewMessage(user.TgId, "Подключено!") - keyboard := tgbotapi.NewReplyKeyboard( - []tgbotapi.KeyboardButton{ - tgbotapi.NewKeyboardButton("Моё расписание"), - }) - msg.ReplyMarkup = keyboard + sh := Swap(shedule) + sh.L9Id = user.L9Id + if _, err := bot.DB.InsertOne(&sh); err != nil { + return nilMsg, err + } user.PosTag = database.Ready if _, err := bot.DB.Update(user); err != nil { return nilMsg, err } + msg := tgbotapi.NewMessage( + user.TgId, + "Расписание успешно подключено!\n"+ + "Теперь его можно открыть по кнопке Моё расписание👇", + ) + msg.ParseMode = tgbotapi.ModeHTML + msg.ReplyMarkup = GeneralKeyboard() return bot.TG.Send(msg) } else { - var sheduleId int64 - var isGroup bool - if len(allGroups) == 1 { - sheduleId = allGroups[0].GroupId - isGroup = true - } else { - sheduleId = allTeachers[0].TeacherId - isGroup = false - } - shedule := ssau_parser.WeekShedule{ - IsGroup: isGroup, - SheduleId: sheduleId, - } - not_exists, _ := ssau_parser.CheckGroupOrTeacher(bot.DB, shedule) - if not_exists { - msg := tgbotapi.NewMessage(user.TgId, "Загружаю расписание...\nЭто займёт некоторое время") - bot.TG.Send(msg) - err := bot.LoadShedule(shedule) - if err != nil { - bot.Debug.Println(err) - } - } return bot.GetSummary(now, user, []database.ShedulesInUser{Swap(shedule)}, false) } @@ -161,15 +170,25 @@ func (bot *Bot) GetShedule(user *database.TgUser, query *tgbotapi.CallbackQuery, if err != nil { return err } + shedule := database.ShedulesInUser{ + IsGroup: isGroup, + SheduleId: groupId, + } if !isAdd { - shedule := database.ShedulesInUser{ - IsGroup: isGroup, - SheduleId: groupId, - } if len(now) == 0 { now = append(now, time.Now()) } _, err = bot.GetSummary(now[0], user, []database.ShedulesInUser{shedule}, false, *query.Message) + } else { + shedule.L9Id = user.L9Id + if _, err = bot.DB.InsertOne(&shedule); err != nil { + return err + } + user.PosTag = database.Ready + if _, err = bot.DB.Update(&user); err != nil { + return err + } + _, err = bot.GetPersonal(now[0], user) } return err } @@ -180,20 +199,21 @@ func (bot *Bot) HandleSummary(user *database.TgUser, query *tgbotapi.CallbackQue if err != nil { return err } + if len(now) == 0 { + now = append(now, time.Now()) + } if data[2] == "personal" { - /* - switch data[0] { - case "day": - bot.GetPersonalDaySummary(int(dt), *query.Message) - case "week": - bot.GetPersonalWeekSummary(int(dt), *query.Message) - default: - bot.GetPersonalSummary(*query.Message) - }*/ - } else { - if len(now) == 0 { - now = append(now, time.Now()) + switch data[1] { + case "day": + var shedules []database.ShedulesInUser + bot.DB.ID(user.L9Id).Find(&shedules) + _, err = bot.GetDaySummary(now[0], user, shedules, dt, true, *query.Message) + /*case "week": + bot.GetPersonalWeekSummary(int(dt), *query.Message)*/ + default: + _, err = bot.GetPersonal(now[0], user, *query.Message) } + } else { switch data[1] { case "day": _, err = bot.GetDaySummary(now[0], user, shedule, dt, false, *query.Message) diff --git a/modules/tg/shedule.go b/modules/tg/shedule.go index 829c177..4266152 100644 --- a/modules/tg/shedule.go +++ b/modules/tg/shedule.go @@ -30,6 +30,29 @@ func (bot *Bot) GetPersonalSummary(user *database.TgUser, msg ...tgbotapi.Messag } }*/ +func (bot *Bot) GetPersonal(now time.Time, user *database.TgUser, editMsg ...tgbotapi.Message) (tgbotapi.Message, error) { + var shedules []database.ShedulesInUser + bot.DB.ID(user.L9Id).Find(&shedules) + + if len(shedules) == 0 { + user.PosTag = database.Add + if _, err := bot.DB.Update(user); err != nil { + return tgbotapi.Message{}, err + } + + msg := tgbotapi.NewMessage( + user.TgId, + "У тебя пока никакого расписания не подключено\n"+ + "Введи номер группы или фамилию преподавателя", + ) + msg.ReplyMarkup = tgbotapi.ReplyKeyboardRemove{RemoveKeyboard: true} + msg.ParseMode = tgbotapi.ModeHTML + return bot.TG.Send(msg) + } else { + return bot.GetSummary(now, user, shedules, true, editMsg...) + } +} + // Получить краткую сводку func (bot *Bot) GetSummary( now time.Time, diff --git a/modules/tg/utils.go b/modules/tg/utils.go index 2257b71..44c8b8c 100644 --- a/modules/tg/utils.go +++ b/modules/tg/utils.go @@ -10,6 +10,13 @@ import ( tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5" ) +func GeneralKeyboard() tgbotapi.ReplyKeyboardMarkup { + return tgbotapi.NewReplyKeyboard( + []tgbotapi.KeyboardButton{ + tgbotapi.NewKeyboardButton("Моё расписание"), + }) +} + // Создание ряда кнопок из списка групп func GenerateGroupsArray(groups []database.Group, isAdd bool) []tgbotapi.InlineKeyboardButton { var grKeys []tgbotapi.InlineKeyboardButton