From 733e7e23a14588358607a65c2bb1f2677c1e53c6 Mon Sep 17 00:00:00 2001 From: Dmitrii Morozov Date: Sun, 7 Apr 2024 19:58:55 +0200 Subject: First draft of integration with fortnite api --- .gitignore | 4 ++- fortniteTest.py | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+), 1 deletion(-) create mode 100755 fortniteTest.py diff --git a/.gitignore b/.gitignore index 322d1e2..ebad2d3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ __pycache__/ -db.sqlite \ No newline at end of file +db.sqlite +venv/ +device_auths.json \ No newline at end of file diff --git a/fortniteTest.py b/fortniteTest.py new file mode 100755 index 0000000..a00283f --- /dev/null +++ b/fortniteTest.py @@ -0,0 +1,91 @@ +#!/usr/bin/python3 + +import fortnitepy +import json +import os + +email = 'dmitry-morozov.rjkv73@yandex.ru' +password = 'Dimka2407985$' +filename = 'device_auths.json' + +class MyClient(fortnitepy.Client): + def __init__(self): + if self._device_auth_file_exists(): + device_auth_details = self.get_device_auth_details().get(email, {}) + super().__init__( + auth=fortnitepy.DeviceAuth( + **device_auth_details + ) + ) + else: + code = input("Enter authorization code (https://www.epicgames.com/id/api/redirect?clientId=3446cd72694c4a4485d81b77adbb2141&responseType=code):") + print(code) + super().__init__( + auth=fortnitepy.AuthorizationCodeAuth( + code = code + ) + ) + + def _device_auth_file_exists(self): + return os.path.isfile(filename) + + def get_device_auth_details(self): + if os.path.isfile(filename): + with open(filename, 'r') as fp: + return json.load(fp) + return {} + + def store_device_auth_details(self, email, details): + existing = self.get_device_auth_details() + existing[email] = details + + with open(filename, 'w') as fp: + json.dump(existing, fp) + + async def event_device_auth_generate(self, details, email): + self.store_device_auth_details(email, details) + + async def event_ready(self): + print('----------------') + print('Client ready as') + print(self.user.display_name) + print(self.user.id) + print('----------------') + + if not self._device_auth_file_exists(): + device_auth_data = await self.auth.generate_device_auth() + details = { + 'device_id': device_auth_data['deviceId'], + 'account_id': device_auth_data['accountId'], + 'secret': device_auth_data['secret'], + } + self.auth.__dict__.update(details) + self.dispatch_event( + 'device_auth_generate', + details, + email + ) + + for incomingPedingFriend in self.incoming_pending_friends: + print('Accepting friend request') + await incomingPedingFriend.accept() + + async def event_party_invite(self, invitation: fortnitepy.ReceivedPartyInvitation): + clientParty = await invitation.accept() + for partyMember in clientParty.members: + if not self.get_friend(partyMember.id) and self.user.id != partyMember.id: + print('Adding {} as friend'.format(partyMember.display_name)) + await partyMember.add() + + async def event_friend_request(self, request: fortnitepy.friend.IncomingPendingFriend): + print('Accepting friend request') + await request.accept() + + async def event_friend_presence(self, before, after: fortnitepy.Presence): + if before is not None and after is not None: + print('event_friend_presence for user {}'.format(after.friend.display_name)) + print("Before available {}, joinable {}, playing {}, lfg {}".format(before.available, before.joinable, before.playing, before.lfg)) + print("After available {}, joinable {}, playing {}, lfg {}".format(after.available, after.joinable, after.playing, after.lfg)) + +client = MyClient() +client.run() \ No newline at end of file -- cgit v1.2.3