Тестирование: бот сам нажимает на кнопки

Добавлено: проверка кнопок
This commit is contained in:
far-galaxy 2023-08-03 15:49:51 +04:00
parent ea62cdf919
commit a9bf4f5a8f
4 changed files with 42 additions and 23 deletions

View File

@ -28,7 +28,7 @@ func main() {
} }
for update := range *bot.Updates { for update := range *bot.Updates {
err := bot.HandleUpdate(update) _, err := bot.HandleUpdate(update)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
} }

View File

@ -5,6 +5,7 @@ import (
"io" "io"
"log" "log"
"os" "os"
"strings"
"git.l9labs.ru/anufriev.g.a/l9_stud_bot/modules/database" "git.l9labs.ru/anufriev.g.a/l9_stud_bot/modules/database"
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5" tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
@ -112,46 +113,49 @@ func InitUser(db *xorm.Engine, user *tgbotapi.User) (*database.TgUser, error) {
return &tg_user, nil return &tg_user, nil
} }
func (bot *Bot) HandleUpdate(update tgbotapi.Update) error { func (bot *Bot) HandleUpdate(update tgbotapi.Update) (tgbotapi.Message, error) {
nilMsg := tgbotapi.Message{}
if update.Message != nil { if update.Message != nil {
msg := update.Message msg := update.Message
user, err := InitUser(bot.DB, msg.From) user, err := InitUser(bot.DB, msg.From)
if err != nil { if err != nil {
return err return nilMsg, err
} }
bot.Debug.Printf("Message [%d] <%s> %s", user.L9Id, user.Name, msg.Text) bot.Debug.Printf("Message [%d] <%s> %s", user.L9Id, user.Name, msg.Text)
switch user.PosTag { switch user.PosTag {
case database.NotStarted: case database.NotStarted:
err = bot.Start(user) err = bot.Start(user)
case database.Ready: case database.Ready:
err = bot.Find(user, msg.Text) return bot.Find(user, msg.Text)
default: default:
bot.Etc(user) bot.Etc(user)
} }
if err != nil { if err != nil {
return err return nilMsg, err
} }
} }
if update.CallbackQuery != nil { if update.CallbackQuery != nil {
query := update.CallbackQuery query := update.CallbackQuery
user, err := InitUser(bot.DB, query.From) user, err := InitUser(bot.DB, query.From)
if err != nil { if err != nil {
return err return nilMsg, err
} }
bot.Debug.Printf("Callback [%d] <%s> %s", user.L9Id, user.Name, query.Data) bot.Debug.Printf("Callback [%d] <%s> %s", user.L9Id, user.Name, query.Data)
switch user.PosTag { switch user.PosTag {
case database.NotStarted: case database.NotStarted:
err = bot.Start(user) err = bot.Start(user)
case database.Ready: case database.Ready:
err = bot.GetShedule(user, query) if !strings.Contains(query.Data, "sh") {
err = bot.GetShedule(user, query)
}
default: default:
bot.Etc(user) bot.Etc(user)
} }
if err != nil { if err != nil {
return err return nilMsg, err
} }
callback := tgbotapi.NewCallback(query.ID, query.Data) callback := tgbotapi.NewCallback(query.ID, query.Data)
bot.TG.Request(callback) bot.TG.Request(callback)
} }
return nil return nilMsg, nil
} }

View File

