From 76af4661ed8ea80b0d0662b3bb34da5f7bfb780e Mon Sep 17 00:00:00 2001 From: Klemek Date: Fri, 9 Apr 2021 19:50:12 +0200 Subject: [PATCH] fixed time range loading --- src/logs/channel_logs.py | 39 ++++++++++++++++++++------------------- src/logs/guild_logs.py | 2 ++ src/scanners/scanner.py | 2 +- 3 files changed, 23 insertions(+), 20 deletions(-) diff --git a/src/logs/channel_logs.py b/src/logs/channel_logs.py index 9e83b2b..a5e3857 100644 --- a/src/logs/channel_logs.py +++ b/src/logs/channel_logs.py @@ -64,47 +64,48 @@ class ChannelLogs: return # load backward if is_empty or ( - start_date is not None - and self.start_date > start_date - and self.first_message_id is not None + self.first_message_id is not None + and ( + start_date is None + or (self.start_date is not None and self.start_date > start_date) + ) ): - first_message_id = self.first_message_id first_message_date = None tmp_message_id = 0 done = 0 while ( - done >= CHUNK_SIZE - or first_message_id is None - or (first_message_date is None or first_message_date >= start_date) - and start_date is not None - ) and tmp_message_id != first_message_id: - tmp_message_id = first_message_id + first_message_date is None + or ( + done >= CHUNK_SIZE + and (start_date is None or first_message_date > start_date) + ) + ) and tmp_message_id != self.first_message_id: + tmp_message_id = self.first_message_id done = 0 async for message in channel.history( limit=CHUNK_SIZE, - before=FakeMessage(first_message_id) - if first_message_id is not None + before=FakeMessage(self.first_message_id) + if self.first_message_id is not None else None, oldest_first=False, ): done += 1 - first_message_id = message.id + self.first_message_id = message.id first_message_date = message.created_at m = MessageLog(message, self) await m.load(message) self.messages += [m] yield len(self.messages), False - if done >= CHUNK_SIZE and first_message_date < start_date: - # date was limiting here, store first message id - self.first_message_id = first_message_id + if done < CHUNK_SIZE: # reached bottom + self.first_message_id = None self.last_message_id = channel.last_message_id # load forward - if not is_empty: + last_message_date = self.messages[0].created_at + if not is_empty and (stop_date is None or last_message_date < stop_date): tmp_message_id = None - last_message_date = self.messages[0].created_at while ( self.last_message_id != channel.last_message_id - or (stop_date is not None and last_message_date <= stop_date) + and (stop_date is None or last_message_date < stop_date) ) and self.last_message_id != tmp_message_id: tmp_message_id = self.last_message_id async for message in channel.history( diff --git a/src/logs/guild_logs.py b/src/logs/guild_logs.py index 3e5f748..7600077 100644 --- a/src/logs/guild_logs.py +++ b/src/logs/guild_logs.py @@ -195,8 +195,10 @@ class GuildLogs: channel for channel in target_channels if channel.id not in self.channels + or self.channels[channel.id].first_message_id is not None ] if len(invalid_target_channels) == 0: + logging.info(f"log {self.guild.id} > assumed fast") fast = True if self.locked: self.unlock() diff --git a/src/scanners/scanner.py b/src/scanners/scanner.py index 62ba168..b4a96f1 100644 --- a/src/scanners/scanner.py +++ b/src/scanners/scanner.py @@ -150,7 +150,7 @@ class Scanner(ABC): elif total_msg == NO_FILE: await message.channel.send(gdpr.TEXT) else: - if self.start_date is not None: + if self.start_date is not None and len(logs.channels) > 0: self.start_date = max( self.start_date, min(