2626from typing import Optional , Union , TYPE_CHECKING , List , Dict
2727
2828from . import enums
29+ from .utils import parse_timestamp
2930from .user import BitLeaderboardUser , PartialUser , User
3031
3132if TYPE_CHECKING :
@@ -117,7 +118,7 @@ def __init__(self, http: "TwitchHTTP", data: dict):
117118 self .tiers = [CheerEmoteTier (x ) for x in data ["tiers" ]]
118119 self .type : str = data ["type" ]
119120 self .order : str = data ["order" ]
120- self .last_updated = datetime . datetime . strptime (data ["last_updated" ], "%Y-%m-%dT%H:%M:%SZ" )
121+ self .last_updated = parse_timestamp (data ["last_updated" ])
121122 self .charitable : bool = data ["is_charitable" ]
122123
123124 def __repr__ (self ):
@@ -152,7 +153,7 @@ def __init__(self, http: "TwitchHTTP", data: dict):
152153 self .language = data ["language" ]
153154 self .title = data ["title" ]
154155 self .views = data ["view_count" ]
155- self .created_at = datetime . datetime . strptime (data ["created_at" ], "%Y-%m-%dT%H:%M:%SZ" )
156+ self .created_at = parse_timestamp (data ["created_at" ])
156157 self .thumbnail_url = data ["thumbnail_url" ]
157158
158159 def __repr__ (self ):
@@ -197,12 +198,10 @@ def __init__(self, http: "TwitchHTTP", data: dict):
197198 self .type : str = data ["event_type" ]
198199 self .version : str = data ["version" ]
199200 self .broadcaster = PartialUser (http , id = data ["event_data" ]["broadcaster_id" ], name = None )
200- self .timestamp = datetime .datetime .strptime (data ["event_timestamp" ], "%Y-%m-%dT%H:%M:%SZ" )
201- self .cooldown_end_time = datetime .datetime .strptime (
202- data ["event_data" ]["cooldown_end_time" ], "%Y-%m-%dT%H:%M:%SZ"
203- )
204- self .expiry = datetime .datetime .strptime (data ["expires_at" ], "%Y-%m-%dT%H:%M:%SZ" )
205- self .started_at = datetime .datetime .strptime (data ["event_data" ]["started_at" ], "%Y-%m-%dT%H:%M:%SZ" )
201+ self .timestamp = parse_timestamp (data ["event_timestamp" ])
202+ self .cooldown_end_time = parse_timestamp (data ["event_data" ]["cooldown_end_time" ])
203+ self .expiry = parse_timestamp (data ["expires_at" ])
204+ self .started_at = parse_timestamp (data ["event_data" ]["started_at" ])
206205 self .last_contribution = HypeTrainContribution (http , data ["event_data" ]["last_contribution" ])
207206 self .level : int = data ["event_data" ]["level" ]
208207 self .top_contributions = [HypeTrainContribution (http , x ) for x in data ["event_data" ]["top_contributions" ]]
@@ -219,14 +218,14 @@ class BanEvent:
219218 def __init__ (self , http : "TwitchHTTP" , data : dict , broadcaster : Optional [Union [PartialUser , User ]]):
220219 self .id : str = data ["id" ]
221220 self .type : str = data ["event_type" ]
222- self .timestamp = datetime . datetime . strptime (data ["event_timestamp" ], "%Y-%m-%dT%H:%M:%SZ" )
221+ self .timestamp = parse_timestamp (data ["event_timestamp" ])
223222 self .version : float = float (data ["version" ])
224223 self .broadcaster = broadcaster or PartialUser (
225224 http , data ["event_data" ]["broadcaster_id" ], data ["event_data" ]["broadcaster_name" ]
226225 )
227226 self .user = PartialUser (http , data ["event_data" ]["user_id" ], data ["event_data" ]["user_name" ])
228227 self .expires_at = (
229- datetime . datetime . strptime (data ["event_data" ]["expires_at" ], "%Y-%m-%dT%H:%M:%SZ" )
228+ parse_timestamp (data ["event_data" ]["expires_at" ])
230229 if data ["event_data" ]["expires_at" ]
231230 else None
232231 )
@@ -248,7 +247,7 @@ def __init__(
248247 ):
249248 self .from_user = from_ or PartialUser (http , data ["from_id" ], data ["from_name" ])
250249 self .to_user = to or PartialUser (http , data ["to_id" ], data ["to_name" ])
251- self .followed_at = datetime . datetime . strptime (data ["followed_at" ], "%Y-%m-%dT%H:%M:%SZ" )
250+ self .followed_at = parse_timestamp (data ["followed_at" ])
252251
253252 def __repr__ (self ):
254253 return f"<FollowEvent from_user={ self .from_user } to_user={ self .to_user } followed_at={ self .followed_at } >"
@@ -284,7 +283,7 @@ class Marker:
284283
285284 def __init__ (self , data : dict ):
286285 self .id : int = data ["id" ]
287- self .created_at = datetime . datetime . strptime (data ["created_at" ], "%Y-%m-%dT%H:%M:%SZ" )
286+ self .created_at = parse_timestamp (data ["created_at" ])
288287 self .description : str = data ["description" ]
289288 self .position : int = data ["position_seconds" ]
290289 self .url : Optional [str ] = data .get ("URL" )
@@ -342,7 +341,7 @@ class ModEvent:
342341 def __init__ (self , http : "TwitchHTTP" , data : dict , broadcaster : Union [PartialUser , User ]):
343342 self .id : int = data ["id" ]
344343 self .type = enums .ModEventEnum (value = data ["event_type" ])
345- self .timestamp = datetime . datetime . strptime (data ["event_timestamp" ], "%Y-%m-%dT%H:%M:%SZ" )
344+ self .timestamp = parse_timestamp (data ["event_timestamp" ])
346345 self .version : str = data ["version" ]
347346 self .broadcaster = broadcaster
348347 self .user = PartialUser (http , data ["event_data" ]["user_id" ], data ["event_data" ]["user_name" ])
@@ -487,8 +486,8 @@ def __init__(self, http: "TwitchHTTP", data: dict, user: Union[PartialUser, User
487486 self .user = user or PartialUser (http , data ["user_id" ], data ["user_name" ])
488487 self .title : str = data ["title" ]
489488 self .description : str = data ["description" ]
490- self .created_at = datetime . datetime . strptime (data ["created_at" ], "%Y-%m-%dT%H:%M:%SZ" )
491- self .published_at = datetime . datetime . strptime (data ["published_at" ], "%Y-%m-%dT%H:%M:%SZ" )
489+ self .created_at = parse_timestamp (data ["created_at" ])
490+ self .published_at = parse_timestamp (data ["published_at" ])
492491 self .url : str = data ["url" ]
493492 self .thumbnail_url : str = data ["thumbnail_url" ]
494493 self .viewable : str = data ["viewable" ]
@@ -533,7 +532,7 @@ class WebhookSubscription:
533532
534533 def __init__ (self , data : dict ):
535534 self .callback : str = data ["callback" ]
536- self .expires_at = datetime . datetime . strptime (data ["expires_at" ], "%Y-%m-%dT%H:%M:%SZ" )
535+ self .expires_at = parse_timestamp (data ["expired_at" ] )
537536 self .topic : str = data ["topic" ]
538537
539538 def __repr__ (self ):
@@ -565,7 +564,7 @@ def __init__(self, http: "TwitchHTTP", data: dict):
565564 self .type : str = data ["type" ]
566565 self .title : str = data ["title" ]
567566 self .viewer_count : int = data ["viewer_count" ]
568- self .started_at = datetime . datetime . strptime (data ["started_at" ], "%Y-%m-%dT%H:%M:%SZ" )
567+ self .started_at = parse_timestamp (data ["started_at" ])
569568 self .language : str = data ["language" ]
570569 self .thumbnail_url : str = data ["thumbnail_url" ]
571570 self .tag_ids : List [str ] = data ["tag_ids" ]
@@ -682,11 +681,11 @@ class ScheduleSegment:
682681
683682 def __init__ (self , data : dict ):
684683 self .id : str = data ["id" ]
685- self .start_time = datetime . datetime . strptime (data ["start_time" ], "%Y-%m-%dT%H:%M:%SZ" )
686- self .end_time = datetime . datetime . strptime (data ["end_time" ], "%Y-%m-%dT%H:%M:%SZ" )
684+ self .start_time = parse_timestamp (data ["start_time" ])
685+ self .end_time = parse_timestamp (data ["end_time" ])
687686 self .title : str = data ["title" ]
688687 self .canceled_until = (
689- datetime . datetime . strptime (data ["canceled_until" ], "%Y-%m-%dT%H:%M:%SZ" ) if data ["canceled_until" ] else None
688+ parse_timestamp (data ["canceled_until" ]) if data ["canceled_until" ] else None
690689 )
691690 self .category = ScheduleCategory (data ["category" ]) if data ["category" ] else None
692691 self .is_recurring : bool = data ["is_recurring" ]
@@ -712,8 +711,8 @@ class ScheduleVacation:
712711 __slots__ = ("start_time" , "end_time" )
713712
714713 def __init__ (self , data : dict ):
715- self .start_time = datetime . datetime . strptime (data ["start_time" ], "%Y-%m-%dT%H:%M:%SZ" )
716- self .end_time = datetime . datetime . strptime (data ["end_time" ], "%Y-%m-%dT%H:%M:%SZ" )
714+ self .start_time = parse_timestamp (data ["start_time" ])
715+ self .end_time = parse_timestamp (data ["end_time" ])
717716
718717 def __repr__ (self ):
719718 return f"<ScheduleVacation start_time={ self .start_time } end_time={ self .end_time } >"
0 commit comments