|
@@ -13,6 +13,7 @@ package discordgo
|
|
|
import (
|
|
|
"bytes"
|
|
|
"encoding/json"
|
|
|
+ "errors"
|
|
|
"fmt"
|
|
|
"image"
|
|
|
_ "image/jpeg" // For JPEG decoding
|
|
@@ -24,6 +25,8 @@ import (
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
+var ErrJSONUnmarshal = errors.New("json unmarshal")
|
|
|
+
|
|
|
// Request makes a (GET/POST/...) Requests to Discord REST API.
|
|
|
// All the other Discord REST Calls in this file use this function.
|
|
|
func (s *Session) Request(method, urlStr string, data interface{}) (response []byte, err error) {
|
|
@@ -112,6 +115,15 @@ func (s *Session) Request(method, urlStr string, data interface{}) (response []b
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+func (s *Session) Unmarshal(data []byte, v interface{}) error {
|
|
|
+ err := json.Unmarshal(data, v)
|
|
|
+ if err != nil {
|
|
|
+ return ErrJSONUnmarshal
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
// Functions specific to Discord Sessions
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
@@ -133,7 +145,7 @@ func (s *Session) Login(email string, password string) (token string, err error)
|
|
|
Token string `json:"token"`
|
|
|
}{}
|
|
|
|
|
|
- err = json.Unmarshal(response, &temp)
|
|
|
+ err = s.Unmarshal(response, &temp)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
@@ -160,7 +172,7 @@ func (s *Session) Register(username string) (token string, err error) {
|
|
|
Token string `json:"token"`
|
|
|
}{}
|
|
|
|
|
|
- err = json.Unmarshal(response, &temp)
|
|
|
+ err = s.Unmarshal(response, &temp)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
@@ -202,7 +214,7 @@ func (s *Session) User(userID string) (st *User, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -245,7 +257,7 @@ func (s *Session) UserUpdate(email, password, username, avatar, newPassword stri
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -257,7 +269,7 @@ func (s *Session) UserSettings() (st *Settings, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -270,7 +282,7 @@ func (s *Session) UserChannels() (st []*Channel, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -287,7 +299,7 @@ func (s *Session) UserChannelCreate(recipientID string) (st *Channel, err error)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -299,7 +311,7 @@ func (s *Session) UserGuilds() (st []*Guild, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -316,7 +328,7 @@ func (s *Session) Guild(guildID string) (st *Guild, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -333,7 +345,7 @@ func (s *Session) GuildCreate(name string) (st *Guild, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -351,7 +363,7 @@ func (s *Session) GuildEdit(guildID, name string) (st *Guild, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -364,7 +376,7 @@ func (s *Session) GuildDelete(guildID string) (st *Guild, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -378,7 +390,7 @@ func (s *Session) GuildBans(guildID string) (st []*User, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
|
|
|
return
|
|
|
}
|
|
@@ -427,7 +439,7 @@ func (s *Session) GuildChannels(guildID string) (st []*Channel, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
|
|
|
return
|
|
|
}
|
|
@@ -448,7 +460,7 @@ func (s *Session) GuildChannelCreate(guildID, name, ctype string) (st *Channel,
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -460,7 +472,7 @@ func (s *Session) GuildInvites(guildID string) (st []*Invite, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -482,7 +494,7 @@ func (s *Session) GuildInviteCreate(guildID string, i *Invite) (st *Invite, err
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -494,7 +506,7 @@ func (s *Session) GuildRoles(guildID string) (st []*Role, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
|
|
|
return // TODO return pointer
|
|
|
}
|
|
@@ -507,7 +519,7 @@ func (s *Session) GuildRoleCreate(guildID string) (st *Role, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
|
|
|
return
|
|
|
}
|
|
@@ -527,7 +539,7 @@ func (s *Session) GuildRoleEdit(guildID, roleID, name string, color int, hoist b
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
|
|
|
return
|
|
|
}
|
|
@@ -540,7 +552,7 @@ func (s *Session) GuildRoleReorder(guildID string, roles []Role) (st []*Role, er
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
|
|
|
return
|
|
|
}
|
|
@@ -565,7 +577,7 @@ func (s *Session) Channel(channelID string) (st *Channel, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -583,7 +595,7 @@ func (s *Session) ChannelEdit(channelID, name string) (st *Channel, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -596,7 +608,7 @@ func (s *Session) ChannelDelete(channelID string) (st *Channel, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -638,7 +650,7 @@ func (s *Session) ChannelMessages(channelID string, limit int, beforeID int, aft
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -669,7 +681,7 @@ func (s *Session) ChannelMessageSend(channelID string, content string) (st *Mess
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(response, &st)
|
|
|
+ err = s.Unmarshal(response, &st)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -688,7 +700,7 @@ func (s *Session) ChannelMessageEdit(channelID, messageID, content string) (st *
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(response, &st)
|
|
|
+ err = s.Unmarshal(response, &st)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -708,7 +720,7 @@ func (s *Session) ChannelInvites(channelID string) (st []*Invite, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -730,7 +742,7 @@ func (s *Session) ChannelInviteCreate(channelID string, i Invite) (st *Invite, e
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -771,7 +783,7 @@ func (s *Session) Invite(inviteID string) (st *Invite, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -784,7 +796,7 @@ func (s *Session) InviteDelete(inviteID string) (st *Invite, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -797,7 +809,7 @@ func (s *Session) InviteAccept(inviteID string) (st *Invite, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -813,7 +825,7 @@ func (s *Session) VoiceRegions() (st []*VoiceRegion, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -825,7 +837,7 @@ func (s *Session) VoiceICE() (st *VoiceICE, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- err = json.Unmarshal(body, &st)
|
|
|
+ err = s.Unmarshal(body, &st)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -845,7 +857,7 @@ func (s *Session) Gateway() (gateway string, err error) {
|
|
|
URL string `json:"url"`
|
|
|
}{}
|
|
|
|
|
|
- err = json.Unmarshal(response, &temp)
|
|
|
+ err = s.Unmarshal(response, &temp)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|