diff --git a/main.go b/main.go index d365c71..68e6659 100644 --- a/main.go +++ b/main.go @@ -5,7 +5,7 @@ import ( "os" "git.l9labs.ru/anufriev.g.a/l9_stud_bot/modules/database" - tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5" + "git.l9labs.ru/anufriev.g.a/l9_stud_bot/modules/tg" "github.com/joho/godotenv" ) @@ -16,62 +16,21 @@ func main() { engine := database.Connect(os.Getenv("MYSQL_USER"), os.Getenv("MYSQL_PASS"), os.Getenv("MYSQL_DB")) - bot, err := tgbotapi.NewBotAPI(os.Getenv("TELEGRAM_APITOKEN")) - if err != nil { - log.Fatal(err) - } - bot.Debug = true + bot := new(tg.Bot) + bot.InitBot(os.Getenv("TELEGRAM_APITOKEN"), *engine) - log.Printf("Authorized on account %s", bot.Self.UserName) + updates := bot.GetUpdates() - u := tgbotapi.NewUpdate(0) - u.Timeout = 60 - - updates := bot.GetUpdatesChan(u) - - for update := range updates { + for update := range *updates { if update.Message != nil { log.Printf("[%s] %s", update.Message.From.UserName, update.Message.Text) - var users []database.TgUser - err := engine.Find(&users, &database.TgUser{TgId: update.Message.Chat.ID}) - if err != nil { - log.Fatal(err) - } - - var tg_user database.TgUser - if len(users) == 0 { - l9id := database.GenerateID(engine) - - user := database.User{ - L9Id: l9id, - } - - tg_user = database.TgUser{ - L9Id: l9id, - Name: update.Message.From.UserName, - TgId: update.Message.Chat.ID, - PosTag: "not_started", - } - _, err := engine.Insert(user, tg_user) - if err != nil { - log.Fatal(err) - } - } else { - tg_user = users[0] - } + tg_user := bot.InitUser(update.Message) if tg_user.PosTag == "not_started" { - tg_user.PosTag = "started" - _, err := engine.Update(tg_user) - if err != nil { - log.Fatal(err) - } - msg := tgbotapi.NewMessage(update.Message.Chat.ID, "Hello!") - bot.Send(msg) + bot.Start() } else { - msg := tgbotapi.NewMessage(update.Message.Chat.ID, "Oops!") - bot.Send(msg) + bot.Etc() } } diff --git a/modules/tg/bot.go b/modules/tg/bot.go new file mode 100644 index 0000000..9dd715d --- /dev/null +++ b/modules/tg/bot.go @@ -0,0 +1,36 @@ +package tg + +import ( + "log" + + "git.l9labs.ru/anufriev.g.a/l9_stud_bot/modules/database" + tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5" + "xorm.io/xorm" +) + +type Bot struct { + TG *tgbotapi.BotAPI + DB xorm.Engine + TG_user database.TgUser +} + +func (bot *Bot) InitBot(token string, engine xorm.Engine) { + var err error + bot.TG, err = tgbotapi.NewBotAPI(token) + if err != nil { + log.Fatal(err) + } + bot.TG.Debug = true + + bot.DB = engine + + log.Printf("Authorized on account %s", bot.TG.Self.UserName) +} + +func (bot *Bot) GetUpdates() *tgbotapi.UpdatesChannel { + u := tgbotapi.NewUpdate(0) + u.Timeout = 60 + + updates := bot.TG.GetUpdatesChan(u) + return &updates +} diff --git a/modules/tg/handlers.go b/modules/tg/handlers.go new file mode 100644 index 0000000..915b04d --- /dev/null +++ b/modules/tg/handlers.go @@ -0,0 +1,56 @@ +package tg + +import ( + "log" + + "git.l9labs.ru/anufriev.g.a/l9_stud_bot/modules/database" + tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5" +) + +func (bot *Bot) InitUser(msg *tgbotapi.Message) *database.TgUser { + db := &bot.DB + var users []database.TgUser + err := db.Find(&users, &database.TgUser{TgId: msg.Chat.ID}) + if err != nil { + log.Fatal(err) + } + + var tg_user database.TgUser + if len(users) == 0 { + l9id := database.GenerateID(db) + + user := database.User{ + L9Id: l9id, + } + + tg_user = database.TgUser{ + L9Id: l9id, + Name: msg.From.UserName, + TgId: msg.Chat.ID, + PosTag: "not_started", + } + _, err := db.Insert(user, tg_user) + if err != nil { + log.Fatal(err) + } + } else { + tg_user = users[0] + } + bot.TG_user = tg_user + return &tg_user +} + +func (bot *Bot) Start() { + bot.TG_user.PosTag = "started" + _, err := bot.DB.Update(bot.TG_user) + if err != nil { + log.Fatal(err) + } + msg := tgbotapi.NewMessage(bot.TG_user.TgId, "Hello!") + bot.TG.Send(msg) +} + +func (bot *Bot) Etc() { + msg := tgbotapi.NewMessage(bot.TG_user.TgId, "Oops!") + bot.TG.Send(msg) +}