diff options
| author | Rapptz <[email protected]> | 2015-12-12 11:14:32 -0500 |
|---|---|---|
| committer | Rapptz <[email protected]> | 2015-12-12 11:14:32 -0500 |
| commit | 2a3610de2ff160154226e306c12953da48528221 (patch) | |
| tree | dfcd73ee72b0f6bd1c8c6520b29dc297384a7532 | |
| parent | Websocket now uses the event loop passed in. (diff) | |
| download | discord.py-2a3610de2ff160154226e306c12953da48528221.tar.xz discord.py-2a3610de2ff160154226e306c12953da48528221.zip | |
Implement fix for future rate limiting change in discord.
| -rw-r--r-- | discord/client.py | 20 |
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 |