This commit is contained in:
parent
0a5055904c
commit
ac06a113ce
1 changed files with 51 additions and 7 deletions
58
restapi.go
58
restapi.go
|
@ -25,7 +25,8 @@ import (
|
|||
func (s *Session) Request(method, urlStr string, data interface{}) (response []byte, err error) {
|
||||
|
||||
if s.Debug {
|
||||
// fmt.Println("REQUEST :: " + method + " " + urlStr + "\n" + string(body))
|
||||
fmt.Printf("API REQUEST %8s :: %s\n", method, urlStr)
|
||||
fmt.Println("API REQUEST PAYLOAD :: [" + fmt.Sprintf("%+v", data) + "]")
|
||||
}
|
||||
|
||||
body, err := json.Marshal(data)
|
||||
|
@ -46,7 +47,14 @@ func (s *Session) Request(method, urlStr string, data interface{}) (response []b
|
|||
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
// TODO: Make a configurable static variable.
|
||||
req.Header.Set("User-Agent", fmt.Sprintf("DiscordBot (https://github.com/bwmarrin/discordgo, v%s", VERSION))
|
||||
req.Header.Set("User-Agent", fmt.Sprintf("DiscordBot (https://github.com/bwmarrin/discordgo, v%s)", VERSION))
|
||||
|
||||
if s.Debug {
|
||||
for k, v := range req.Header {
|
||||
fmt.Printf("API REQUEST HEADER :: [%s] = %+v\n", k, v)
|
||||
}
|
||||
}
|
||||
|
||||
client := &http.Client{Timeout: (20 * time.Second)}
|
||||
|
||||
resp, err := client.Do(req)
|
||||
|
@ -60,15 +68,29 @@ func (s *Session) Request(method, urlStr string, data interface{}) (response []b
|
|||
}
|
||||
resp.Body.Close()
|
||||
|
||||
if s.Debug {
|
||||
|
||||
fmt.Printf("API RESPONSE STATUS :: %s\n", resp.Status)
|
||||
for k, v := range resp.Header {
|
||||
fmt.Printf("API RESPONSE HEADER :: [%s] = %+v\n", k, v)
|
||||
}
|
||||
fmt.Printf("API RESPONSE BODY :: [%s]\n", response)
|
||||
}
|
||||
|
||||
// See http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
|
||||
switch resp.StatusCode {
|
||||
|
||||
case 200: // OK
|
||||
case 204: // No Content
|
||||
|
||||
// TODO check for 401 response, invalidate token if we get one.
|
||||
if resp.StatusCode != 204 && resp.StatusCode != 200 {
|
||||
err = fmt.Errorf("StatusCode: %d, %s", resp.StatusCode, string(response))
|
||||
// TODO check for 429 response, rate-limit when we get one.
|
||||
|
||||
default: // Error condition
|
||||
err = fmt.Errorf("HTTP %d", resp.StatusCode)
|
||||
return
|
||||
}
|
||||
|
||||
if s.Debug {
|
||||
printJSON(response)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -115,6 +137,28 @@ func (s *Session) User(userID string) (st User, err error) {
|
|||
return
|
||||
}
|
||||
|
||||
// UserUpdate updates a users settings.
|
||||
// userID : A user ID or "@me" which is a shortcut of current user ID
|
||||
func (s *Session) UserUpdate(userID, email, password, username, avatar, newPassword string) (st User, err error) {
|
||||
|
||||
// NOTE: Avatar must be either the hash/id of existing Avatar or
|
||||
// data:image/png;base64,BASE64_STRING_OF_NEW_AVATAR_PNG
|
||||
// to set a new avatar.
|
||||
// If left blank, avatar will be set to null/blank
|
||||
|
||||
data = struct {
|
||||
Email string `json:"email"`
|
||||
Password string `json:"password"`
|
||||
Username string `json:"username"`
|
||||
Avatar string `json:"avatar,omitempty"`
|
||||
NewPassword json.Token `json:"new_password,omitempty"`
|
||||
}{email, password, username, avatar, newPassword}
|
||||
|
||||
body, err := s.Request("PATCH", USER(userID), data)
|
||||
err = json.Unmarshal(body, &st)
|
||||
return
|
||||
}
|
||||
|
||||
// UserAvatar returns a ?? of a users Avatar
|
||||
// userID : A user ID or "@me" which is a shortcut of current user ID
|
||||
func (s *Session) UserAvatar(userID string) (st User, err error) {
|
||||
|
|
Loading…
Reference in a new issue