Updates channel removed from BotAPI

bot-api-6.1
Gleb Sinyavsky 2015-11-21 17:26:28 +03:00
parent 6da34a6ba5
commit 2a5cf8652d
3 changed files with 19 additions and 16 deletions

17
bot.go
View File

@ -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
}

View File

@ -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)
}
}

View File

@ -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"`