From 104c0b32a1e30a56900bb6a17ab9a009c54b76bb Mon Sep 17 00:00:00 2001 From: Dmitrii Morozov Date: Tue, 7 May 2024 16:16:57 +0200 Subject: Refactoring --- FortniteClient.py | 75 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 49 insertions(+), 26 deletions(-) (limited to 'FortniteClient.py') diff --git a/FortniteClient.py b/FortniteClient.py index a8e6774..1f700b2 100755 --- a/FortniteClient.py +++ b/FortniteClient.py @@ -5,21 +5,30 @@ import json import os import typing from DeviceAuth import DeviceAuth -from FortniteEvents import * from Types import * __fortnite_account_key__ = 'fornite-account-key' +# Intefaces for events +class FriendPresenceObserver: + async def update(self, display_name: str, playing: bool, party_size: int) -> None: + pass + +class ClientInitObserver: + async def on_event(self, fortniteClient) -> None: + pass + class FortniteClient(fortnitepy.Client): - device_auth = DeviceAuth() - presenceObserver = None - clientInit = None + __device_auth: DeviceAuth + __friendPresenceObserver: FriendPresenceObserver + __clientInitObserver: ClientInitObserver - def __init__(self, friendPresenceObserver: PresenceObserver, clientInit: ClientInit): - self.presenceObserver = friendPresenceObserver - self.clientInit = clientInit - if self.device_auth.device_auth_file_exists(): + def __init__(self, clientInitObserver: ClientInitObserver, friendPresenceObserver: FriendPresenceObserver): + self.__device_auth = DeviceAuth() + self.__clientInitObserver = clientInitObserver + self.__friendPresenceObserver = friendPresenceObserver + if self.__device_auth.device_auth_file_exists(): self.__auth_device_auth() else: self.__auth_authorization_code() @@ -40,19 +49,16 @@ class FortniteClient(fortnitepy.Client): ) def __auth_device_auth(self): - device_auth_details = self.device_auth.get_device_auth_details().get(__fortnite_account_key__, {}) + device_auth_details = self.__device_auth.get_device_auth_details().get(__fortnite_account_key__, {}) super().__init__( auth=fortnitepy.DeviceAuth( **device_auth_details ) ) - async def event_device_auth_generate(self, details, email): - self.device_auth.store_device_auth_details(email, details) - # Generate auth details if none were supplied yet - async def generate_auth_details(self): - if not self.device_auth.device_auth_file_exists(): + async def __generate_auth_details(self): + if not self.__device_auth.device_auth_file_exists(): device_auth_data = await self.auth.generate_device_auth() details = { 'device_id': device_auth_data['deviceId'], @@ -66,20 +72,37 @@ class FortniteClient(fortnitepy.Client): __fortnite_account_key__ ) - async def event_ready(self): - print('----------------') - print('FortniteClient ready as:') - print(self.user.display_name) - print(self.user.id) - print('----------------') + async def event_device_auth_generate(self, details, email): + self.__device_auth.store_device_auth_details(email, details) - await self.generate_auth_details() - - # Call observers - await self.clientInit.on_event() + async def event_ready(self): + await self.__generate_auth_details() + await self.__clientInitObserver.on_event(self) async def event_friend_request(self, request: typing.Union[fortnitepy.friend.IncomingPendingFriend, fortnitepy.friend.OutgoingPendingFriend]): - await IncomingFriendRequest.on_event(request) + await IncomingFriendRequestEvent.on_event(request) async def event_friend_presence(self, before, after: fortnitepy.Presence): - await FriendPresence.on_event(before, after, self.presenceObserver) \ No newline at end of file + await FriendPresenceEvent.on_event(before, after, self.__friendPresenceObserver) + +class FriendPresenceEvent: + async def on_event(before, after: fortnitepy.Presence, friendPresenceObserver: FriendPresenceObserver): + if before is not None and after is not None: + if before.playing != after.playing: + print('FriendPresence changed for user {}, before {}, after {}'.format(after.friend.display_name, before.playing, after.playing)) + party_size: int = 1 + if after.has_properties: + party: fortnitepy.PresenceParty = after.party + if party is not None and party.playercount is not None: + party_size = int(party.playercount) + await friendPresenceObserver.update( + after.friend.display_name, + after.playing, + party_size) + +class IncomingFriendRequestEvent: + async def on_event(request: typing.Union[fortnitepy.friend.IncomingPendingFriend, fortnitepy.friend.OutgoingPendingFriend]): + if isinstance(request, fortnitepy.friend.IncomingPendingFriend): + incoming_request = typing.cast(fortnitepy.friend.IncomingPendingFriend, request) + print('Accepting friend request from {}'.format(incoming_request.display_name)) + #await incoming_request.accept() \ No newline at end of file -- cgit v1.2.3