DB640/internal/telegram/telegram.go

77 lines
1.9 KiB
Go
Raw Normal View History

2020-03-26 17:11:12 +00:00
package telegram
import (
"log"
"git.1750studios.com/ToddShepard/DB640/internal/config"
"git.1750studios.com/ToddShepard/DB640/internal/database"
2020-03-26 17:11:12 +00:00
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api"
"github.com/jinzhu/gorm"
2020-03-26 17:11:12 +00:00
)
// UpdateChan is telegram UpdatesChannel
type UpdateChan = tgbotapi.UpdatesChannel
var bot *tgbotapi.BotAPI
// Init initzializes the telegram bot
func Init() (err error) {
2020-03-26 17:11:12 +00:00
bot, err = tgbotapi.NewBotAPI(config.C.Telegram.APIKey)
if err != nil {
return
2020-03-26 17:11:12 +00:00
}
log.Printf("Authorized on account %s", bot.Self.UserName)
return
}
2020-03-26 17:11:12 +00:00
// GetChan returns the Telegram update channel
func GetChan() (UpdateChan, error) {
2020-03-26 17:11:12 +00:00
u := tgbotapi.NewUpdate(0)
u.Timeout = 60
return bot.GetUpdatesChan(u)
}
// DeInit deinitzialisizes the bot
func DeInit() {
bot.StopReceivingUpdates()
}
2020-03-26 17:11:12 +00:00
// SendReply sends a reply to the given update
func SendReply(reply string, update tgbotapi.Update) error {
var chat database.TGChat
chat.ID = update.Message.Chat.ID
if database.Db.First(&chat).Error != gorm.ErrRecordNotFound {
chat.FirstName = update.Message.Chat.FirstName
chat.LastName = update.Message.Chat.LastName
chat.UserName = update.Message.Chat.UserName
database.Db.Save(&chat)
} else {
chat.FirstName = update.Message.Chat.FirstName
chat.LastName = update.Message.Chat.LastName
chat.UserName = update.Message.Chat.UserName
database.Db.Create(&chat)
}
2020-03-26 17:11:12 +00:00
msg := tgbotapi.NewMessage(update.Message.Chat.ID, reply)
if _, err := bot.Send(msg); err != nil {
return err
}
return nil
}
// SendAll sends a message to all active users
func SendAll(msg string) {
log.Printf("[TELEGRAM] Sending to all chats: %s", msg)
var chats []database.TGChat
database.Db.Find(&chats)
for _, chat := range chats {
tgmsg := tgbotapi.NewMessage(chat.ID, msg)
if _, err := bot.Send(tgmsg); err != nil && err.Error() == "Forbidden: bot was blocked by the user" {
database.Db.Unscoped().Delete(&chat)
}
}
}