2023-02-22 17:23:38 +04:00
|
|
|
|
package tg
|
|
|
|
|
|
|
|
|
|
import (
|
2023-03-08 14:03:27 +04:00
|
|
|
|
"strconv"
|
2023-03-08 10:43:04 +04:00
|
|
|
|
"strings"
|
2023-02-22 17:23:38 +04:00
|
|
|
|
|
|
|
|
|
"git.l9labs.ru/anufriev.g.a/l9_stud_bot/modules/database"
|
2023-03-08 10:43:04 +04:00
|
|
|
|
"git.l9labs.ru/anufriev.g.a/l9_stud_bot/modules/ssau_parser"
|
2023-02-22 17:23:38 +04:00
|
|
|
|
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
|
2023-03-08 10:43:04 +04:00
|
|
|
|
"xorm.io/builder"
|
2023-02-22 17:23:38 +04:00
|
|
|
|
)
|
|
|
|
|
|
2023-03-08 14:03:27 +04:00
|
|
|
|
func (bot *Bot) Start() error {
|
2023-03-26 10:34:20 +04:00
|
|
|
|
bot.TG_user.PosTag = "ready"
|
2023-02-22 17:23:38 +04:00
|
|
|
|
_, err := bot.DB.Update(bot.TG_user)
|
|
|
|
|
if err != nil {
|
2023-03-08 14:03:27 +04:00
|
|
|
|
return err
|
2023-03-26 10:34:20 +04:00
|
|
|
|
}
|
2023-04-01 08:53:30 +04:00
|
|
|
|
msg := tgbotapi.NewMessage(
|
|
|
|
|
bot.TG_user.TgId,
|
|
|
|
|
`Привет! Я новая версия этого бота и пока тут за главного (:
|
|
|
|
|
У меня можно посмотреть в удобном формате <b>ближайшие пары</b>, расписание <b>по дням</b> и даже <b>по неделям</b>!
|
|
|
|
|
Просто напиши мне <b>номер группы</b> или <b>фамилию преподавателя</b>`)
|
2023-03-13 10:51:48 +04:00
|
|
|
|
msg.ParseMode = tgbotapi.ModeHTML
|
2023-03-26 10:34:20 +04:00
|
|
|
|
_, err = bot.TG.Send(msg)
|
2023-03-08 14:03:27 +04:00
|
|
|
|
return err
|
2023-02-22 17:23:38 +04:00
|
|
|
|
}
|
|
|
|
|
|
2023-03-08 14:03:27 +04:00
|
|
|
|
func (bot *Bot) Find(query string) error {
|
2023-03-08 10:43:04 +04:00
|
|
|
|
var groups []database.Group
|
|
|
|
|
bot.DB.Where(builder.Like{"GroupName", query}).Find(&groups)
|
|
|
|
|
|
|
|
|
|
var teachers []database.Teacher
|
|
|
|
|
bot.DB.Where(builder.Like{"LastName", query}).Find(&teachers)
|
|
|
|
|
|
2023-07-30 19:04:20 +04:00
|
|
|
|
list, _ := ssau_parser.SearchInRasp(query)
|
2023-03-08 10:43:04 +04:00
|
|
|
|
|
|
|
|
|
allGroups := groups
|
|
|
|
|
allTeachers := teachers
|
|
|
|
|
|
|
|
|
|
for _, elem := range list {
|
|
|
|
|
if strings.Contains(elem.Url, "group") {
|
|
|
|
|
exists := false
|
|
|
|
|
for _, group := range groups {
|
|
|
|
|
if elem.Id == group.GroupId {
|
|
|
|
|
exists = true
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if !exists {
|
|
|
|
|
allGroups = append(allGroups, database.Group{GroupId: elem.Id, GroupName: elem.Text})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if strings.Contains(elem.Url, "staff") {
|
|
|
|
|
exists := false
|
|
|
|
|
for _, teacher := range teachers {
|
|
|
|
|
if elem.Id == teacher.TeacherId {
|
|
|
|
|
exists = true
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if !exists {
|
|
|
|
|
name := strings.Split(elem.Text, " ")
|
|
|
|
|
allTeachers = append(allTeachers, database.Teacher{
|
|
|
|
|
TeacherId: elem.Id,
|
|
|
|
|
LastName: name[0],
|
|
|
|
|
FirstName: name[1],
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-24 17:15:02 +04:00
|
|
|
|
if len(allGroups) == 1 || len(allTeachers) == 1 {
|
|
|
|
|
if bot.TG_user.PosTag == "add" {
|
|
|
|
|
msg := tgbotapi.NewMessage(bot.TG_user.TgId, "Подключено!")
|
|
|
|
|
keyboard := tgbotapi.NewReplyKeyboard([]tgbotapi.KeyboardButton{tgbotapi.NewKeyboardButton("Главное меню")})
|
|
|
|
|
msg.ReplyMarkup = keyboard
|
|
|
|
|
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 := database.ShedulesInUser{
|
|
|
|
|
IsTeacher: !isGroup,
|
|
|
|
|
SheduleId: sheduleId,
|
|
|
|
|
}
|
|
|
|
|
err := bot.GetSummary([]database.ShedulesInUser{shedule}, false)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
bot.TG_user.PosTag = "ready"
|
|
|
|
|
err := bot.UpdateUserDB()
|
|
|
|
|
return err
|
|
|
|
|
} else if len(allGroups) != 0 {
|
2023-03-08 14:03:27 +04:00
|
|
|
|
if bot.TG_user.PosTag == "add" {
|
2023-03-15 16:26:52 +04:00
|
|
|
|
bot.TG_user.PosTag = "confirm_add_group"
|
|
|
|
|
} else {
|
|
|
|
|
bot.TG_user.PosTag = "confirm_see_group"
|
2023-03-08 14:03:27 +04:00
|
|
|
|
}
|
|
|
|
|
msg := tgbotapi.NewMessage(bot.TG_user.TgId, "Вот что я нашёл.\nВыбери свою группу")
|
2023-03-08 10:43:04 +04:00
|
|
|
|
msg.ReplyMarkup = GenerateKeyboard(GenerateGroupsArray(allGroups), query)
|
|
|
|
|
bot.TG.Send(msg)
|
|
|
|
|
} else if len(allTeachers) != 0 {
|
2023-03-08 14:03:27 +04:00
|
|
|
|
if bot.TG_user.PosTag == "add" {
|
2023-03-15 16:26:52 +04:00
|
|
|
|
bot.TG_user.PosTag = "confirm_add_teacher"
|
|
|
|
|
} else {
|
|
|
|
|
bot.TG_user.PosTag = "confirm_see_teacher"
|
2023-03-08 14:03:27 +04:00
|
|
|
|
}
|
|
|
|
|
msg := tgbotapi.NewMessage(bot.TG_user.TgId, "Вот что я нашёл.\nВыбери нужного преподавателя")
|
2023-03-08 10:43:04 +04:00
|
|
|
|
msg.ReplyMarkup = GenerateKeyboard(GenerateTeachersArray(allTeachers), query)
|
|
|
|
|
bot.TG.Send(msg)
|
|
|
|
|
} else {
|
2023-03-08 14:03:27 +04:00
|
|
|
|
msg := tgbotapi.NewMessage(bot.TG_user.TgId, "К сожалению, я ничего не нашёл ):\nПроверь свой запрос")
|
2023-03-08 10:43:04 +04:00
|
|
|
|
bot.TG.Send(msg)
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-08 14:03:27 +04:00
|
|
|
|
_, err := bot.DB.Update(bot.TG_user)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-15 16:26:52 +04:00
|
|
|
|
func (bot *Bot) SeeShedule(query *tgbotapi.CallbackQuery) error {
|
|
|
|
|
isGroup := bot.TG_user.PosTag == "confirm_see_group"
|
|
|
|
|
groupId, err := strconv.ParseInt(query.Data, 0, 64)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
shedule := database.ShedulesInUser{
|
|
|
|
|
IsTeacher: !isGroup,
|
|
|
|
|
SheduleId: groupId,
|
|
|
|
|
}
|
2023-03-24 12:30:47 +04:00
|
|
|
|
err = bot.GetSummary([]database.ShedulesInUser{shedule}, false)
|
2023-03-15 16:26:52 +04:00
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
bot.TG_user.PosTag = "ready"
|
|
|
|
|
err = bot.UpdateUserDB()
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-26 09:26:44 +04:00
|
|
|
|
func (bot *Bot) HandleSummary(query *tgbotapi.CallbackQuery) error {
|
|
|
|
|
data := strings.Split(query.Data, "_")
|
|
|
|
|
shedule, dt, err := ParseQuery(data)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
if data[1] == "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 {
|
|
|
|
|
switch data[0] {
|
|
|
|
|
case "day":
|
|
|
|
|
bot.GetDaySummary(shedule, dt, false, *query.Message)
|
|
|
|
|
case "week":
|
|
|
|
|
bot.GetWeekSummary(shedule, dt, false, *query.Message)
|
|
|
|
|
default:
|
|
|
|
|
bot.GetSummary(shedule, false, *query.Message)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-13 19:23:30 +04:00
|
|
|
|
func (bot *Bot) Confirm(query *tgbotapi.CallbackQuery) error {
|
2023-03-15 16:26:52 +04:00
|
|
|
|
isGroup := bot.TG_user.PosTag == "confirm_add_group"
|
2023-03-08 14:03:27 +04:00
|
|
|
|
groupId, err := strconv.ParseInt(query.Data, 0, 64)
|
|
|
|
|
if err != nil {
|
2023-03-13 19:23:30 +04:00
|
|
|
|
return err
|
2023-03-08 14:03:27 +04:00
|
|
|
|
}
|
|
|
|
|
var groups []database.ShedulesInUser
|
|
|
|
|
err = bot.DB.Find(&groups, &database.ShedulesInUser{
|
2023-03-13 10:51:48 +04:00
|
|
|
|
L9Id: bot.TG_user.L9Id,
|
2023-03-08 14:03:27 +04:00
|
|
|
|
SheduleId: groupId,
|
|
|
|
|
IsTeacher: !isGroup,
|
|
|
|
|
})
|
|
|
|
|
if err != nil {
|
2023-03-13 19:23:30 +04:00
|
|
|
|
return err
|
2023-03-08 14:03:27 +04:00
|
|
|
|
}
|
|
|
|
|
if len(groups) == 0 {
|
|
|
|
|
shInUser := database.ShedulesInUser{
|
2023-03-13 10:51:48 +04:00
|
|
|
|
L9Id: bot.TG_user.L9Id,
|
2023-03-08 14:03:27 +04:00
|
|
|
|
IsTeacher: !isGroup,
|
|
|
|
|
SheduleId: groupId,
|
|
|
|
|
}
|
|
|
|
|
bot.DB.InsertOne(shInUser)
|
2023-03-13 10:51:48 +04:00
|
|
|
|
bot.DeleteMsg(query)
|
2023-03-08 14:03:27 +04:00
|
|
|
|
msg := tgbotapi.NewMessage(bot.TG_user.TgId, "Подключено!")
|
2023-03-13 19:23:30 +04:00
|
|
|
|
keyboard := tgbotapi.NewReplyKeyboard([]tgbotapi.KeyboardButton{tgbotapi.NewKeyboardButton("Главное меню")})
|
|
|
|
|
msg.ReplyMarkup = keyboard
|
2023-03-08 14:03:27 +04:00
|
|
|
|
bot.TG.Send(msg)
|
|
|
|
|
|
2023-03-13 10:51:48 +04:00
|
|
|
|
bot.TG_user.PosTag = "ready"
|
2023-03-13 19:23:30 +04:00
|
|
|
|
err = bot.UpdateUserDB()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
2023-03-08 14:03:27 +04:00
|
|
|
|
} else {
|
2023-03-13 10:51:48 +04:00
|
|
|
|
var msg string
|
|
|
|
|
if isGroup {
|
|
|
|
|
msg = "Эта группа уже подключена!"
|
|
|
|
|
} else {
|
|
|
|
|
msg = "Этот преподаватель уже подключен!"
|
|
|
|
|
}
|
|
|
|
|
callback := tgbotapi.NewCallback(query.ID, msg)
|
2023-03-08 14:03:27 +04:00
|
|
|
|
bot.TG.Request(callback)
|
|
|
|
|
}
|
2023-03-13 19:23:30 +04:00
|
|
|
|
return nil
|
2023-03-08 10:43:04 +04:00
|
|
|
|
}
|
|
|
|
|
|
2023-03-13 19:23:30 +04:00
|
|
|
|
func (bot *Bot) Cancel(query *tgbotapi.CallbackQuery) error {
|
2023-03-24 17:15:02 +04:00
|
|
|
|
bot.TG_user.PosTag = "ready"
|
|
|
|
|
err := bot.UpdateUserDB()
|
2023-03-13 10:51:48 +04:00
|
|
|
|
if err != nil {
|
2023-03-24 17:15:02 +04:00
|
|
|
|
return err
|
2023-03-13 10:51:48 +04:00
|
|
|
|
}
|
2023-03-24 17:15:02 +04:00
|
|
|
|
bot.DeleteMsg(query)
|
|
|
|
|
|
2023-03-13 19:23:30 +04:00
|
|
|
|
return nil
|
2023-03-13 10:51:48 +04:00
|
|
|
|
}
|
|
|
|
|
|
2023-02-22 17:23:38 +04:00
|
|
|
|
func (bot *Bot) Etc() {
|
2023-03-08 14:03:27 +04:00
|
|
|
|
msg := tgbotapi.NewMessage(bot.TG_user.TgId, "Oй!")
|
2023-02-22 17:23:38 +04:00
|
|
|
|
bot.TG.Send(msg)
|
|
|
|
|
}
|