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

Добавлено: проверка кнопок
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 {
err := bot.HandleUpdate(update)
_, err := bot.HandleUpdate(update)
if err != nil {
log.Println(err)
}

View File

@ -5,6 +5,7 @@ import (
"io"
"log"
"os"
"strings"
"git.l9labs.ru/anufriev.g.a/l9_stud_bot/modules/database"
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
}
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 {
msg := update.Message
user, err := InitUser(bot.DB, msg.From)
if err != nil {
return err
return nilMsg, err
}
bot.Debug.Printf("Message [%d] <%s> %s", user.L9Id, user.Name, msg.Text)
switch user.PosTag {
case database.NotStarted:
err = bot.Start(user)
case database.Ready:
err = bot.Find(user, msg.Text)
return bot.Find(user, msg.Text)
default:
bot.Etc(user)
}
if err != nil {
return err
return nilMsg, err
}
}
if update.CallbackQuery != nil {
query := update.CallbackQuery
user, err := InitUser(bot.DB, query.From)
if err != nil {
return err
return nilMsg, err
}
bot.Debug.Printf("Callback [%d] <%s> %s", user.L9Id, user.Name, query.Data)
switch user.PosTag {
case database.NotStarted:
err = bot.Start(user)
case database.Ready:
err = bot.GetShedule(user, query)
if !strings.Contains(query.Data, "sh") {
err = bot.GetShedule(user, query)
}
default:
bot.Etc(user)
}
if err != nil {
return err
return nilMsg, err
}
callback := tgbotapi.NewCallback(query.ID, query.Data)
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
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("Моё расписание"),
})
msg.ReplyMarkup = keyboard
bot.TG.Send(msg)
user.PosTag = database.Ready
bot.DB.Update(user)
return bot.TG.Send(msg)
} else {
var sheduleId int64
var isGroup bool
@ -103,27 +105,24 @@ func (bot *Bot) Find(user *database.TgUser, query string) error {
shedule.SheduleId,
),
)
bot.TG.Send(msg)
return bot.TG.Send(msg)
/*
err := bot.GetSummary([]database.ShedulesInUser{shedule}, false)
if err != nil {
return err
}*/
}
user.PosTag = database.Ready
err := bot.UpdateUserDB(user)
return err
// Если получено несколько групп
} else if len(allGroups) != 0 {
msg := tgbotapi.NewMessage(user.TgId, "Вот что я нашёл\nВыбери нужную группу")
msg.ReplyMarkup = GenerateKeyboard(GenerateGroupsArray(allGroups, user.PosTag == database.Add))
bot.TG.Send(msg)
return bot.TG.Send(msg)
// Если получено несколько преподавателей
} else if len(allTeachers) != 0 {
msg := tgbotapi.NewMessage(user.TgId, "Вот что я нашёл\nВыбери нужного преподавателя")
msg.ReplyMarkup = GenerateKeyboard(GenerateTeachersArray(allTeachers, user.PosTag == database.Add))
bot.TG.Send(msg)
return bot.TG.Send(msg)
// Если ничего не получено
} else {
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 {
data := strings.Split(query.Data, "_")
if len(data) != 3 {
return fmt.Errorf("wrong button format: %s", query.Data)
}
isGroup := data[1] == "group"
isAdd := data[0] == "true"
groupId, err := strconv.ParseInt(data[2], 0, 64)

View File

@ -103,14 +103,31 @@ func TestHandleUpdate(t *testing.T) {
From: &user,
},
}
var messages []tgbotapi.Message
// Бот общается с ботом
for i, query := range dialog {
if i == len(dialog)-1 {
ssau_parser.HeadURL = "https://sasau.ru"
}
update.Message.Text = query
err := bot.HandleUpdate(update)
msg, err := bot.HandleUpdate(update)
if err != nil {
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)
}
}