From 11db204ea17dc04a1037a63ffd12ea23fba2d429 Mon Sep 17 00:00:00 2001 From: far-galaxy Date: Thu, 3 Aug 2023 13:39:59 +0400 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE:=20=D1=81=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=B1=D0=BE=D1=80=D0=B0=20=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=B0=D1=8E=D1=82=20=D0=B1=D0=B5=D0=B7=20=D1=82=D1=8D?= =?UTF-8?q?=D0=B3=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ssau_parser/connecter.go | 8 ++++---- modules/ssau_parser/connecter_test.go | 6 +++--- modules/ssau_parser/database_test.go | 4 ++-- modules/ssau_parser/parser_test.go | 2 +- modules/ssau_parser/shedule_test.go | 4 ++-- modules/tg/bot.go | 12 ++++++++++++ modules/tg/handlers.go | 15 +++------------ modules/tg/tg_test.go | 11 +++++++++-- modules/tg/utils.go | 14 ++++++++++---- 9 files changed, 46 insertions(+), 30 deletions(-) diff --git a/modules/ssau_parser/connecter.go b/modules/ssau_parser/connecter.go index 884051a..8e2f513 100644 --- a/modules/ssau_parser/connecter.go +++ b/modules/ssau_parser/connecter.go @@ -29,14 +29,14 @@ type Page struct { } // Адрес основного сайта (прод или тестовый) -var headURL = "https://ssau.ru" +var HeadURL = "https://ssau.ru" // Поиск расписания группы или преподавателя через ssau.ru/rasp/search func SearchInRasp(query string) (SearchResults, error) { client := http.Client{} // Сначала заходим на сам сайт и получаем токены, чтобы нас посчитали человеком - req, err := http.NewRequest("GET", headURL+"/rasp", nil) + req, err := http.NewRequest("GET", HeadURL+"/rasp", nil) if err != nil { return nil, err } @@ -60,7 +60,7 @@ func SearchInRasp(query string) (SearchResults, error) { parm.Add("text", query) // Теперь можно обращаться к подобию API - req, err = http.NewRequest("POST", headURL+"/rasp/search", strings.NewReader(parm.Encode())) + req, err = http.NewRequest("POST", HeadURL+"/rasp/search", strings.NewReader(parm.Encode())) if err != nil { return nil, err } @@ -112,7 +112,7 @@ func DownloadShedule(uri string, week int) (Page, error) { page.Week = week client := http.Client{} - req, err := http.NewRequest("GET", fmt.Sprintf("%s%s&selectedWeek=%d", headURL, uri, week), nil) + req, err := http.NewRequest("GET", fmt.Sprintf("%s%s&selectedWeek=%d", HeadURL, uri, week), nil) if err != nil { return page, err } diff --git a/modules/ssau_parser/connecter_test.go b/modules/ssau_parser/connecter_test.go index 07bb745..8768f2c 100644 --- a/modules/ssau_parser/connecter_test.go +++ b/modules/ssau_parser/connecter_test.go @@ -35,7 +35,7 @@ func TestSearchInRasp(t *testing.T) { } // Проверка ошибок на стороне сайта for _, url := range urls { - headURL = url + HeadURL = url pingQuery(queries[0], t) } } @@ -63,7 +63,7 @@ var weeks = []int{ func TestDownloadShedule(t *testing.T) { // headURL = "https://ssau.ru" - headURL = "http://127.0.0.1:5000" + HeadURL = "http://127.0.0.1:5000" for _, uri := range groupUri { for _, week := range weeks { if _, err := DownloadShedule(uri, week); err != nil { @@ -77,7 +77,7 @@ func TestDownloadShedule(t *testing.T) { if _, err := DownloadSheduleById(59915001, false, 1); err != nil { log.Println(err) } - headURL = "http://127.0.0.1:5000/oops/" + HeadURL = "http://127.0.0.1:5000/oops/" if _, err := DownloadSheduleById(59915001, false, 1); err != nil { log.Println(err) } diff --git a/modules/ssau_parser/database_test.go b/modules/ssau_parser/database_test.go index b37330f..d93c4ce 100644 --- a/modules/ssau_parser/database_test.go +++ b/modules/ssau_parser/database_test.go @@ -33,7 +33,7 @@ func prepareDB() *xorm.Engine { func TestCheckGroupOrTeacher(t *testing.T) { db := prepareDB() - headURL = "http://127.0.0.1:5000" + HeadURL = "http://127.0.0.1:5000" sh := WeekShedule{ SheduleId: 802440189, IsGroup: true, @@ -61,7 +61,7 @@ func TestCheckGroupOrTeacher(t *testing.T) { func TestUpdateSchedule(t *testing.T) { db := prepareDB() - headURL = "http://127.0.0.1:5000" + HeadURL = "http://127.0.0.1:5000" sh := WeekShedule{ SheduleId: 802440189, IsGroup: true, diff --git a/modules/ssau_parser/parser_test.go b/modules/ssau_parser/parser_test.go index 8b73b69..f207639 100644 --- a/modules/ssau_parser/parser_test.go +++ b/modules/ssau_parser/parser_test.go @@ -6,7 +6,7 @@ import ( ) func TestParse(t *testing.T) { - headURL = "http://127.0.0.1:5000" + HeadURL = "http://127.0.0.1:5000" sh := WeekShedule{ SheduleId: 802440189, IsGroup: true, diff --git a/modules/ssau_parser/shedule_test.go b/modules/ssau_parser/shedule_test.go index da04cb7..c975a29 100644 --- a/modules/ssau_parser/shedule_test.go +++ b/modules/ssau_parser/shedule_test.go @@ -6,7 +6,7 @@ import ( ) func TestDownload(t *testing.T) { - headURL = "http://127.0.0.1:5000" + HeadURL = "http://127.0.0.1:5000" sh := WeekShedule{} err := sh.Download("/rasp?groupId=802440189", 4, false) handleError(err) @@ -34,7 +34,7 @@ func TestDownload(t *testing.T) { } func TestSheduleCompare(t *testing.T) { - headURL = "http://127.0.0.1:5000" + HeadURL = "http://127.0.0.1:5000" sh := WeekShedule{ SheduleId: 802440189, IsGroup: true, diff --git a/modules/tg/bot.go b/modules/tg/bot.go index 0c9ed39..76348ce 100644 --- a/modules/tg/bot.go +++ b/modules/tg/bot.go @@ -125,10 +125,22 @@ func (bot *Bot) HandleUpdate(update tgbotapi.Update) error { err = bot.Start(user) case database.Ready: err = bot.Find(user, msg.Text) + default: + bot.Etc(user) } if err != nil { return err } } + if update.CallbackQuery != nil { + query := update.CallbackQuery + user, err := InitUser(bot.DB, query.From) + if err != nil { + return err + } + bot.Debug.Printf("Callback [%d] <%s> %s", user.L9Id, user.Name, query.Data) + callback := tgbotapi.NewCallback(query.ID, query.Data) + bot.TG.Request(callback) + } return nil } diff --git a/modules/tg/handlers.go b/modules/tg/handlers.go index f0b2541..0ff3f18 100644 --- a/modules/tg/handlers.go +++ b/modules/tg/handlers.go @@ -115,23 +115,13 @@ func (bot *Bot) Find(user *database.TgUser, query string) error { // Если получено несколько групп } else if len(allGroups) != 0 { - if user.PosTag == database.Add { - user.PosTag = database.SelAddGroup - } else { - user.PosTag = database.SelSeeGroup - } msg := tgbotapi.NewMessage(user.TgId, "Вот что я нашёл\nВыбери нужную группу") - msg.ReplyMarkup = GenerateKeyboard(GenerateGroupsArray(allGroups)) + msg.ReplyMarkup = GenerateKeyboard(GenerateGroupsArray(allGroups, user.PosTag == database.Add)) bot.TG.Send(msg) // Если получено несколько преподавателей } else if len(allTeachers) != 0 { - if user.PosTag == database.Add { - user.PosTag = database.SelAddStaff - } else { - user.PosTag = database.SelSeeStaff - } msg := tgbotapi.NewMessage(user.TgId, "Вот что я нашёл\nВыбери нужного преподавателя") - msg.ReplyMarkup = GenerateKeyboard(GenerateTeachersArray(allTeachers)) + msg.ReplyMarkup = GenerateKeyboard(GenerateTeachersArray(allTeachers, user.PosTag == database.Add)) bot.TG.Send(msg) // Если ничего не получено } else { @@ -262,6 +252,7 @@ func (bot *Bot) Find(user *database.TgUser, query string) error { return nil } */ + func (bot *Bot) Etc(user *database.TgUser) { msg := tgbotapi.NewMessage(user.TgId, "Oй!") bot.TG.Send(msg) diff --git a/modules/tg/tg_test.go b/modules/tg/tg_test.go index 0666736..08a9c99 100644 --- a/modules/tg/tg_test.go +++ b/modules/tg/tg_test.go @@ -7,6 +7,7 @@ import ( "testing" "git.l9labs.ru/anufriev.g.a/l9_stud_bot/modules/database" + "git.l9labs.ru/anufriev.g.a/l9_stud_bot/modules/ssau_parser" tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5" ) @@ -85,8 +86,11 @@ func TestInitUser(t *testing.T) { var dialog = []string{ "/start", "2305", + "Батурин", + "230", "Балякин", - //"230", + "aaa", + "aaa", } func TestHandleUpdate(t *testing.T) { @@ -99,7 +103,10 @@ func TestHandleUpdate(t *testing.T) { From: &user, }, } - for _, query := range dialog { + for i, query := range dialog { + if i == len(dialog)-1 { + ssau_parser.HeadURL = "https://sasau.ru" + } update.Message.Text = query err := bot.HandleUpdate(update) if err != nil { diff --git a/modules/tg/utils.go b/modules/tg/utils.go index 17b4960..5c1b5e2 100644 --- a/modules/tg/utils.go +++ b/modules/tg/utils.go @@ -10,10 +10,13 @@ import ( ) // Создание ряда кнопок из списка групп -func GenerateGroupsArray(groups []database.Group) []tgbotapi.InlineKeyboardButton { +func GenerateGroupsArray(groups []database.Group, isAdd bool) []tgbotapi.InlineKeyboardButton { var grKeys []tgbotapi.InlineKeyboardButton for _, gr := range groups { - grKeys = append(grKeys, tgbotapi.NewInlineKeyboardButtonData(gr.GroupName, strconv.FormatInt(gr.GroupId, 10))) + grKeys = append(grKeys, tgbotapi.NewInlineKeyboardButtonData( + gr.GroupName, + fmt.Sprintf("%t_group_%d", isAdd, gr.GroupId), + )) } return grKeys } @@ -28,11 +31,14 @@ func GenerateName(t database.Teacher) string { } // Создание ряда кнопок из списка преподавателей -func GenerateTeachersArray(teachers []database.Teacher) []tgbotapi.InlineKeyboardButton { +func GenerateTeachersArray(teachers []database.Teacher, isAdd bool) []tgbotapi.InlineKeyboardButton { var teacherKeys []tgbotapi.InlineKeyboardButton for _, t := range teachers { name := fmt.Sprintf("%s %s", t.FirstName, t.ShortName) - teacherKeys = append(teacherKeys, tgbotapi.NewInlineKeyboardButtonData(name, strconv.FormatInt(t.TeacherId, 10))) + teacherKeys = append(teacherKeys, tgbotapi.NewInlineKeyboardButtonData( + name, + fmt.Sprintf("%t_staff_%d", isAdd, t.TeacherId), + )) } return teacherKeys }