all repos — telegram-bot-api @ 2a5cf8652db7672f33d91dbb9b0906768b72b843

Golang bindings for the Telegram Bot API

Updates channel removed from BotAPI
Gleb Sinyavsky zhulik.gleb@gmail.com
Sat, 21 Nov 2015 17:26:28 +0300
commit

2a5cf8652db7672f33d91dbb9b0906768b72b843

parent

6da34a6ba5ef97891fcf581cf9275fe16503a5d8

3 files changed, 19 insertions(+), 16 deletions(-)

jump to
M bot.gobot.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.gobot_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.gotypes.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.