From 7b7b1d381c6cd602388c73202b08cedcbabcccbf Mon Sep 17 00:00:00 2001 From: Bruce Marriner Date: Tue, 3 Nov 2015 11:25:22 -0600 Subject: [PATCH] Added SendMessage function to client.go and example of it to demo.go --- _examples/demo.go | 4 ++++ client.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/_examples/demo.go b/_examples/demo.go index c3924fd..0d8a5d0 100644 --- a/_examples/demo.go +++ b/_examples/demo.go @@ -65,6 +65,10 @@ func main() { messages, err := discord.Messages(&session, channels[0].Id, 2, 0, 0) fmt.Println(messages) + // Use SendMessage to send a message to the given channel. + responce, err := discord.SendMessage(&session, channels[0].Id, "Testing Discordgo") + fmt.Println(responce) + // Use the Logout function to Logout from the Discord server. discord.Logout(&session) return diff --git a/client.go b/client.go index d2637fc..46ebcd3 100644 --- a/client.go +++ b/client.go @@ -185,6 +185,50 @@ func Messages(session *Session, channelId int, limit int, afterId int, beforeId return } +// SendMessage sends a message to the given channel. +func SendMessage(session *Session, channelId int, message string) (response Message, err error) { + + var urlStr string = fmt.Sprintf("%s/channels/%d/messages", discordApi, channelId) + + req, err := http.NewRequest("POST", urlStr, bytes.NewBuffer([]byte(fmt.Sprintf(`{"content":"%s"}`, message)))) + if err != nil { + return + } + + req.Header.Set("authorization", session.Token) + req.Header.Set("Content-Type", "application/json") + + client := &http.Client{Timeout: (20 * time.Second)} + resp, err := client.Do(req) + if err != nil { + return + } + + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + return + } + resp.Body.Close() + + if resp.StatusCode != 200 { + err = errors.New(fmt.Sprintf("StatusCode: %d, %s", resp.StatusCode, string(body))) + return + } + + if session.Debug { + var prettyJSON bytes.Buffer + error := json.Indent(&prettyJSON, body, "", "\t") + if error != nil { + fmt.Print("JSON parse error: ", error) + return + } + fmt.Println(urlStr+" Response:\n", string(prettyJSON.Bytes())) + } + + err = json.Unmarshal(body, &response) + return +} + // Close ends a session and logs out from the Discord REST API. func Logout(session *Session) (err error) { req, err := http.NewRequest("POST", fmt.Sprintf("%s/%s", discordApi, fmt.Sprintf("auth/logout")), bytes.NewBuffer([]byte(fmt.Sprintf(``))))