Skip to content

Commit

Permalink
Merge pull request #35 from far-galaxy/comeback-day
Browse files Browse the repository at this point in the history
Возращено подневное расписание
  • Loading branch information
far-galaxy committed Sep 12, 2023
2 parents f91b4d7 + 1332aa3 commit 8d3627e
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 44 deletions.
2 changes: 1 addition & 1 deletion modules/tg/bot.go
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ func (bot *Bot) HandleUpdate(update tgbotapi.Update, now ...time.Time) (tgbotapi
if user.PosTag == database.NotStarted {
return bot.Start(user)
} else if user.PosTag == database.Ready || user.PosTag == database.Add {
if strings.Contains(query.Data, "sh") {
if strings.Contains(query.Data, SummaryPrefix) {
err = bot.HandleSummary(user, query, now...)
} else if strings.Contains(query.Data, "opt") {
err = bot.HandleOptions(user, query)
Expand Down
31 changes: 17 additions & 14 deletions modules/tg/handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ func (bot *Bot) Start(user *database.TgUser) (tgbotapi.Message, error) {
Также можно получать уведомления о своих занятиях по кнопке <b>Моё расписание</b>👇
‼ Внимание! Бот ещё находится на стадии испытаний, поэтому могут возникать ошибки в его работе.
Рекомендуется сверять настоящее расписание и обо всех ошибках сообщать по контакам в /help`,
Рекомендуется сверять настоящее расписание и обо всех ошибках сообщать в чат @chat_l9_stud_bot или по контактам в /help`,
GeneralKeyboard(false),
)
}
Expand Down Expand Up @@ -213,38 +213,41 @@ func (bot *Bot) GetShedule(user *database.TgUser, query *tgbotapi.CallbackQuery,
SheduleId: groupId,
}
not_exists, _ := ssau_parser.CheckGroupOrTeacher(bot.DB, shedule)
del := tgbotapi.NewDeleteMessage(query.From.ID, query.Message.MessageID)
if _, err := bot.TG.Request(del); err != nil {
return err
}
_, err = bot.ReturnSummary(not_exists, isAdd, user, shedule, now[0])
return err
}

func (bot *Bot) HandleSummary(user *database.TgUser, query *tgbotapi.CallbackQuery, now ...time.Time) error {
data := strings.Split(query.Data, "_")
shedule, dt, err := ParseQuery(data)
sumType, shedule, dt, err := ParseQuery(data)
if err != nil {
return err
}
if len(now) == 0 {
now = append(now, time.Now())
}

if data[2] == "personal" {
switch data[1] {
/*case "day":
_, err = bot.GetDaySummary(now[0], user, shedules, dt, true, *query.Message)*/
case "week":
switch sumType {
case Day:
_, err = bot.GetDaySummary(now[0], user, shedule, dt, true, *query.Message)
case Week:
err = bot.GetWeekSummary(now[0], user, shedule, dt, true, "", *query.Message)
default:
_, err = bot.GetSummary(now[0], user, shedule, true, *query.Message)
// _, err = bot.GetPersonal(now[0], user, *query.Message)
_, err = bot.GetShortSummary(now[0], user, shedule, true, *query.Message)
}
} else {
switch data[1] {
/*case "day":
_, err = bot.GetDaySummary(now[0], user, shedule, dt, false, *query.Message)*/
case "week":
switch sumType {
case Day:
_, err = bot.GetDaySummary(now[0], user, shedule, dt, false, *query.Message)
case Week:
err = bot.GetWeekSummary(now[0], user, shedule, dt, false, "", *query.Message)

default:
_, err = bot.GetSummary(now[0], user, shedule, false, *query.Message)
_, err = bot.GetShortSummary(now[0], user, shedule, false, *query.Message)
}
}
return err
Expand Down
7 changes: 3 additions & 4 deletions modules/tg/shedule.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ func (bot *Bot) GetPersonal(now time.Time, user *database.TgUser, editMsg ...tgb
// Если isPersonal == false, то обязательно заполнение объекта shedule
//
// При isPersonal == true, объект shedule игнорируется
func (bot *Bot) GetSummary(
func (bot *Bot) GetShortSummary(
now time.Time,
user *database.TgUser,
shedule database.ShedulesInUser,
Expand Down Expand Up @@ -120,8 +120,7 @@ func (bot *Bot) GetSummary(

}
markup := SummaryKeyboard(
// TODO: создать тип таких префиксов
"sh_near",
Near,
shedule,
isPersonal,
0,
Expand Down Expand Up @@ -178,7 +177,7 @@ func (bot *Bot) GetDaySummary(
firstPair := pairs[0][0].Begin
dayStr := DayStr(day)

markup := SummaryKeyboard("sh_day", shedule, isPersonal, dt)
markup := SummaryKeyboard(Day, shedule, isPersonal, dt)

if firstPair.Day() != day.Day() {
str = fmt.Sprintf("В %s, занятий нет", dayStr)
Expand Down
71 changes: 49 additions & 22 deletions modules/tg/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,18 @@ func GenerateKeyboard(array []tgbotapi.InlineKeyboardButton) tgbotapi.InlineKeyb
return tgbotapi.InlineKeyboardMarkup{InlineKeyboard: markup}
}

type SummaryType string

const (
SummaryPrefix string = "sh_"
Near SummaryType = "near"
Day SummaryType = "day"
Week SummaryType = "week"
)

// Inline-клавиатура карточки с расписанием
func SummaryKeyboard(
clickedButton string,
clickedButton SummaryType,
shedule database.ShedulesInUser,
isPersonal bool,
dt int,
Expand All @@ -100,44 +109,53 @@ func SummaryKeyboard(
tail := GenerateButtonTail(sheduleId, 0, shedule.IsGroup)

near := []tgbotapi.InlineKeyboardButton{
tgbotapi.NewInlineKeyboardButtonData("Краткая сводка", "sh_near"+tail),
tgbotapi.NewInlineKeyboardButtonData(
"Краткая сводка",
SummaryPrefix+string(Near)+tail,
),
}
day := []tgbotapi.InlineKeyboardButton{
tgbotapi.NewInlineKeyboardButtonData(
"День",
SummaryPrefix+string(Day)+tail,
),
}
/*day := []tgbotapi.InlineKeyboardButton{
tgbotapi.NewInlineKeyboardButtonData("День", "sh_day"+tail),
}*/
week := []tgbotapi.InlineKeyboardButton{
tgbotapi.NewInlineKeyboardButtonData("Неделя", "sh_week"+tail),
tgbotapi.NewInlineKeyboardButtonData(
"Неделя",
SummaryPrefix+string(Week)+tail,
),
}

update := GenerateButtonTail(sheduleId, dt, shedule.IsGroup)
var arrows []tgbotapi.InlineKeyboardButton
if clickedButton == "sh_day" || clickedButton == "sh_week" {
if clickedButton == Day || clickedButton == Week {
prev_arrow := GenerateButtonTail(sheduleId, dt-1, shedule.IsGroup)
next_arrow := GenerateButtonTail(sheduleId, dt+1, shedule.IsGroup)
arrows = []tgbotapi.InlineKeyboardButton{
tgbotapi.NewInlineKeyboardButtonData("⏮", clickedButton+prev_arrow),
tgbotapi.NewInlineKeyboardButtonData("🔄", clickedButton+update),
tgbotapi.NewInlineKeyboardButtonData("⏭", clickedButton+next_arrow),
tgbotapi.NewInlineKeyboardButtonData("⏮", SummaryPrefix+string(clickedButton)+prev_arrow),
tgbotapi.NewInlineKeyboardButtonData("🔄", SummaryPrefix+string(clickedButton)+update),
tgbotapi.NewInlineKeyboardButtonData("⏭", SummaryPrefix+string(clickedButton)+next_arrow),
}
} else {
arrows = []tgbotapi.InlineKeyboardButton{
tgbotapi.NewInlineKeyboardButtonData("🔄", clickedButton+update),
tgbotapi.NewInlineKeyboardButtonData("🔄", SummaryPrefix+string(clickedButton)+update),
}
}

var markup [][]tgbotapi.InlineKeyboardButton
switch clickedButton {
/*case "sh_day":
markup = [][]tgbotapi.InlineKeyboardButton{
arrows, near, week,
}*/
case "sh_week":
case Day:
markup = [][]tgbotapi.InlineKeyboardButton{
arrows, near, //day,
arrows, near, week,
}
case Week:
markup = [][]tgbotapi.InlineKeyboardButton{
arrows, day, near,
}
default:
markup = [][]tgbotapi.InlineKeyboardButton{
arrows, week, //day,
arrows, day, week,
}
}
return tgbotapi.InlineKeyboardMarkup{InlineKeyboard: markup}
Expand Down Expand Up @@ -251,20 +269,29 @@ func (bot *Bot) EditOrSend(
}

// Расшифровывать содержимое кнопки из карточки с расписанием
func ParseQuery(data []string) (database.ShedulesInUser, int, error) {
func ParseQuery(data []string) (SummaryType, database.ShedulesInUser, int, error) {
var shedule database.ShedulesInUser
isGroup := data[2] == "group"
sheduleId, err := strconv.ParseInt(data[4], 0, 64)
if err != nil {
return shedule, 0, err
return Near, shedule, 0, err
}
shedule.IsGroup = isGroup
shedule.SheduleId = sheduleId
dt, err := strconv.ParseInt(data[3], 0, 0)
if err != nil {
return shedule, 0, err
return Near, shedule, 0, err
}
var sumType SummaryType
switch data[1] {
case "day":
sumType = Day
case "week":
sumType = Week
default:
sumType = Near
}
return shedule, int(dt), nil
return sumType, shedule, int(dt), nil
}

var SumKey = []string{"near", "day", "week"}
Expand Down
6 changes: 3 additions & 3 deletions modules/tg/week_shedule.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ func (bot *Bot) GetWeekSummary(
}

isCompleted := false
if week == -1 {
if week == -1 || week == 0 {
_, now_week := now.ISOWeek()
now_week -= bot.Week
week = now_week
Expand Down Expand Up @@ -114,7 +114,7 @@ func (bot *Bot) GetWeekSummary(
markup := tgbotapi.InlineKeyboardMarkup{}
if caption == "" || (caption != "" && isCompleted) {
markup = SummaryKeyboard(
"sh_week",
Week,
shedule,
isPersonal,
week,
Expand Down Expand Up @@ -298,7 +298,7 @@ func (bot *Bot) CreateWeekImg(
isCompleted := strings.Contains(caption, "На этой неделе больше занятий нет")
if caption == "" || isCompleted {
photo.ReplyMarkup = SummaryKeyboard(
"sh_week",
Week,
shedule,
isPersonal,
week,
Expand Down

0 comments on commit 8d3627e

Please sign in to comment.