Тестирование: бот сам нажимает на кнопки
Добавлено: проверка кнопок
This commit is contained in:
parent
ea62cdf919
commit
a9bf4f5a8f
2
main.go
2
main.go
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
Reference in New Issue