aboutsummaryrefslogtreecommitdiff
path: root/discord/http.py
diff options
context:
space:
mode:
authorRapptz <[email protected]>2021-03-24 08:49:12 -0400
committerRapptz <[email protected]>2021-03-24 08:50:34 -0400
commit1c8d1b028950c111fab4c654e27c288264bb82fc (patch)
tree799e93facdf16f8bcb7dd53b18537c703bd96c42 /discord/http.py
parentRemove deprecated uses of about (diff)
downloaddiscord.py-1c8d1b028950c111fab4c654e27c288264bb82fc.tar.xz
discord.py-1c8d1b028950c111fab4c654e27c288264bb82fc.zip
Recreate aiohttp.FormData objects during request retries
Fixes #6531
Diffstat (limited to 'discord/http.py')
-rw-r--r--discord/http.py31
1 files changed, 24 insertions, 7 deletions
diff --git a/discord/http.py b/discord/http.py
index 5a5820bd..1d0b2628 100644
--- a/discord/http.py
+++ b/discord/http.py
@@ -131,7 +131,7 @@ class HTTPClient:
return await self.__session.ws_connect(url, **kwargs)
- async def request(self, route, *, files=None, **kwargs):
+ async def request(self, route, *, files=None, form=None, **kwargs):
bucket = route.bucket
method = route.method
url = route.url
@@ -181,6 +181,13 @@ class HTTPClient:
if files:
for f in files:
f.reset(seek=tries)
+
+ if form:
+ form_data = aiohttp.FormData()
+ for params in form:
+ form_data.add_field(**params)
+ kwargs['data'] = form_data
+
try:
async with self.__session.request(method, url, **kwargs) as r:
log.debug('%s %s with %s has returned %s', method, url, kwargs.get('data'), r.status)
@@ -371,7 +378,7 @@ class HTTPClient:
def send_files(self, channel_id, *, files, content=None, tts=False, embed=None, nonce=None, allowed_mentions=None, message_reference=None):
r = Route('POST', '/channels/{channel_id}/messages', channel_id=channel_id)
- form = aiohttp.FormData()
+ form = []
payload = {'tts': tts}
if content:
@@ -385,15 +392,25 @@ class HTTPClient:
if message_reference:
payload['message_reference'] = message_reference
- form.add_field('payload_json', utils.to_json(payload))
+ form.append({'name': 'payload_json', 'value': utils.to_json(payload)})
if len(files) == 1:
file = files[0]
- form.add_field('file', file.fp, filename=file.filename, content_type='application/octet-stream')
+ form.append({
+ 'name': 'file',
+ 'value': file.fp,
+ 'filename': file.filename,
+ 'content_type': 'application/octet-stream'
+ })
else:
for index, file in enumerate(files):
- form.add_field('file%s' % index, file.fp, filename=file.filename, content_type='application/octet-stream')
-
- return self.request(r, data=form, files=files)
+ form.append({
+ 'name': 'file%s' % index,
+ 'value': file.fp,
+ 'filename': file.filename,
+ 'content_type': 'application/octet-stream'
+ })
+
+ return self.request(r, form=form, files=files)
async def ack_message(self, channel_id, message_id):
r = Route('POST', '/channels/{channel_id}/messages/{message_id}/ack', channel_id=channel_id, message_id=message_id)