summaryrefslogtreecommitdiff
path: root/fortnite_client/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'fortnite_client/__init__.py')
-rw-r--r--fortnite_client/__init__.py33
1 files changed, 29 insertions, 4 deletions
diff --git a/fortnite_client/__init__.py b/fortnite_client/__init__.py
index bac4e5d..28cbf80 100644
--- a/fortnite_client/__init__.py
+++ b/fortnite_client/__init__.py
@@ -2,6 +2,7 @@ import fortnitepy
import json
import os
import typing
+import traceback
from fortnite_client.device_auth import DeviceAuth
from app_types import *
@@ -16,16 +17,25 @@ class ClientInitObserver:
async def on_event(self, fortnite_client) -> None:
pass
+class NewFriendObserver:
+ async def on_event(self, friend: User) -> None:
+ pass
+
+ async def on_failure(self, display_name) -> None:
+ pass
+
class FortniteClient(fortnitepy.Client):
__device_auth: DeviceAuth
__friend_presence_observer: FriendPresenceObserver
__client_init_observer: ClientInitObserver
+ __new_friend_observer: NewFriendObserver
- def __init__(self, client_init_observer: ClientInitObserver, friend_presence_observer: FriendPresenceObserver):
+ def __init__(self, client_init_observer: ClientInitObserver, friend_presence_observer: FriendPresenceObserver, new_friend_observer: NewFriendObserver):
self.__device_auth = DeviceAuth()
self.__client_init_observer = client_init_observer
self.__friend_presence_observer = friend_presence_observer
+ self.__new_friend_observer = new_friend_observer
if self.__device_auth.device_auth_file_exists():
self.__auth_device_auth()
else:
@@ -78,7 +88,7 @@ class FortniteClient(fortnitepy.Client):
await self.__client_init_observer.on_event(self)
async def event_friend_request(self, request: typing.Union[fortnitepy.friend.IncomingPendingFriend, fortnitepy.friend.OutgoingPendingFriend]):
- await IncomingFriendRequestEvent.on_event(request)
+ await IncomingFriendRequestEvent.on_event(request, self.__new_friend_observer)
async def event_friend_presence(self, before, after: fortnitepy.Presence):
await FriendPresenceEvent.on_event(before, after, self.__friend_presence_observer)
@@ -99,8 +109,23 @@ class FriendPresenceEvent:
party_size)
class IncomingFriendRequestEvent:
- async def on_event(request: typing.Union[fortnitepy.friend.IncomingPendingFriend, fortnitepy.friend.OutgoingPendingFriend]):
+ async def on_event(request: typing.Union[fortnitepy.friend.IncomingPendingFriend, fortnitepy.friend.OutgoingPendingFriend], new_friend_observer: NewFriendObserver):
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
+ await incoming_request.accept()
+ accepted_friend = incoming_request.client.get_friend(request._id)
+
+ # Try fetch stats
+ try:
+ await IncomingFriendRequestEvent.__try_get_stats(accepted_friend)
+ await new_friend_observer.on_event(User.from_fortnite_friend(accepted_friend))
+ except:
+ print("An exception occurred while fetching user stats")
+ print(traceback.format_exc())
+ await accepted_friend.remove()
+ await new_friend_observer.on_failure(accepted_friend.display_name)
+
+ async def __try_get_stats(friend: fortnitepy.Friend):
+ await friend.fetch_br_stats() \ No newline at end of file