fixing frequency analysis
This commit is contained in:
@@ -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)})",
|
||||
]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
+12
-8
@@ -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:"
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user