// Start will create the connection to TG and start a new tread for processing // chat messages. func (tg *TelegramBot) Start() error { u := tgbotapi.NewUpdate(0) u.Timeout = 60 updates, err := tg.Bot.GetUpdatesChan(u) if err != nil { return err } go func() { //defer func() { // if r := recover(); r != nil { // log.Println("Recovered from panic: ", r) // tg.Start() // } //}() for _, handler := range commands.StandardCommandHandlers { handler.SetBotAPI(tg.Bot) } for update := range updates { log.Printf("[%s] in %s: %s", update.Message.From.UserName, update.Message.Chat.Title, update.Message.Text) chat, err := items.NewChat(update.Message.Chat) if err != nil { log.Println(err) } chat.LastSeen = time.Now() for _, handler := range commands.StandardCommandHandlers { if handler.IsCommandMatch(&update) { err = handler.PreProcessText(&update) if err != nil { log.Println("Command not executed due to failed pre processing. \nError:", err, "\nCommand text:", update.Message.Text) continue } err = handler.Execute(&update) if err != nil { log.Println("Failed to execute command handler. \nError:", err, "\nCommand text: ", update.Message.Text) } break } } } }() log.Println("Telegram bot finished starting up.") return nil }
// Execute will run the echo command towards the chat where the command was posted. func (lc *LeetCommand) Execute(update *tgbotapi.Update) error { chat, err := items.NewChat(update.Message.Chat) if err != nil { return err } user, err := items.NewUser(update.Message.From) if err != nil { return err } fmt.Printf("1337: User %s, TG time: %s, S time: %s \n", update.Message.From, update.Message.Time().String(), time.Now().String()) return chat.Update1337(user, update.Message.Time()) }