Изменено: вынесен бэкенд Telegram

This commit is contained in:
far-galaxy 2023-02-22 17:23:38 +04:00
parent 8241500df1
commit d9c869a854
3 changed files with 100 additions and 49 deletions

57
main.go
View File

@ -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()
}
}

36
modules/tg/bot.go Normal file
View File

@ -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
}

56
modules/tg/handlers.go Normal file
View File

@ -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)
}