@@ -79,13 +79,16 @@ def __init__(
79
79
@classmethod
80
80
def from_dict (cls , data : dict [str , str | None ]) -> EmbedAuthor :
81
81
self = cls .__new__ (cls )
82
- self .name = data .get ("name" )
82
+ name = data .get ("name" )
83
+ if not name :
84
+ raise ValueError ("name field is required" )
85
+ self .name = name
83
86
self .url = data .get ("url" )
84
87
self .icon_url = data .get ("icon_url" )
85
88
self .proxy_icon_url = data .get ("proxy_icon_url" )
86
89
return self
87
90
88
- def to_dict (self ) -> dict [str , str | None ]:
91
+ def to_dict (self ) -> dict [str , str ]:
89
92
d = {"name" : str (self .name )}
90
93
if self .url :
91
94
d ["url" ] = str (self .url )
@@ -128,7 +131,10 @@ def __init__(
128
131
@classmethod
129
132
def from_dict (cls , data : dict [str , str | None ]) -> EmbedFooter :
130
133
self = cls .__new__ (cls )
131
- self .text = data .get ("text" )
134
+ text = data .get ("text" )
135
+ if not text :
136
+ raise ValueError ("text field is required" )
137
+ self .text = text
132
138
self .icon_url = data .get ("icon_url" )
133
139
self .proxy_icon_url = data .get ("proxy_icon_url" )
134
140
return self
@@ -171,12 +177,12 @@ class EmbedMedia: # Thumbnail, Image, Video
171
177
width : int
172
178
173
179
@classmethod
174
- def from_dict (cls , data : dict [str , str | int | None ]) -> EmbedMedia :
180
+ def from_dict (cls , data : dict [str , str | int ]) -> EmbedMedia :
175
181
self = cls .__new__ (cls )
176
- self .url = data .get ("url" )
177
- self .proxy_url = data .get ("proxy_url" )
178
- self .height = data . get ( "height" )
179
- self .width = data . get ( "width" )
182
+ self .url = str ( data .get ("url" ) )
183
+ self .proxy_url = str ( data .get ("proxy_url" ) )
184
+ self .height = int ( data [ "height" ] )
185
+ self .width = int ( data [ "width" ] )
180
186
return self
181
187
182
188
def __repr__ (self ) -> str :
@@ -231,7 +237,7 @@ def __init__(self, name: str, value: str, inline: bool | None = False):
231
237
self .inline = inline
232
238
233
239
@classmethod
234
- def from_dict (cls , data : dict [str ,]) -> EmbedField :
240
+ def from_dict (cls , data : dict [str , str | bool ]) -> EmbedField :
235
241
"""Converts a :class:`dict` to a :class:`EmbedField` provided it is in the
236
242
format that Discord expects it to be in.
237
243
@@ -246,15 +252,15 @@ def from_dict(cls, data: dict[str,]) -> EmbedField:
246
252
data: :class:`dict`
247
253
The dictionary to convert into an EmbedField object.
248
254
"""
249
- self : E = cls .__new__ (cls )
255
+ self = cls .__new__ (cls )
250
256
251
257
self .name = data ["name" ]
252
258
self .value = data ["value" ]
253
259
self .inline = data .get ("inline" , False )
254
260
255
261
return self
256
262
257
- def to_dict (self ) -> dict [str , str | bool ]:
263
+ def to_dict (self ) -> dict [str , str | bool | None ]:
258
264
"""Converts this EmbedField object into a dict.
259
265
260
266
Returns
@@ -343,7 +349,7 @@ def __init__(
343
349
type : EmbedType = "rich" ,
344
350
url : Any | None = None ,
345
351
description : Any | None = None ,
346
- timestamp : datetime .datetime = None ,
352
+ timestamp : datetime .datetime | None = None ,
347
353
fields : list [EmbedField ] = [],
348
354
author : EmbedAuthor | None = None ,
349
355
footer : EmbedFooter | None = None ,
@@ -467,7 +473,11 @@ def copy(self: E) -> E:
467
473
return self .__class__ .from_dict (self .to_dict ())
468
474
469
475
def __len__ (self ) -> int :
470
- total = len (self .title ) + len (self .description )
476
+ total = 0
477
+ if self .title :
478
+ total += len (self .title )
479
+ if self .description :
480
+ total += len (self .description )
471
481
for field in getattr (self , "_fields" , []):
472
482
total += len (field .name ) + len (field .value )
473
483
@@ -614,7 +624,7 @@ def image(self) -> EmbedMedia | None:
614
624
img = getattr (self , "_image" , None )
615
625
if not img :
616
626
return None
617
- return EmbedMedia .from_dict (img ) # type: ignore
627
+ return EmbedMedia .from_dict (img )
618
628
619
629
def set_image (self : E , * , url : Any | None ) -> E :
620
630
"""Sets the image for the embed content.
@@ -674,7 +684,7 @@ def thumbnail(self) -> EmbedMedia | None:
674
684
thumb = getattr (self , "_thumbnail" , None )
675
685
if not thumb :
676
686
return None
677
- return EmbedMedia .from_dict (thumb ) # type: ignore
687
+ return EmbedMedia .from_dict (thumb )
678
688
679
689
def set_thumbnail (self : E , * , url : Any | None ) -> E :
680
690
"""Sets the thumbnail for the embed content.
@@ -733,7 +743,7 @@ def video(self) -> EmbedMedia | None:
733
743
vid = getattr (self , "_video" , None )
734
744
if not vid :
735
745
return None
736
- return EmbedMedia .from_dict (vid ) # type: ignore
746
+ return EmbedMedia .from_dict (vid )
737
747
738
748
@property
739
749
def provider (self ) -> EmbedProvider | None :
@@ -746,7 +756,7 @@ def provider(self) -> EmbedProvider | None:
746
756
prov = getattr (self , "_provider" , None )
747
757
if not prov :
748
758
return None
749
- return EmbedProvider .from_dict (prov ) # type: ignore
759
+ return EmbedProvider .from_dict (prov )
750
760
751
761
@property
752
762
def author (self ) -> EmbedAuthor | None :
@@ -759,7 +769,7 @@ def author(self) -> EmbedAuthor | None:
759
769
auth = getattr (self , "_author" , None )
760
770
if not auth :
761
771
return None
762
- return EmbedAuthor .from_dict (auth ) # type: ignore
772
+ return EmbedAuthor .from_dict (auth )
763
773
764
774
def set_author (
765
775
self : E ,
0 commit comments