diff --git a/src/data_types/frequency.py b/src/data_types/frequency.py index a7d4d34..ef87a80 100644 --- a/src/data_types/frequency.py +++ b/src/data_types/frequency.py @@ -6,20 +6,19 @@ from utils import str_date, str_datetime, from_now class Frequency: def __init__(self): - self.earliest = None - self.latest = None + self.dates = [] self.longest_break = timedelta(seconds=0) self.longest_break_start = None def to_string(self) -> List[str]: return [ - f"**earliest message:** {str_date(self.earliest)} ({from_now(self.earliest)})", - f"**latest message:** {str_date(self.latest)} ({from_now(self.latest)})", + f"**earliest message:** {str_datetime(self.dates[0])} ({from_now(self.dates[0])})", + f"**latest message:** {str_datetime(self.dates[-1])} ({from_now(self.dates[-1])})", # "**msg/day:** n", # "**busiest day of week:** dd (avg. n msg)", # "**busiest day ever:** jj/mm/yyyy (n days ago) (n msg)", # "**msg/hour:** n", # "**busiest hour of day:** hh (avg. n msg)", # "**busiest hour ever:** hh jj/mm/yyyy (n days ago) (n msg)", - f"**longest break:** {int(self.longest_break.total_seconds() / 3600):,} hours from {str_datetime(self.longest_break_start)} ({from_now(self.earliest)})", + f"**longest break:** {int(self.longest_break.total_seconds() / 3600):,} hours ({int(self.longest_break.days):,} days) from {str_datetime(self.longest_break_start)} ({from_now(self.longest_break_start)})", ] diff --git a/src/scanners/emotes_scanner.py b/src/scanners/emotes_scanner.py index a8552ac..b6d7e71 100644 --- a/src/scanners/emotes_scanner.py +++ b/src/scanners/emotes_scanner.py @@ -30,7 +30,7 @@ class EmotesScanner(Scanner): has_digit_args=True, valid_args=["all", "members"], help=EmotesScanner.help(), - intro_context="emotes usage", + intro_context="Emotes usage", ) self.top = 20 self.all_emojis = False diff --git a/src/scanners/frequency_scanner.py b/src/scanners/frequency_scanner.py index 46a5578..6e6b0d1 100644 --- a/src/scanners/frequency_scanner.py +++ b/src/scanners/frequency_scanner.py @@ -24,7 +24,7 @@ class FrequencyScanner(Scanner): def __init__(self): super().__init__( help=FrequencyScanner.help(), - intro_context="frequency", + intro_context="Frequency", ) async def init(self, message: discord.Message, *args: str) -> bool: @@ -35,6 +35,7 @@ class FrequencyScanner(Scanner): return FrequencyScanner.analyse_message(message, self.freq, self.raw_members) def get_results(self, intro: str) -> List[str]: + FrequencyScanner.compute_results(self.freq) res = [intro] res += self.freq.to_string() return res @@ -47,18 +48,16 @@ class FrequencyScanner(Scanner): # If author is included in the selection (empty list is all) if len(raw_members) == 0 or message.author in raw_members: impacted = True - date = message.created_at - # order is latest to earliest - if freq.latest is None: - freq.earliest = date - freq.latest = date + freq.dates += [message.created_at] + return impacted - delay = freq.earliest - date + @staticmethod + def compute_results(freq: Frequency): + freq.dates.sort() + latest = freq.dates[0] + for date in freq.dates: + delay = date - latest if delay > freq.longest_break: freq.longest_break = delay - freq.longest_break_start = date - - # TODO - - freq.earliest = date - return impacted + freq.longest_break_start = latest + latest = date diff --git a/src/utils/utils.py b/src/utils/utils.py index bd34561..c46a020 100644 --- a/src/utils/utils.py +++ b/src/utils/utils.py @@ -128,32 +128,36 @@ def get_intro( if full: return f"{subject} in this server ({nc} channels, {nmm:,} messages):" elif len(channels) < 5: - return f"{aggregate([c.mention for c in channels])} {subject} in {nmm:,} messages:" + return f"{aggregate([c.mention for c in channels])} {subject.lower()} in {nmm:,} messages:" else: - return f"These {len(channels)} channels {subject} in {nmm:,} messages:" + return ( + f"These {len(channels)} channels {subject.lower()} in {nmm:,} messages:" + ) elif len(members) < 5: if full: - return f"{aggregate([m.mention for m in members])} {subject} in {nmm:,} messages:" + return f"{aggregate([m.mention for m in members])} {subject.lower()} in {nmm:,} messages:" elif len(channels) < 5: return ( f"{aggregate([m.mention for m in members])} on {aggregate([c.mention for c in channels])} " - f"{subject} in {nmm:,} messages:" + f"{subject.lower()} in {nmm:,} messages:" ) else: return ( f"{aggregate([m.mention for m in members])} on these {len(channels)} channels " - f"{subject} in {nmm:,} messages:" + f"{subject.lower()} in {nmm:,} messages:" ) else: if full: - return f"These {len(members)} members {subject} in {nmm:,} messages:" + return ( + f"These {len(members)} members {subject.lower()} in {nmm:,} messages:" + ) elif len(channels) < 5: return ( f"These {len(members)} members on {aggregate([c.mention for c in channels])} " - f"{subject} in {nmm:,} messages:" + f"{subject.lower()} in {nmm:,} messages:" ) else: return ( f"These {len(members)} members on these {len(channels)} channels " - f"{subject} in {nmm:,} messages:" + f"{subject.lower()} in {nmm:,} messages:" )