示例#1
0
// 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
}
示例#2
0
// 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())
}