Добавлено: кнопочки (пока работает только сводка и день)
This commit is contained in:
parent
7d3ac7ee6a
commit
bd823194bd
22
main.go
22
main.go
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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)
|
||||
|
|
Reference in New Issue