Updates channel removed from BotAPI
Gleb Sinyavsky zhulik.gleb@gmail.com
Sat, 21 Nov 2015 17:26:28 +0300
3 files changed,
19 insertions(+),
16 deletions(-)
M
bot.go
→
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 @@ return apiResp, nil
} // 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 @@
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 @@
var update Update json.Unmarshal(bytes, &update) - bot.Updates <- update + updatesChan <- update }) http.HandleFunc(pattern, handler) - return handler + return updatesChan, handler }
M
bot_test.go
→
bot_test.go
@@ -352,7 +352,7 @@
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 @@ bot, _ := getBot(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 @@
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 @@ if err != nil {
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) } }
M
types.go
→
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,9 +113,12 @@ 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.