From 8e996d9094814b74195c49d4c8aa2d1ebb37e206 Mon Sep 17 00:00:00 2001 From: Dmitrii Morozov Date: Mon, 6 May 2024 18:27:03 +0200 Subject: Save last user presence in database --- tgbot.py | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) (limited to 'tgbot.py') diff --git a/tgbot.py b/tgbot.py index 87d93e1..63ff179 100755 --- a/tgbot.py +++ b/tgbot.py @@ -5,7 +5,7 @@ from FortniteStatusNotifier import * from Formatter import * from FortniteClient import * from FortniteEvents import * -from persistence import UserRepository, StatsRepository +from persistence import UserRepository, StatsRepository, PresenceRepository # Check token in environment variables if "TELEBOT_BOT_TOKEN" not in os.environ: @@ -26,20 +26,13 @@ class FortniteStatusObserver(Observer): await send_message_to_all(formatFortniteStatus(fortniteStatus)) class FortnitePresenceObserver(PresenceObserver): - # Map name -> last seen not playing timestamp seconds - statuses = {} - async def update(self, display_name: str, playing: bool, party_size: int) -> None: if playing: - if not display_name in self.statuses: + last_presence = prensenceRepository.getLastUserPresence(display_name) + diff = time.time() - last_presence + if diff > 60 * 60: # 60 minutes 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 - await self.__notifyFriendPlaying(display_name, party_size) - else: - self.statuses[display_name] = time.time() + prensenceRepository.setLastUserPresence(display_name, time.time()) async def __notifyFriendPlaying(self, display_name: str, party_size: int): await send_message_to_all(formatFriendOnline(display_name, party_size)) @@ -55,6 +48,7 @@ bot = telebot.async_telebot.AsyncTeleBot( exception_handler=ExceptionHandler()) userRepository = UserRepository() statsRepository = StatsRepository() +prensenceRepository = PresenceRepository() fortniteStatusWrapper = FortniteStatusNotifier(FortniteStatusObserver()) fortniteClient = FortniteClient(FortnitePresenceObserver(), ClientInitObserver()) @@ -93,6 +87,14 @@ async def getTodayStats(message): async def recordStats(message): await record_user_stats() +@bot.message_handler(commands = ['online']) +async def mockOnline(message): + await FortnitePresenceObserver().update('snoopdesigns', True, 1) + +@bot.message_handler(commands = ['offline']) +async def mockOffline(message): + await FortnitePresenceObserver().update('snoopdesigns', False, 1) + @bot.message_handler(commands = ['find']) async def findUser(message): arg = message.text.split() -- cgit v1.2.3