diff --git a/bot.go b/bot.go index 24d7777..373fa41 100644 --- a/bot.go +++ b/bot.go @@ -7,7 +7,6 @@ import ( "encoding/json" "errors" "fmt" - "github.com/technoweenie/multipartstreamer" "io/ioutil" "log" "net/http" @@ -16,6 +15,8 @@ import ( "strconv" "strings" "time" + + "github.com/technoweenie/multipartstreamer" ) // BotAPI allows you to interact with the Telegram Bot API. @@ -448,8 +449,9 @@ func (bot *BotAPI) GetWebhookInfo() (WebhookInfo, error) { } // GetUpdatesChan starts and returns a channel for getting updates. -func (bot *BotAPI) GetUpdatesChan(config UpdateConfig) (<-chan Update, error) { - updatesChan := make(chan Update, 100) +func (bot *BotAPI) GetUpdatesChan(config UpdateConfig) (updatesChannel, error) { + ch := make(chan Update, 100) + var updatesCh updatesChannel = ch go func() { for { @@ -465,18 +467,19 @@ func (bot *BotAPI) GetUpdatesChan(config UpdateConfig) (<-chan Update, error) { for _, update := range updates { if update.UpdateID >= config.Offset { config.Offset = update.UpdateID + 1 - updatesChan <- update + ch <- update } } } }() - return updatesChan, nil + return updatesCh, nil } // ListenForWebhook registers a http handler for a webhook. -func (bot *BotAPI) ListenForWebhook(pattern string) <-chan Update { - updatesChan := make(chan Update, 100) +func (bot *BotAPI) ListenForWebhook(pattern string) updatesChannel { + ch := make(chan Update, 100) + var updatesCh updatesChannel = ch http.HandleFunc(pattern, func(w http.ResponseWriter, r *http.Request) { bytes, _ := ioutil.ReadAll(r.Body) @@ -484,10 +487,10 @@ func (bot *BotAPI) ListenForWebhook(pattern string) <-chan Update { var update Update json.Unmarshal(bytes, &update) - updatesChan <- update + ch <- update }) - return updatesChan + return updatesCh } // AnswerInlineQuery sends a response to an inline query. diff --git a/types.go b/types.go index b43f4a0..c852f86 100644 --- a/types.go +++ b/types.go @@ -37,6 +37,16 @@ type Update struct { CallbackQuery *CallbackQuery `json:"callback_query"` } +//updatesChannel is the channel for getting updates. +type updatesChannel <-chan Update + +//Clear discards all the actual incoming updates +func (ch updatesChannel) Clear() { + for len(ch) != 0 { + <-ch + } +} + // User is a user on Telegram. type User struct { ID int `json:"id"`