From b259eaf62123a2b391668f97136683d2df42ddd9 Mon Sep 17 00:00:00 2001 From: Dmitrii Morozov Date: Sun, 27 Oct 2024 19:09:54 +0100 Subject: Outgoing friend request handling --- formatter/__init__.py | 6 +++--- fortnite_client/__init__.py | 32 +++++++++++++++++++++----------- fortnite_client/fortnite_events.py | 4 ++-- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/formatter/__init__.py b/formatter/__init__.py index 2abc424..05d4112 100644 --- a/formatter/__init__.py +++ b/formatter/__init__.py @@ -144,10 +144,10 @@ def format_new_friend(display_name: str): separator='' ) -def format_failed_new_friend(display_name: str): +def format_friend_disabled_public_stats(display_name: str): return formatting.format_text( - 'Error adding new friend ', + 'New friend ', formatting.mbold('{}'.format(display_name)), - ', please enable public statistics in Fortnite profile', + 'has disabled public statistics in Fortnite profile, no statistics will be visible', separator='' ) \ No newline at end of file diff --git a/fortnite_client/__init__.py b/fortnite_client/__init__.py index 91f334a..393b250 100644 --- a/fortnite_client/__init__.py +++ b/fortnite_client/__init__.py @@ -21,7 +21,7 @@ class NewFriendObserver: async def on_event(self, friend: User) -> None: pass - async def on_failure(self, display_name) -> None: + async def on_unavailable_public_stats(self, display_name) -> None: pass class FortniteClient(fortnitepy.Client): @@ -121,16 +121,26 @@ class IncomingFriendRequestEvent: print('Accepting friend request from {}'.format(incoming_request.display_name)) 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) + + if isinstance(request, fortnitepy.friend.OutgoingPendingFriend): + outgoing_request = typing.cast(fortnitepy.friend.OutgoingPendingFriend, request) + + print('Accepted friend request to {}'.format(outgoing_request.display_name)) + accepted_friend = outgoing_request.client.get_friend(request._id) + + await IncomingFriendRequestEvent.__handle_new_friend(accepted_friend, new_friend_observer) + + async def __handle_new_friend(accepted_friend: fortnitepy.friend.Friend, new_friend_observer: NewFriendObserver): + # Try fetch stats + try: + await IncomingFriendRequestEvent.__try_get_stats(accepted_friend) + except: + print("An exception occurred while fetching user stats") + print(traceback.format_exc()) + await new_friend_observer.on_unavailable_public_stats(accepted_friend.display_name) + + # Register new fried, fetch stats + await new_friend_observer.on_event(User.from_fortnite_friend(accepted_friend)) async def __try_get_stats(friend: fortnitepy.Friend): await friend.fetch_br_stats() \ No newline at end of file diff --git a/fortnite_client/fortnite_events.py b/fortnite_client/fortnite_events.py index 2447d82..918b1e1 100644 --- a/fortnite_client/fortnite_events.py +++ b/fortnite_client/fortnite_events.py @@ -48,5 +48,5 @@ class NewFriendObserverImpl(NewFriendObserver): await self.__stats_repository.put_stats(friend, datetime.datetime.now()) await self.__telegram_bot.send_message_to_all(format_new_friend(friend.display_name)) - async def on_failure(self, display_name) -> None: - await self.__telegram_bot.send_message_to_all(format_failed_new_friend(display_name)) \ No newline at end of file + async def on_unavailable_public_stats(self, display_name) -> None: + await self.__telegram_bot.send_message_to_all(format_friend_disabled_public_stats(display_name)) \ No newline at end of file -- cgit v1.2.3