// *whirrrrrrrrrrr* func probe(db *bolt.DB, api *tbotapi.TelegramBotAPI, closed chan struct{}, wg *sync.WaitGroup) { dbBucketName := "alphazero" dbBucketStats := fmt.Sprintf("%s.stats", dbBucketName) for { select { case <-closed: wg.Done() return case val := <-api.Updates: typ := val.Message.Type() if typ != model.TextType { fmt.Fprintf(os.Stderr, "Not handling type: %s\n", typ) continue } response, md := process(db, val) db.Update(func(tx *bolt.Tx) error { b := tx.Bucket([]byte(dbBucketStats)) id := []byte("messages.count.received") var val []byte if val = b.Get(id); val == nil { val = []byte("0") } c, _ := strconv.Atoi(string(val)) c++ return b.Put(id, []byte(strconv.Itoa(c))) }) // unsafeval := blackfriday.MarkdownCommon([]byte(*val.Message.Text)) // unsafe := blackfriday.MarkdownCommon([]byte(response)) // html := bluemonday.UGCPolicy().SanitizeBytes(unsafe) sender := val.Message.Chat recipient := model.NewRecipientFromChat(val.Message.Chat) om := model.NewOutgoingMessage( model.NewChatRecipient(*recipient.ChatID), response).SetMarkdown(md) var msg *model.MessageResponse var err error msg, err = api.SendMessageExtended(om) if err != nil { msg, err = api.SendMessageExtended(om.SetMarkdown(false)) if err != nil { fmt.Fprintf(os.Stderr, "Err: %s\n", err) continue } } fmt.Printf( "MessageID: %04d, ChatID: %s, Text: %s, IsGroupChat:%t\n", msg.Message.ID, sender.String(), response, msg.Message.Chat.IsGroupChat()) case val := <-api.Errors: fmt.Printf("Err: %s\n", val) } } }
func main() { api, err := tbotapi.New("YOUR_API_KEY") if err != nil { log.Fatal(err) } // just to show its working fmt.Printf("User ID: %d\n", api.ID) fmt.Printf("Bot Name: %s\n", api.Name) fmt.Printf("Bot Username: %s\n", api.Username) closed := make(chan struct{}) wg := &sync.WaitGroup{} wg.Add(1) go func() { for { select { case <-closed: wg.Done() return case val := <-api.Updates: typ := val.Message.Type() if typ != model.TextType { //ignore non-text messages for now continue } // -> simple echo bot msg, err := api.SendMessage(model.NewRecipientFromChat(val.Message.Chat), *val.Message.Text) //or //msg, err := api.SendMessage(model.NewChatRecipient(val.Message.Chat.Id), *val.Message.Text) // -> simple echo bot with disabled web page preview //msg, err := api.SendMessageExtended(model.NewOutgoingMessage(model.NewChatRecipient(val.Message.Chat.Id), val.Message.Text).SetDisableWebPagePreview(true)) // or: //msg, err := api.SendMessageExtended(model.NewOutgoingMessage(model.NewRecipientFromChat(val.Message.Chat), val.Message.Text).SetDisableWebPagePreview(true)) // -> simple echo bot via forwarding //msg, err = api.ForwardMessage(model.NewOutgoingForward(model.NewRecipientFromChat(val.Message.Chat), val.Message.Chat, val.Message.Id)) // -> bot that always sends an image as response //msg, err := api.SendPhoto(model.NewOutgoingPhoto(model.NewChatRecipient(val.Message.Chat.Id)), "/path/to/your/image.jpg") if err != nil { fmt.Printf("Err: %s\n", err) continue } fmt.Printf("MessageID: %d, Text: %s, IsGroupChat:%t\n", msg.Message.ID, *msg.Message.Text, msg.Message.Chat.IsGroupChat()) case val := <-api.Errors: fmt.Printf("Err: %s\n", val) } } }() // let it run for five minutes time.Sleep(time.Duration(5) * time.Minute) fmt.Println("Closing...") api.Close() close(closed) wg.Wait() }