summaryrefslogtreecommitdiff
path: root/FortniteClient.py
diff options
context:
space:
mode:
Diffstat (limited to 'FortniteClient.py')
-rwxr-xr-xFortniteClient.py75
1 files changed, 49 insertions, 26 deletions
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