diff options
| -rw-r--r-- | Formatter.py | 17 | ||||
| -rw-r--r-- | FortniteEvents.py | 15 | ||||
| -rw-r--r-- | FortniteStatusNotifier.py | 3 | ||||
| -rwxr-xr-x | tgbot.py | 11 | 
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() @@ -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') | 
