From 2a5cf8652db7672f33d91dbb9b0906768b72b843 Mon Sep 17 00:00:00 2001 From: Gleb Sinyavsky Date: Sat, 21 Nov 2015 17:26:28 +0300 Subject: [PATCH] Updates channel removed from BotAPI --- bot.go | 17 ++++++++--------- bot_test.go | 12 ++++++------ types.go | 6 +++++- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/bot.go b/bot.go index 157f966..ef449dc 100644 --- a/bot.go +++ b/bot.go @@ -22,7 +22,6 @@ type BotAPI struct { Token string `json:"token"` Debug bool `json:"debug"` Self User `json:"-"` - Updates chan Update `json:"-"` Client *http.Client `json:"-"` } @@ -395,8 +394,8 @@ func (bot *BotAPI) SetWebhook(config WebhookConfig) (APIResponse, error) { } // UpdatesChan starts a channel for getting updates. -func (bot *BotAPI) UpdatesChan(config UpdateConfig) error { - bot.Updates = make(chan Update, 100) +func (bot *BotAPI) UpdatesChan(config UpdateConfig) (<-chan Update, error) { + updatesChan := make(chan Update, 100) go func() { for { @@ -412,18 +411,18 @@ func (bot *BotAPI) UpdatesChan(config UpdateConfig) error { for _, update := range updates { if update.UpdateID >= config.Offset { config.Offset = update.UpdateID + 1 - bot.Updates <- update + updatesChan <- update } } } }() - return nil + return updatesChan, nil } // ListenForWebhook registers a http handler for a webhook. -func (bot *BotAPI) ListenForWebhook(pattern string) http.Handler { - bot.Updates = make(chan Update, 100) +func (bot *BotAPI) ListenForWebhook(pattern string) (<-chan Update, http.Handler) { + updatesChan := make(chan Update, 100) handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { bytes, _ := ioutil.ReadAll(r.Body) @@ -431,10 +430,10 @@ func (bot *BotAPI) ListenForWebhook(pattern string) http.Handler { var update Update json.Unmarshal(bytes, &update) - bot.Updates <- update + updatesChan <- update }) http.HandleFunc(pattern, handler) - return handler + return updatesChan, handler } diff --git a/bot_test.go b/bot_test.go index 16354cf..c9ab0ca 100644 --- a/bot_test.go +++ b/bot_test.go @@ -352,7 +352,7 @@ func TestGetUserProfilePhotos(t *testing.T) { func TestListenForWebhook(t *testing.T) { bot, _ := getBot(t) - handler := bot.ListenForWebhook("/") + _, handler := bot.ListenForWebhook("/") req, _ := http.NewRequest("GET", "", strings.NewReader("{}")) w := httptest.NewRecorder() @@ -396,7 +396,7 @@ func TestUpdatesChan(t *testing.T) { var ucfg tgbotapi.UpdateConfig = tgbotapi.NewUpdate(0) ucfg.Timeout = 60 - err := bot.UpdatesChan(ucfg) + _, err := bot.UpdatesChan(ucfg) if err != nil { t.Fail() @@ -416,9 +416,9 @@ func ExampleNewBotAPI() { u := tgbotapi.NewUpdate(0) u.Timeout = 60 - err = bot.UpdatesChan(u) + updates, err := bot.UpdatesChan(u) - for update := range bot.Updates { + for update := range updates { log.Printf("[%s] %s", update.Message.From.UserName, update.Message.Text) msg := tgbotapi.NewMessage(update.Message.Chat.ID, update.Message.Text) @@ -443,10 +443,10 @@ func ExampleNewWebhook() { log.Fatal(err) } - bot.ListenForWebhook("/" + bot.Token) + updates, _ := bot.ListenForWebhook("/" + bot.Token) go http.ListenAndServeTLS("0.0.0.0:8443", "cert.pem", "key.pem", nil) - for update := range bot.Updates { + for update := range updates { log.Printf("%+v\n", update) } } diff --git a/types.go b/types.go index d08a4c1..40bb93a 100644 --- a/types.go +++ b/types.go @@ -4,6 +4,7 @@ import ( "encoding/json" "fmt" "time" + "strings" ) // APIResponse is a response from the Telegram API with the result stored raw. @@ -112,11 +113,14 @@ func (m *Message) IsGroup() bool { return m.From.ID != m.Chat.ID } -// IsGroup returns if the message was sent to a group. func (m *Message) IsCommand() bool { return m.Text != "" && m.Text[0] == '/' } +func (m *Message) Command() string { + return strings.Split(m.Text, " ")[0] +} + // PhotoSize contains information about photos, including ID and Width and Height. type PhotoSize struct { FileID string `json:"file_id"`