Sending messages: basic functionality

pull/3/head
Ilya Kowalewski 9 years ago
parent 25b2575f10
commit 745b4bc76f

@ -4,8 +4,9 @@ import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
"net/url"
"strconv"
)
func api_getMe(token string) (User, error) {
@ -40,9 +41,7 @@ func api_getMe(token string) (User, error) {
}
}
func api_getUpdates(token string,
offset int,
updates chan<- Update) error {
func api_getUpdates(token string, offset int, updates chan<- Update) error {
command := fmt.Sprintf("getUpdates?offset=%d", offset)
request := "https://api.telegram.org/bot" + token + "/" + command
@ -64,9 +63,11 @@ func api_getUpdates(token string,
}
err = json.Unmarshal(updates_json, &updates_recieved)
if err != nil {
return err
}
if !updates_recieved.Ok {
log.Println(FetchError{updates_recieved.Description})
return FetchError{updates_recieved.Description}
}
@ -76,3 +77,40 @@ func api_getUpdates(token string,
return nil
}
func api_sendMessage(token string, recipient User, text string) error {
resource := "https://api.telegram.org/bot" + token + "/sendMessage"
params := url.Values{}
params.Set("chat_id", strconv.FormatInt(int64(recipient.Id), 10))
params.Set("text", text)
request := resource + "?" + params.Encode()
resp, err := http.Get(request)
if err != nil {
return err
}
defer resp.Body.Close()
response_json, err := ioutil.ReadAll(resp.Body)
if err != nil {
return err
}
var response_recieved struct {
Ok bool
Description string
}
err = json.Unmarshal(response_json, &response_recieved)
if err != nil {
return err
}
if !response_recieved.Ok {
return SendError{response_recieved.Description}
}
return nil
}

@ -42,3 +42,7 @@ func (b *Bot) Listen(interval time.Duration) {
func (b *Bot) AddListener(ear Listener) {
b.listeners = append(b.listeners, ear)
}
func (b *Bot) SendMessage(recipient User, message string) {
go api_sendMessage(b.Token, recipient, message)
}

@ -9,6 +9,10 @@ type FetchError struct {
Payload string
}
type SendError struct {
Payload string
}
func (e AuthError) Error() string {
return "AuthError: " + e.Payload
}
@ -16,3 +20,7 @@ func (e AuthError) Error() string {
func (e FetchError) Error() string {
return "FetchError: " + e.Payload
}
func (e SendError) Error() string {
return "SendError: " + e.Payload
}

@ -26,8 +26,10 @@ func TestListen(t *testing.T) {
}
bot.AddListener(func(bot *Bot, message Message) {
log.Printf("Recieved a message \"%s\" from user \"%s\"\n",
message.Text, message.Sender.Username)
if message.Text == "/hi" {
bot.SendMessage(message.Sender,
"Hello, "+message.Sender.FirstName+"!")
}
})
log.Println("Listening...")

@ -5,4 +5,9 @@ type User struct {
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
Username string
// In case of group chat, Title will indicate
// whether it's a chat or user: if Title is empty
// it's a user, otherwise it's not.
Title string
}

Loading…
Cancel
Save