55import requests
66from webhook_exceptions import *
77
8-
98logger = logging .getLogger (__name__ )
109
1110
@@ -159,7 +158,7 @@ def execute(self, remove_embeds=False, remove_files=False):
159158 if response .status_code in [200 , 204 ]:
160159 logger .debug (
161160 "[{index}/{length}] Webhook executed" .format (
162- index = i + 1 , length = urls_len
161+ index = i + 1 , length = urls_len
163162 )
164163 )
165164 elif response .status_code == 429 and self .rate_limit_retry :
@@ -185,7 +184,7 @@ def execute(self, remove_embeds=False, remove_files=False):
185184 else :
186185 logger .error (
187186 "[{index}/{length}] Webhook status code {status_code}: {content}" .format (
188- index = i + 1 ,
187+ index = i + 1 ,
189188 length = urls_len ,
190189 status_code = response .status_code ,
191190 content = response .content .decode ("utf-8" ),
@@ -208,20 +207,41 @@ def edit(self, sent_webhook):
208207 webhook_len = len (sent_webhook )
209208 responses = []
210209 for i , webhook in enumerate (sent_webhook ):
211- url = webhook .url .split ('?' )[0 ] # removes any query params
212210 previous_sent_message_id = json .loads (webhook .content .decode ('utf-8' ))['id' ]
211+ url = webhook .url .split ('?' )[0 ] + '/messages/' + str (previous_sent_message_id ) # removes any query params
213212 if bool (self .files ) is False :
214- response = requests . patch ( url + '/messages/' + str ( previous_sent_message_id ), json = self .json , proxies = self .proxies , params = {'wait' : True }, timeout = self .timeout )
213+ patch_kwargs = { 'json' : self .json , ' proxies' : self .proxies , ' params' : {'wait' : True }, ' timeout' : self .timeout }
215214 else :
216215 self .files ["payload_json" ] = (None , json .dumps (self .json ))
217- response = requests .patch (url + '/messages/' + str (previous_sent_message_id ), files = self .files , proxies = self .proxies , timeout = self .timeout )
216+ patch_kwargs = {'files' : self .files , 'proxies' : self .proxies , 'timeout' : self .timeout }
217+ response = requests .patch (url , ** patch_kwargs )
218218 if response .status_code in [200 , 204 ]:
219219 logger .debug (
220220 "[{index}/{length}] Webhook edited" .format (
221221 index = i + 1 ,
222222 length = webhook_len ,
223223 )
224224 )
225+ elif response .status_code == 429 and self .rate_limit_retry :
226+ while response .status_code == 429 :
227+ errors = json .loads (response .content .decode ('utf-8' ))
228+ wh_sleep = (int (errors ['retry_after' ]) / 1000 ) + 0.15
229+ time .sleep (wh_sleep )
230+ logger .error (
231+ "Webhook rate limited: sleeping for {wh_sleep} "
232+ "seconds..." .format (
233+ wh_sleep = wh_sleep
234+ )
235+ )
236+ response = requests .patch (url , ** patch_kwargs )
237+ if response .status_code in [200 , 204 ]:
238+ logger .debug (
239+ "[{index}/{length}] Webhook edited" .format (
240+ index = i + 1 ,
241+ length = webhook_len ,
242+ )
243+ )
244+ break
225245 else :
226246 logger .error (
227247 "[{index}/{length}] Webhook status code {status_code}: {content}" .format (
@@ -246,7 +266,8 @@ def delete(self, sent_webhook):
246266 for i , webhook in enumerate (sent_webhook ):
247267 url = webhook .url .split ('?' )[0 ] # removes any query params
248268 previous_sent_message_id = json .loads (webhook .content .decode ('utf-8' ))['id' ]
249- response = requests .delete (url + '/messages/' + str (previous_sent_message_id ), proxies = self .proxies , timeout = self .timeout )
269+ response = requests .delete (url + '/messages/' + str (previous_sent_message_id ), proxies = self .proxies ,
270+ timeout = self .timeout )
250271 if response .status_code in [200 , 204 ]:
251272 logger .debug (
252273 "[{index}/{length}] Webhook deleted" .format (
0 commit comments