summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Formatter.py17
-rw-r--r--FortniteEvents.py15
-rw-r--r--FortniteStatusNotifier.py3
-rwxr-xr-xtgbot.py11
4 files changed, 29 insertions, 17 deletions
diff --git a/Formatter.py b/Formatter.py
index b87735b..5cd065d 100644
--- a/Formatter.py
+++ b/Formatter.py
@@ -36,28 +36,35 @@ async def __formatFriend(friend: fortnitepy.Friend):
# User
async def formatUser(user: fortnitepy.User):
stats = await user.fetch_br_stats()
+ bp_level: float = await user.fetch_battlepass_level(season=29)
combined_stats = stats.get_combined_stats()
if 'keyboardmouse' in combined_stats:
- return __formatUserDevice(user, combined_stats['keyboardmouse'])
+ return __formatUserDevice(user, combined_stats['keyboardmouse'], bp_level)
else:
- return __formatUserDevice(user, combined_stats['gamepad'])
+ return __formatUserDevice(user, combined_stats['gamepad'], bp_level)
-def __formatUserDevice(user: fortnitepy.User, device_stats: dict):
+def __formatUserDevice(user: fortnitepy.User, device_stats: dict, bp_level: float):
return formatting.format_text(
formatting.mbold("User: ") + user.display_name,
formatting.mbold("External auth: ") + ', '.join([__formatExternalAuth(external_auth) for external_auth in user.external_auths]),
formatting.mbold("ID: ") + user.id,
+ formatting.mbold("Level: ") + str(int(bp_level//1)),
formatting.mbold("Matches played: ") + str(device_stats['matchesplayed']),
formatting.mbold("Total kills: ") + str(device_stats['kills']),
formatting.mbold("Wins: ") + str(device_stats['wins']),
separator='\n')
+
def __formatExternalAuth(external_auth: fortnitepy.ExternalAuth):
return '{} \({}\)'.format(external_auth.external_display_name, external_auth.type)
-def formatFriendOnline(display_name: str):
+def formatFriendOnline(display_name: str, party_size: int):
+ if party_size > 1:
+ text = 'is playing Fortnite with {} friends\!'.format(str(party_size - 1))
+ else:
+ text = 'is playing Fortnite\!'
return formatting.format_text(
u'\u2b50',
formatting.mbold('{}'.format(display_name)),
- 'is playing Fortnite\!',
+ text,
u'\u2b50',
separator=' ') \ No newline at end of file
diff --git a/FortniteEvents.py b/FortniteEvents.py
index 5be03f2..b5ae91c 100644
--- a/FortniteEvents.py
+++ b/FortniteEvents.py
@@ -9,14 +9,19 @@ class IncomingFriendRequest:
await incoming_request.accept()
class PresenceObserver:
- async def update(self, display_name: str, playing: bool) -> None:
+ async def update(self, display_name: str, playing: bool, party_size: int) -> None:
pass
class FriendPresence:
- async def on_event(before, after: fortnitepy.Presence, observers):
+ async def on_event(before, after: fortnitepy.Presence, observer: PresenceObserver):
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))
- for observer in observers:
- if isinstance(observer, PresenceObserver):
- await observer.update(after.friend.display_name, after.playing)
+ party_size: int = 0
+ if after.has_properties:
+ party: fortnitepy.PresenceParty = after.party
+ party_size = int(party.playercount)
+ await observer.update(
+ after.friend.display_name,
+ after.playing,
+ party_size)
diff --git a/FortniteStatusNotifier.py b/FortniteStatusNotifier.py
index 1c40ec0..81c7d12 100644
--- a/FortniteStatusNotifier.py
+++ b/FortniteStatusNotifier.py
@@ -3,7 +3,8 @@ import time
import asyncio
from pythonFortniteStatus.FortniteStatus import *
-__polling_interval__ = 5
+# Polling interval in seconds
+__polling_interval__ = 5 * 60 # 5 minutes
fortniteStatus = FortniteStatus()
diff --git a/tgbot.py b/tgbot.py
index 5422cb6..539a1c5 100755
--- a/tgbot.py
+++ b/tgbot.py
@@ -19,21 +19,20 @@ class FortnitePresenceObserver(PresenceObserver):
# Map name -> last seen not playing timestamp seconds
statuses = {}
- async def update(self, display_name: str, playing: bool) -> None:
- print('FortnitePresenceObserver: {} playing = {}'.format(display_name, playing))
+ async def update(self, display_name: str, playing: bool, party_size: int) -> None:
if playing:
if not display_name in self.statuses:
- await self.__notifyFriendPlaying(display_name)
+ await self.__notifyFriendPlaying(display_name, party_size)
self.statuses[display_name] = time.time()
else:
diff = time.time() - self.statuses[display_name]
if diff > 60 * 60: # 60 minutes
- self.__notifyFriendPlaying(display_name)
+ self.__notifyFriendPlaying(display_name, party_size)
else:
self.statuses[display_name] = time.time()
- async def __notifyFriendPlaying(self, display_name: str):
- await send_message_to_all(formatFriendOnline(display_name))
+ async def __notifyFriendPlaying(self, display_name: str, party_size: int):
+ await send_message_to_all(formatFriendOnline(display_name, party_size))
bot = telebot.async_telebot.AsyncTeleBot(os.environ["TELEBOT_BOT_TOKEN"])
userRepository = UserRepository('db.sqlite')