Тестирование: бот сам нажимает на кнопки
Добавлено: проверка кнопок
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 {
|
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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue