|
@@ -45,11 +45,13 @@ func (s *Session) Request(method, urlStr string, data interface{}) (response []b
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- return s.request(method, urlStr, "application/json", body)
|
|
|
+ return s.request(method, urlStr, "application/json", body, 0)
|
|
|
}
|
|
|
|
|
|
|
|
|
-func (s *Session) request(method, urlStr, contentType string, b []byte) (response []byte, err error) {
|
|
|
+
|
|
|
+
|
|
|
+func (s *Session) request(method, urlStr, contentType string, b []byte, sequence int) (response []byte, err error) {
|
|
|
|
|
|
|
|
|
|
|
@@ -135,6 +137,16 @@ func (s *Session) request(method, urlStr, contentType string, b []byte) (respons
|
|
|
|
|
|
|
|
|
|
|
|
+ case http.StatusBadGateway:
|
|
|
+
|
|
|
+ if sequence < s.MaxRestRetries {
|
|
|
+
|
|
|
+ s.log(LogInformational, "%s Failed (%s), Retrying...", urlStr, resp.Status)
|
|
|
+ response, err = s.request(method, urlStr, contentType, b, sequence+1)
|
|
|
+ } else {
|
|
|
+ err = fmt.Errorf("Exceeded Max retries HTTP %s, %s", resp.Status, response)
|
|
|
+ }
|
|
|
+
|
|
|
case 429:
|
|
|
|
|
|
mu.Lock()
|
|
@@ -151,10 +163,10 @@ func (s *Session) request(method, urlStr, contentType string, b []byte) (respons
|
|
|
|
|
|
time.Sleep(rl.RetryAfter * time.Millisecond)
|
|
|
|
|
|
-
|
|
|
+
|
|
|
|
|
|
mu.Unlock()
|
|
|
- response, err = s.request(method, urlStr, contentType, b)
|
|
|
+ response, err = s.request(method, urlStr, contentType, b, sequence)
|
|
|
|
|
|
default:
|
|
|
err = fmt.Errorf("HTTP %s, %s", resp.Status, response)
|
|
@@ -718,7 +730,7 @@ func (s *Session) GuildMemberNickname(guildID, userID, nickname string) (err err
|
|
|
|
|
|
func (s *Session) GuildChannels(guildID string) (st []*Channel, err error) {
|
|
|
|
|
|
- body, err := s.request("GET", EndpointGuildChannels(guildID), "", nil)
|
|
|
+ body, err := s.request("GET", EndpointGuildChannels(guildID), "", nil, 0)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
@@ -1096,7 +1108,7 @@ func (s *Session) ChannelMessage(channelID, messageID string) (st *Message, err
|
|
|
|
|
|
func (s *Session) ChannelMessageAck(channelID, messageID string) (err error) {
|
|
|
|
|
|
- _, err = s.request("POST", EndpointChannelMessageAck(channelID, messageID), "", nil)
|
|
|
+ _, err = s.request("POST", EndpointChannelMessageAck(channelID, messageID), "", nil, 0)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -1264,7 +1276,7 @@ func (s *Session) ChannelFileSendWithMessage(channelID, content string, name str
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- response, err := s.request("POST", EndpointChannelMessages(channelID), bodywriter.FormDataContentType(), body.Bytes())
|
|
|
+ response, err := s.request("POST", EndpointChannelMessages(channelID), bodywriter.FormDataContentType(), body.Bytes(), 0)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|