@ -28,7 +28,7 @@ func (bot *Bot) Start(user *database.TgUser) error {
} }
// Поиск расписания по запросу // Поиск расписания по запросу
func (bot *Bot) Find(user *database.TgUser, query string) error { func (bot *Bot) Find(user *database.TgUser, query string) (tgbotapi.Message, error) {
// Поиск в БД // Поиск в БД
var groups []database.Group var groups []database.Group
bot.DB.Where(builder.Like{"GroupName", query}).Find(&groups) bot.DB.Where(builder.Like{"GroupName", query}).Find(&groups)
@ -81,7 +81,9 @@ func (bot *Bot) Find(user *database.TgUser, query string) error {
tgbotapi.NewKeyboardButton("Моё расписание"), tgbotapi.NewKeyboardButton("Моё расписание"),
}) })
msg.ReplyMarkup = keyboard msg.ReplyMarkup = keyboard
bot.TG.Send(msg) user.PosTag = database.Ready
bot.DB.Update(user)
return bot.TG.Send(msg)
} else { } else {
var sheduleId int64 var sheduleId int64
var isGroup bool var isGroup bool
@ -103,27 +105,24 @@ func (bot *Bot) Find(user *database.TgUser, query string) error {
shedule.SheduleId, shedule.SheduleId,
), ),
) )
bot.TG.Send(msg) return bot.TG.Send(msg)
/* /*
err := bot.GetSummary([]database.ShedulesInUser{shedule}, false) err := bot.GetSummary([]database.ShedulesInUser{shedule}, false)
if err != nil { if err != nil {
return err return err
}*/ }*/
} }
user.PosTag = database.Ready
err := bot.UpdateUserDB(user)
return err
// Если получено несколько групп // Если получено несколько групп
} else if len(allGroups) != 0 { } else if len(allGroups) != 0 {
msg := tgbotapi.NewMessage(user.TgId, "Вот что я нашёл\nВыбери нужную группу") msg := tgbotapi.NewMessage(user.TgId, "Вот что я нашёл\nВыбери нужную группу")
msg.ReplyMarkup = GenerateKeyboard(GenerateGroupsArray(allGroups, user.PosTag == database.Add)) msg.ReplyMarkup = GenerateKeyboard(GenerateGroupsArray(allGroups, user.PosTag == database.Add))
bot.TG.Send(msg) return bot.TG.Send(msg)
// Если получено несколько преподавателей // Если получено несколько преподавателей
} else if len(allTeachers) != 0 { } else if len(allTeachers) != 0 {
msg := tgbotapi.NewMessage(user.TgId, "Вот что я нашёл\nВыбери нужного преподавателя") msg := tgbotapi.NewMessage(user.TgId, "Вот что я нашёл\nВыбери нужного преподавателя")
msg.ReplyMarkup = GenerateKeyboard(GenerateTeachersArray(allTeachers, user.PosTag == database.Add)) msg.ReplyMarkup = GenerateKeyboard(GenerateTeachersArray(allTeachers, user.PosTag == database.Add))
bot.TG.Send(msg) return bot.TG.Send(msg)
// Если ничего не получено // Если ничего не получено
} else { } else {
var msg tgbotapi.MessageConfig var msg tgbotapi.MessageConfig
@ -141,17 +140,16 @@ func (bot *Bot) Find(user *database.TgUser, query string) error {
) )
} }
bot.TG.Send(msg) return bot.TG.Send(msg)
} }
user.PosTag = database.Ready
_, err := bot.DB.Update(user)
return err
} }
// Получить расписание из кнопки // Получить расписание из кнопки
// TODO: проверять валидность данных кнопки
func (bot *Bot) GetShedule(user *database.TgUser, query *tgbotapi.CallbackQuery) error { func (bot *Bot) GetShedule(user *database.TgUser, query *tgbotapi.CallbackQuery) error {
data := strings.Split(query.Data, "_") data := strings.Split(query.Data, "_")
if len(data) != 3 {
return fmt.Errorf("wrong button format: %s", query.Data)
}
isGroup := data[1] == "group" isGroup := data[1] == "group"
isAdd := data[0] == "true" isAdd := data[0] == "true"
groupId, err := strconv.ParseInt(data[2], 0, 64) groupId, err := strconv.ParseInt(data[2], 0, 64)

View File

@ -103,14 +103,31 @@ func TestHandleUpdate(t *testing.T) {
From: &user, From: &user,
}, },
} }
var messages []tgbotapi.Message
// Бот общается с ботом
for i, query := range dialog { for i, query := range dialog {
if i == len(dialog)-1 { if i == len(dialog)-1 {
ssau_parser.HeadURL = "https://sasau.ru" ssau_parser.HeadURL = "https://sasau.ru"
} }
update.Message.Text = query update.Message.Text = query
err := bot.HandleUpdate(update) msg, err := bot.HandleUpdate(update)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
messages = append(messages, msg)
}
// Бот нажимает на кнопки за пользователя
update = tgbotapi.Update{
CallbackQuery: &tgbotapi.CallbackQuery{
From: &user,
Message: &messages[3],
Data: *messages[3].ReplyMarkup.InlineKeyboard[0][0].CallbackData,
},
}
_, err := bot.HandleUpdate(update)
if err != nil {
log.Fatal(err)
} }
} }