aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRapptz <[email protected]>2015-12-12 11:14:32 -0500
committerRapptz <[email protected]>2015-12-12 11:14:32 -0500
commit2a3610de2ff160154226e306c12953da48528221 (patch)
treedfcd73ee72b0f6bd1c8c6520b29dc297384a7532
parentWebsocket now uses the event loop passed in. (diff)
downloaddiscord.py-2a3610de2ff160154226e306c12953da48528221.tar.xz
discord.py-2a3610de2ff160154226e306c12953da48528221.zip
Implement fix for future rate limiting change in discord.
-rw-r--r--discord/client.py20
1 files changed, 16 insertions, 4 deletions
diff --git a/discord/client.py b/discord/client.py
index bc788ea3..9d8f0279 100644
--- a/discord/client.py
+++ b/discord/client.py
@@ -692,6 +692,20 @@ class Client:
self.private_channels.append(PrivateChannel(id=data['id'], user=user))
@asyncio.coroutine
+ def _rate_limit_helper(self, name, method, url, data):
+ resp = yield from self.session.request(method, url, data=data, headers=self.headers)
+ tmp = request_logging_format.format(method=method, response=resp)
+ log_fmt = 'In {}, {}'.format(name, tmp)
+ log.debug(log_fmt)
+ if resp.status == 429:
+ retry = resp.headers['Retry-After'] / 1000.0
+ yield from resp.release()
+ yield from asyncio.sleep(retry)
+ return (yield from self._rate_limit_helper(name, method, data))
+
+ return resp
+
+ @asyncio.coroutine
def send_message(self, destination, content, *, mentions=True, tts=False):
"""|coro|
@@ -758,8 +772,7 @@ class Client:
if tts:
payload['tts'] = True
- resp = yield from self.session.post(url, data=utils.to_json(payload), headers=self.headers)
- log.debug(request_logging_format.format(method='POST', response=resp))
+ resp = yield from self._rate_limit_helper('send_message', 'POST', url, utils.to_json(payload))
yield from utils._verify_successful_response(resp)
data = yield from resp.json()
log.debug(request_success_log.format(response=resp, json=payload, data=data))
@@ -931,7 +944,7 @@ class Client:
'mentions': self._resolve_mentions(content, mentions)
}
- response = yield from self.session.patch(url, headers=self.headers, data=utils.to_json(payload))
+ response = yield from self._rate_limit_helper('edit_message', 'PATCH', url, utils.to_json(payload))
log.debug(request_logging_format.format(method='PATCH', response=response))
yield from utils._verify_successful_response(response)
data = yield from response.json()
@@ -1013,7 +1026,6 @@ class Client:
return generator(result)
-
# Member management
@asyncio.coroutine