tamtam/examples/example_longpolling.go
Alexander Kiryukhin e768ef944c
Fix issue #3
2021-02-14 13:21:37 +03:00

58 lines
1.1 KiB
Go

// +build ignore
/**
* Updates loop example
*/
package main
import (
"context"
"fmt"
"log"
"os"
"os/signal"
"github.com/neonxp/tamtam"
"github.com/neonxp/tamtam/schemes"
)
func main() {
// Initialisation
api := tamtam.New(os.Getenv("TOKEN"))
// Some methods demo:
info, err := api.Bots.GetBot()
log.Printf("Get me: %#v %#v", info, err)
ctx, cancel := context.WithCancel(context.Background())
go func() {
for upd := range api.GetUpdates(ctx) {
log.Printf("Received: %#v", upd)
switch upd := upd.(type) {
case *schemes.MessageCreatedUpdate:
err := api.Messages.Send(
tamtam.NewMessage().
SetUser(upd.Message.Sender.UserId).
SetText(fmt.Sprintf("Hello, %s! Your message: %s", upd.Message.Sender.Name, upd.Message.Body.Text)),
)
if err != nil {
log.Printf("Error: %#v", err)
}
default:
log.Printf("Unknown type: %#v", upd)
}
}
}()
go func() {
exit := make(chan os.Signal)
signal.Notify(exit, os.Kill, os.Interrupt)
select {
case <-exit:
cancel()
case <-ctx.Done():
return
}
}()
<-ctx.Done()
}