@@ -30,23 +30,25 @@ class DiscordEmbed:
3030 fields : List [Dict [str , Optional [Any ]]]
3131
3232 def __init__ (
33- self ,
34- title : Optional [str ] = None ,
35- description : Optional [str ] = None ,
36- ** kwargs : Any ,
33+ self ,
34+ title : Optional [str ] = None ,
35+ description : Optional [str ] = None ,
36+ ** kwargs : Any ,
3737 ) -> None :
3838 """
3939 Init Discord Embed
4040 -----------
4141 :keyword ``title:`` title of embed\n
4242 :keyword ``description:`` description body of embed\n
43- :keyword ``url:`` add an url to make your embedded title a clickable link\n
43+ :keyword ``url:`` add an url to make your embedded title a clickable
44+ link\n
4445 :keyword ``timestamp:`` timestamp of embed content\n
4546 :keyword ``color:`` color code of the embed as int\n
4647 :keyword ``footer:`` footer texts\n
4748 :keyword ``image:`` your image url here\n
4849 :keyword ``thumbnail:`` your thumbnail url here\n
49- :keyword ``video:`` to apply video with embedded, your video source url here\n
50+ :keyword ``video:`` to apply video with embedded, your video source
51+ url here\n
5052 :keyword ``provider:`` provider information\n
5153 :keyword ``author:`` author information\n
5254 :keyword ``fields:`` fields information
@@ -107,7 +109,8 @@ def set_footer(self, **kwargs: str) -> None:
107109 """
108110 set footer information of embed
109111 :keyword text: footer text
110- :keyword icon_url: url of footer icon (only supports http(s) and attachments)
112+ :keyword icon_url: url of footer icon (only supports http(s) and
113+ attachments)
111114 :keyword proxy_icon_url: a proxied url of footer icon
112115 """
113116 self .footer = {
@@ -134,7 +137,8 @@ def set_image(self, url: str, **kwargs: Union[str, int]) -> None:
134137 def set_thumbnail (self , url : str , ** kwargs : Union [str , int ]) -> None :
135138 """
136139 set thumbnail of embed
137- :param url: source url of thumbnail (only supports http(s) and attachments)
140+ :param url: source url of thumbnail (only supports http(s) and
141+ attachments)
138142 :keyword proxy_url: a proxied thumbnail of the image
139143 :keyword height: height of thumbnail
140144 :keyword width: width of thumbnail
@@ -175,7 +179,8 @@ def set_author(self, name: str, **kwargs: str) -> None:
175179 set author of embed
176180 :param name: name of author
177181 :keyword url: url of author
178- :keyword icon_url: url of author icon (only supports http(s) and attachments)
182+ :keyword icon_url: url of author icon (only supports http(s) and
183+ attachments)
179184 :keyword proxy_icon_url: a proxied url of author icon
180185 """
181186 self .author = {
@@ -234,19 +239,20 @@ class DiscordWebhook:
234239 rate_limit_retry : bool = False
235240
236241 def __init__ (
237- self ,
238- url : Optional [Union [str , List [str ]]] = None ,
239- * ,
240- content : Optional [str ] = None ,
241- username : Optional [str ] = None ,
242- avatar_url : Optional [str ] = None ,
243- tts : bool = False ,
244- files : Optional [Dict [str , Tuple [Optional [str ], Union [bytes , str ]]]] = None ,
245- embeds : Optional [List [Dict [str , Any ]]] = None ,
246- proxies : Optional [Dict [str , str ]] = None ,
247- timeout : Optional [float ] = None ,
248- rate_limit_retry : bool = False ,
249- allowed_mentions : Optional [List [str ]] = None ,
242+ self ,
243+ url : Optional [Union [str , List [str ]]] = None ,
244+ * ,
245+ content : Optional [str ] = None ,
246+ username : Optional [str ] = None ,
247+ avatar_url : Optional [str ] = None ,
248+ tts : bool = False ,
249+ files : Optional [
250+ Dict [str , Tuple [Optional [str ], Union [bytes , str ]]]] = None ,
251+ embeds : Optional [List [Dict [str , Any ]]] = None ,
252+ proxies : Optional [Dict [str , str ]] = None ,
253+ timeout : Optional [float ] = None ,
254+ rate_limit_retry : bool = False ,
255+ allowed_mentions : Optional [List [str ]] = None ,
250256 ) -> None :
251257 """
252258 Init Webhook for Discord
@@ -257,12 +263,15 @@ def __init__(
257263 :keyword ``avatar_url:`` override the default avatar of the webhook\n
258264 :keyword ``tts:`` true if this is a TTS message\n
259265 :keyword ``file``: to apply file(s) with message
260- (For example: file=f.read() (here, f = variable that contain attachement path as "rb" mode))\n
261- :keyword ``filename:`` apply custom file name on attached file content(s)\n
266+ (For example: file=f.read() (here, f = variable that contain
267+ attachement path as "rb" mode))\n
268+ :keyword ``filename:`` apply custom file name on attached file
269+ content(s)\n
262270 :keyword ``embeds:`` list of embedded rich content\n
263271 :keyword ``allowed_mentions:`` allowed mentions for the message\n
264272 :keyword ``proxies:`` dict of proxies\n
265- :keyword ``timeout:`` (optional) amount of seconds to wait for a response from Discord
273+ :keyword ``timeout:`` (optional) amount of seconds to wait for a
274+ response from Discord
266275 """
267276 if embeds is None :
268277 embeds = []
@@ -296,7 +305,8 @@ def add_embed(self, embed: Union[DiscordEmbed, Dict[str, Any]]) -> None:
296305 adds an embedded rich content
297306 :param embed: embed object or dict
298307 """
299- self .embeds .append (embed .__dict__ if isinstance (embed , DiscordEmbed ) else embed )
308+ self .embeds .append (
309+ embed .__dict__ if isinstance (embed , DiscordEmbed ) else embed )
300310
301311 def remove_embed (self , index : int ) -> None :
302312 """
@@ -390,14 +400,16 @@ def api_post_request(self, url: str) -> requests.Response:
390400 return response
391401
392402 def execute (
393- self ,
394- remove_embeds : bool = False ,
395- remove_files : bool = False ,
403+ self ,
404+ remove_embeds : bool = False ,
405+ remove_files : bool = False ,
396406 ) -> Union [List [requests .Response ], requests .Response ]:
397407 """
398408 executes the Webhook
399- :param remove_embeds: if set to True, calls `self.remove_embeds()` to empty `self.embeds` after webhook is executed
400- :param remove_files: if set to True, calls `self.remove_files()` to empty `self.files` after webhook is executed
409+ :param remove_embeds: if set to True, calls `self.remove_embeds()`
410+ to empty `self.embeds` after webhook is executed
411+ :param remove_files: if set to True, calls `self.remove_files()`
412+ to empty `self.files` after webhook is executed
401413 :return: Webhook response
402414 """
403415 webhook_urls = self .url
@@ -408,22 +420,25 @@ def execute(
408420 for i , url in enumerate (webhook_urls ):
409421 response = self .api_post_request (url )
410422 if response .status_code in [200 , 204 ]:
411- logger .debug (f"[{ i + 1 } /{ urls_len } ] Webhook executed" )
423+ logger .debug (f"[{ i + 1 } /{ urls_len } ] Webhook executed" )
412424 elif response .status_code == 429 and self .rate_limit_retry :
413425 while response .status_code == 429 :
414426 errors = json .loads (response .content .decode ("utf-8" ))
415427 wh_sleep = (int (errors ["retry_after" ]) / 1000 ) + 0.15
416428 time .sleep (wh_sleep )
417429 logger .error (
418- f"Webhook rate limited: sleeping for { wh_sleep } " "seconds..."
430+ f"Webhook rate limited: sleeping for { wh_sleep } "
431+ "seconds..."
419432 )
420433 response = self .api_post_request (url )
421434 if response .status_code in [200 , 204 ]:
422- logger .debug (f"[{ i + 1 } /{ urls_len } ] Webhook executed" )
435+ logger .debug (f"[{ i + 1 } /{ urls_len } ] Webhook executed" )
423436 break
424437 else :
425438 logger .error (
426- f"[{ i + 1 } /{ urls_len } ] Webhook status code { response .status_code } : { response .content .decode ('utf-8' )} "
439+ f"[{ i + 1 } /{ urls_len } ] Webhook status code "
440+ f"{ response .status_code } : "
441+ f"{ response .content .decode ('utf-8' )} "
427442 )
428443 responses .append (response )
429444 if remove_embeds :
@@ -433,8 +448,8 @@ def execute(
433448 return responses [0 ] if len (responses ) == 1 else responses
434449
435450 def edit (
436- self ,
437- sent_webhook : Union [List [requests .Response ], requests .Response ],
451+ self ,
452+ sent_webhook : Union [List [requests .Response ], requests .Response ],
438453 ) -> Union [List [requests .Response ], requests .Response ]:
439454 """
440455 edits the webhook passed as a response
@@ -446,9 +461,12 @@ def edit(
446461 responses : List [requests .Response ] = []
447462 for i , webhook in enumerate (sent_webhook ):
448463 assert isinstance (webhook .content , bytes )
449- previous_sent_message_id = json .loads (webhook .content .decode ("utf-8" ))["id" ]
464+ previous_sent_message_id = json .loads (
465+ webhook .content .decode ("utf-8" )
466+ )["id" ]
450467 url = (
451- webhook .url .split ("?" )[0 ] + "/messages/" + str (previous_sent_message_id )
468+ webhook .url .split ("?" )[0 ] + "/messages/" + str (
469+ previous_sent_message_id )
452470 )
453471 # removes any query params
454472 if bool (self .files ) is False :
@@ -471,28 +489,32 @@ def edit(
471489 )
472490 response = request ()
473491 if response .status_code in [200 , 204 ]:
474- logger .debug (f"[{ i + 1 } /{ len (sent_webhook )} ] Webhook edited" )
492+ logger .debug (f"[{ i + 1 } /{ len (sent_webhook )} ] Webhook edited" )
475493 elif response .status_code == 429 and self .rate_limit_retry :
476494 while response .status_code == 429 :
477495 errors = json .loads (response .content .decode ("utf-8" ))
478496 wh_sleep = (int (errors ["retry_after" ]) / 1000 ) + 0.15
479497 time .sleep (wh_sleep )
480498 logger .error (
481- f"Webhook rate limited: sleeping for { wh_sleep } seconds..."
499+ f"Webhook rate limited: sleeping for { wh_sleep } "
500+ f"seconds..."
482501 )
483502 response = request ()
484503 if response .status_code in [200 , 204 ]:
485- logger .debug (f"[{ i + 1 } /{ len (sent_webhook )} ] Webhook edited" )
504+ logger .debug (
505+ f"[{ i + 1 } /{ len (sent_webhook )} ] Webhook edited" )
486506 break
487507 else :
488508 logger .error (
489- f"[{ i + 1 } /{ len (sent_webhook )} ] Webhook status code { response .status_code } : { response .content .decode ('utf-8' )} "
509+ f"[{ i + 1 } /{ len (sent_webhook )} ] Webhook status code "
510+ f"{ response .status_code } : "
511+ f"{ response .content .decode ('utf-8' )} "
490512 )
491513 responses .append (response )
492514 return responses [0 ] if len (responses ) == 1 else responses
493515
494516 def delete (
495- self , sent_webhook : Union [List ["DiscordWebhook" ], "DiscordWebhook" ]
517+ self , sent_webhook : Union [List ["DiscordWebhook" ], "DiscordWebhook" ]
496518 ) -> Union [List [requests .Response ], requests .Response ]:
497519 """
498520 deletes the webhook passed as a response
@@ -505,17 +527,20 @@ def delete(
505527 for i , webhook in enumerate (sent_webhook ):
506528 assert isinstance (webhook .content , bytes )
507529 url = webhook .url .split ("?" )[0 ] # removes any query params
508- previous_sent_message_id = json .loads (webhook .content .decode ("utf-8" ))["id" ]
530+ previous_sent_message_id = json .loads (
531+ webhook .content .decode ("utf-8" )
532+ )["id" ]
509533 response = requests .delete (
510534 url + "/messages/" + str (previous_sent_message_id ),
511535 proxies = self .proxies ,
512536 timeout = self .timeout ,
513537 )
514538 if response .status_code in [200 , 204 ]:
515- logger .debug (f"[{ i + 1 } /{ len (sent_webhook )} ] Webhook deleted" )
539+ logger .debug (f"[{ i + 1 } /{ len (sent_webhook )} ] Webhook deleted" )
516540 else :
517541 logger .error (
518- f"[{ i + 1 } /{ len (sent_webhook )} ] Webhook status code { response .status_code } : { response .content .decode ('utf-8' )} "
542+ f"[{ i + 1 } /{ len (sent_webhook )} ] Webhook status code "
543+ f"{ response .status_code } : { response .content .decode ('utf-8' )} "
519544 )
520545 responses .append (response )
521546 return responses [0 ] if len (responses ) == 1 else responses
0 commit comments