101 lines
4.0 KiB
Go
101 lines
4.0 KiB
Go
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: "🔕"}
|
||
var milBell = map[bool]string{true: "🫡 Есть военка", false: "🏖 Нет военки"}
|
||
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
|
||
}
|
||
// Если кто-то хитрожопый нажал на кнопку без подключенной группы
|
||
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)
|
||
}
|
||
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{
|
||
{tgbotapi.NewInlineKeyboardButtonData(fmt.Sprintf("%s Начало занятий", bell[options.First]), "opt_first")},
|
||
{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")},
|
||
{tgbotapi.NewInlineKeyboardButtonData(milBell[options.Military], "opt_mil")},
|
||
{tgbotapi.NewInlineKeyboardButtonData("❌ Отключиться от группы", "opt_del")},
|
||
{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"),
|
||
}
|
||
}
|
||
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 {
|
||
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
|
||
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
|
||
|
||
case "opt_lesson":
|
||
options.NextNote = !options.NextNote
|
||
case "opt_day":
|
||
options.NextDay = !options.NextDay
|
||
case "opt_week":
|
||
options.NextWeek = !options.NextWeek
|
||
case "opt_mil":
|
||
options.Military = !options.Military
|
||
}
|
||
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
|
||
}
|