2023-08-11 21:20:09 +03:00
|
|
|
|
package tg
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
|
|
"git.l9labs.ru/anufriev.g.a/l9_stud_bot/modules/database"
|
|
|
|
|
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
var bell = map[bool]string{true: "🔔", false: "🔕"}
|
2023-08-12 12:32:34 +03:00
|
|
|
|
var milBell = map[bool]string{true: "🫡 Есть военка", false: "🏖 Нет военки"}
|
2023-08-11 21:20:09 +03:00
|
|
|
|
var optStr = "Настройки уведомлений\nНажми на кнопку, чтобы переключить параметр"
|
|
|
|
|
|
|
|
|
|
func (bot *Bot) GetOptions(user *database.TgUser) (tgbotapi.Message, error) {
|
|
|
|
|
nilMsg := tgbotapi.Message{}
|
|
|
|
|
options := database.ShedulesInUser{
|
|
|
|
|
L9Id: user.L9Id,
|
|
|
|
|
}
|
|
|
|
|
if _, err := bot.DB.Get(&options); err != nil {
|
|
|
|
|
return nilMsg, err
|
|
|
|
|
}
|
2023-08-30 08:42:27 +03:00
|
|
|
|
// Если кто-то хитрожопый нажал на кнопку без подключенной группы
|
|
|
|
|
if options.UID == 0 {
|
|
|
|
|
msg := tgbotapi.NewMessage(user.TgId, "У тебя пока не подключено ни одной группы\nНажми на кнопку <b>Моё расписание</b>")
|
|
|
|
|
msg.ParseMode = tgbotapi.ModeHTML
|
|
|
|
|
msg.ReplyMarkup = GeneralKeyboard(false)
|
|
|
|
|
return bot.TG.Send(msg)
|
|
|
|
|
}
|
2023-08-11 21:20:09 +03:00
|
|
|
|
markup := OptMarkup(options)
|
|
|
|
|
msg := tgbotapi.NewMessage(user.TgId, optStr)
|
|
|
|
|
msg.ReplyMarkup = markup
|
|
|
|
|
return bot.TG.Send(msg)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func OptMarkup(options database.ShedulesInUser) tgbotapi.InlineKeyboardMarkup {
|
|
|
|
|
markup := [][]tgbotapi.InlineKeyboardButton{
|
2023-08-12 11:52:51 +03:00
|
|
|
|
{tgbotapi.NewInlineKeyboardButtonData(fmt.Sprintf("%s Начало занятий", bell[options.First]), "opt_first")},
|
2023-08-11 21:20:09 +03:00
|
|
|
|
{tgbotapi.NewInlineKeyboardButtonData(fmt.Sprintf("%s Следующая пара", bell[options.NextNote]), "opt_lesson")},
|
|
|
|
|
{tgbotapi.NewInlineKeyboardButtonData(fmt.Sprintf("%s Следующий день", bell[options.NextDay]), "opt_day")},
|
|
|
|
|
{tgbotapi.NewInlineKeyboardButtonData(fmt.Sprintf("%s Следующая неделя", bell[options.NextWeek]), "opt_week")},
|
2023-08-12 12:32:34 +03:00
|
|
|
|
{tgbotapi.NewInlineKeyboardButtonData(milBell[options.Military], "opt_mil")},
|
2023-08-12 12:53:13 +03:00
|
|
|
|
{tgbotapi.NewInlineKeyboardButtonData("❌ Отключиться от группы", "opt_del")},
|
2023-08-12 11:52:51 +03:00
|
|
|
|
{tgbotapi.NewInlineKeyboardButtonData("↩ Закрыть", "cancel")},
|
|
|
|
|
}
|
|
|
|
|
if options.First {
|
|
|
|
|
markup = append(markup[:2], markup[1:]...)
|
|
|
|
|
markup[1] = []tgbotapi.InlineKeyboardButton{
|
|
|
|
|
tgbotapi.NewInlineKeyboardButtonData(fmt.Sprintf("⏰ Настроить время (%d)", options.FirstTime), "opt_set"),
|
|
|
|
|
}
|
2023-08-11 21:20:09 +03:00
|
|
|
|
}
|
|
|
|
|
return tgbotapi.NewInlineKeyboardMarkup(markup...)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (bot *Bot) HandleOptions(user *database.TgUser, query *tgbotapi.CallbackQuery) error {
|
|
|
|
|
options := database.ShedulesInUser{
|
|
|
|
|
L9Id: user.L9Id,
|
|
|
|
|
}
|
|
|
|
|
if _, err := bot.DB.Get(&options); err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
switch query.Data {
|
2023-08-12 11:52:51 +03:00
|
|
|
|
case "opt_first":
|
|
|
|
|
options.First = !options.First
|
|
|
|
|
case "opt_set":
|
|
|
|
|
user.PosTag = database.Set
|
|
|
|
|
if _, err := bot.DB.ID(user.L9Id).Update(user); err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
txt := fmt.Sprintf(
|
|
|
|
|
"Введи время в минутах, за которое мне надо сообщить о начале занятий\n"+
|
|
|
|
|
"Сейчас установлено %d минут",
|
|
|
|
|
options.FirstTime,
|
|
|
|
|
)
|
|
|
|
|
_, err := bot.EditOrSend(user.TgId, txt, "", tgbotapi.InlineKeyboardMarkup{}, *query.Message)
|
|
|
|
|
return err
|
2023-08-12 12:53:13 +03:00
|
|
|
|
case "opt_del":
|
|
|
|
|
user.PosTag = database.Delete
|
|
|
|
|
if _, err := bot.DB.ID(user.L9Id).Update(user); err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
txt := "Ты действительно хочешь отключиться от этой группы?\n" +
|
|
|
|
|
"Напиши \"Да\" для подтверждения, для отмены напиши любой другой текст"
|
|
|
|
|
_, err := bot.EditOrSend(user.TgId, txt, "", tgbotapi.InlineKeyboardMarkup{}, *query.Message)
|
|
|
|
|
return err
|
2023-08-12 11:52:51 +03:00
|
|
|
|
|
2023-08-11 21:20:09 +03:00
|
|
|
|
case "opt_lesson":
|
|
|
|
|
options.NextNote = !options.NextNote
|
|
|
|
|
case "opt_day":
|
|
|
|
|
options.NextDay = !options.NextDay
|
|
|
|
|
case "opt_week":
|
|
|
|
|
options.NextWeek = !options.NextWeek
|
2023-08-12 12:32:34 +03:00
|
|
|
|
case "opt_mil":
|
|
|
|
|
options.Military = !options.Military
|
2023-08-11 21:20:09 +03:00
|
|
|
|
}
|
|
|
|
|
if _, err := bot.DB.UseBool().ID(options.UID).Update(&options); err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
_, err := bot.EditOrSend(user.TgId, optStr, "", OptMarkup(options), *query.Message)
|
|
|
|
|
return err
|
|
|
|
|
}
|