all/everyone to include bots on scans

This commit is contained in:
Klemek
2021-03-14 22:48:58 +01:00
parent f2c3185fad
commit 4956f45098
9 changed files with 103 additions and 25 deletions
+5 -1
View File
@@ -22,7 +22,11 @@ class ChannelLogs:
return
self.id = int(channel["id"])
self.name = channel["name"]
self.last_message_id = int(channel["last_message_id"]) if channel["last_message_id"] is not None else None
self.last_message_id = (
int(channel["last_message_id"])
if channel["last_message_id"] is not None
else None
)
self.messages = [MessageLog(message) for message in channel["messages"]]
def is_format(self):
+3 -3
View File
@@ -20,7 +20,7 @@ class ChannelsScanner(Scanner):
+ "arguments:\n"
+ COMMON_HELP_ARGS
+ "* <n> - top <n>, default is 10\n"
+ "* all - include bots\n"
+ "* all/everyone - include bots\n"
+ "Example: %chan 10 @user\n"
+ "```"
)
@@ -28,7 +28,7 @@ class ChannelsScanner(Scanner):
def __init__(self):
super().__init__(
has_digit_args=True,
valid_args=["all"],
valid_args=["all", "everyone"],
help=ChannelsScanner.help(),
intro_context="Channels",
)
@@ -39,7 +39,7 @@ class ChannelsScanner(Scanner):
for arg in args:
if arg.isdigit():
self.top = int(arg)
self.all_messages = "all" in args
self.all_messages = "all" in args or "everyone" in args
# Create mentions dict
self.messages = defaultdict(Counter)
return True
+16 -3
View File
@@ -19,22 +19,27 @@ class CompositionScanner(Scanner):
+ "%compo: Show composition statistics\n"
+ "arguments:\n"
+ COMMON_HELP_ARGS
+ "* all/everyone - include bots\n"
+ "Example: %compo #mychannel1 @user\n"
+ "```"
)
def __init__(self):
super().__init__(
valid_args=["all", "everyone"],
help=CompositionScanner.help(),
intro_context="Composition",
)
async def init(self, message: discord.Message, *args: str) -> bool:
self.compo = Composition()
self.all_messages = "all" in args or "everyone" in args
return True
def compute_message(self, channel: ChannelLogs, message: MessageLog):
ret = CompositionScanner.analyse_message(message, self.compo, self.raw_members)
ret = CompositionScanner.analyse_message(
message, self.compo, self.raw_members, all_messages=self.all_messages
)
return ret
def get_results(self, intro: str) -> List[str]:
@@ -44,11 +49,19 @@ class CompositionScanner(Scanner):
@staticmethod
def analyse_message(
message: MessageLog, compo: Composition, raw_members: List[int]
message: MessageLog,
compo: Composition,
raw_members: List[int],
*,
all_messages: bool,
) -> bool:
impacted = False
# If author is included in the selection (empty list is all)
if not message.bot and len(raw_members) == 0 or message.author in raw_members:
if (
(not message.bot or all_messages)
and len(raw_members) == 0
or message.author in raw_members
):
impacted = True
compo.total_characters += len(message.content)
+14 -3
View File
@@ -23,6 +23,7 @@ class EmotesScanner(Scanner):
+ "* all - list all common emojis in addition to this guild's\n"
+ "* members - show top member for each emojis\n"
+ "* sort:usage/reaction - other sorting methods\n"
+ "* everyone - include bots\n"
+ "Example: %emojis 10 all #mychannel1 #mychannel2 @user\n"
+ "```"
)
@@ -30,7 +31,7 @@ class EmotesScanner(Scanner):
def __init__(self):
super().__init__(
has_digit_args=True,
valid_args=["all", "members", "sort:usage", "sort:reaction"],
valid_args=["all", "members", "sort:usage", "sort:reaction", "everyone"],
help=EmotesScanner.help(),
intro_context="Emoji usage",
)
@@ -54,11 +55,16 @@ class EmotesScanner(Scanner):
self.sort = "usage"
elif "sort:reaction" in args:
self.sort = "reaction"
self.all_messages = "everyone" in args
return True
def compute_message(self, channel: ChannelLogs, message: MessageLog):
return EmotesScanner.analyse_message(
message, self.emotes, self.raw_members, all_emojis=self.all_emojis
message,
self.emotes,
self.raw_members,
all_emojis=self.all_emojis,
all_messages=self.all_messages,
)
def get_results(self, intro: str) -> List[str]:
@@ -107,10 +113,15 @@ class EmotesScanner(Scanner):
raw_members: List[int],
*,
all_emojis: bool,
all_messages: bool,
) -> bool:
impacted = False
# If author is included in the selection (empty list is all)
if not message.bot and len(raw_members) == 0 or message.author in raw_members:
if (
(not message.bot or all_messages)
and len(raw_members) == 0
or message.author in raw_members
):
impacted = True
# Find all emotes un the current message in the form "<:emoji:123456789>"
# Filter for known emotes
+16 -3
View File
@@ -19,22 +19,27 @@ class FrequencyScanner(Scanner):
+ "%freq: Show frequency-related statistics\n"
+ "arguments:\n"
+ COMMON_HELP_ARGS
+ "* all/everyone - include bots\n"
+ "Example: %freq #mychannel1 @user\n"
+ "```"
)
def __init__(self):
super().__init__(
valid_args=["all", "everyone"],
help=FrequencyScanner.help(),
intro_context="Frequency",
)
async def init(self, message: discord.Message, *args: str) -> bool:
self.freq = Frequency()
self.all_messages = "all" in args or "everyone" in args
return True
def compute_message(self, channel: ChannelLogs, message: MessageLog):
return FrequencyScanner.analyse_message(message, self.freq, self.raw_members)
return FrequencyScanner.analyse_message(
message, self.freq, self.raw_members, all_messages=self.all_messages
)
def get_results(self, intro: str) -> List[str]:
FrequencyScanner.compute_results(self.freq)
@@ -44,11 +49,19 @@ class FrequencyScanner(Scanner):
@staticmethod
def analyse_message(
message: MessageLog, freq: Frequency, raw_members: List[int]
message: MessageLog,
freq: Frequency,
raw_members: List[int],
*,
all_messages: bool
) -> bool:
impacted = False
# If author is included in the selection (empty list is all)
if len(raw_members) == 0 or message.author in raw_members:
if (
(not message.bot or all_messages)
and len(raw_members) == 0
or message.author in raw_members
):
impacted = True
freq.dates += [message.created_at]
return impacted
+17 -4
View File
@@ -19,12 +19,14 @@ class FullScanner(Scanner):
+ "%scan: Show full statistics\n"
+ "arguments:\n"
+ COMMON_HELP_ARGS
+ "* all/everyone - include bots\n"
+ "Example: %scan #mychannel1 @user\n"
+ "```"
)
def __init__(self):
super().__init__(
valid_args=["all", "everyone"],
help=FullScanner.help(),
intro_context="Full analysis",
)
@@ -34,14 +36,25 @@ class FullScanner(Scanner):
self.compo = Composition()
self.pres = Presence()
self.member_specific = len(self.members) > 0
self.all_messages = "all" in args or "everyone" in args
return True
def compute_message(self, channel: ChannelLogs, message: MessageLog):
FrequencyScanner.analyse_message(message, self.freq, self.raw_members)
CompositionScanner.analyse_message(message, self.compo, self.raw_members)
PresenceScanner.analyse_message(channel, message, self.pres, self.raw_members)
FrequencyScanner.analyse_message(
message, self.freq, self.raw_members, all_messages=self.all_messages
)
CompositionScanner.analyse_message(
message, self.compo, self.raw_members, all_messages=self.all_messages
)
PresenceScanner.analyse_message(
channel,
message,
self.pres,
self.raw_members,
all_messages=self.all_messages,
)
return (
not message.bot
(not message.bot or self.all_messages)
and len(self.raw_members) == 0
or message.author in self.raw_members
)
+14 -3
View File
@@ -29,6 +29,7 @@ class MentionsScanner(Scanner):
+ COMMON_HELP_ARGS
+ "* <n> - top <n> mentions, default is 10\n"
+ "* all - show role/channel/everyone/here mentions\n"
+ "* everyone - include bots mentions\n"
+ "Example: %mentions 10 #mychannel1 #mychannel2 @user\n"
+ "```"
)
@@ -36,7 +37,7 @@ class MentionsScanner(Scanner):
def __init__(self):
super().__init__(
has_digit_args=True,
valid_args=["all"],
valid_args=["all", "everyone"],
help=MentionsScanner.help(),
intro_context="Mention usage",
)
@@ -51,11 +52,16 @@ class MentionsScanner(Scanner):
self.all_mentions = "all" in args
# Create mentions dict
self.mentions = defaultdict(Counter)
self.all_messages = "everyone" in args
return True
def compute_message(self, channel: ChannelLogs, message: MessageLog):
return MentionsScanner.analyse_message(
message, self.mentions, self.raw_members, all_mentions=self.all_mentions
message,
self.mentions,
self.raw_members,
all_mentions=self.all_mentions,
all_messages=self.all_messages,
)
def get_results(self, intro: str) -> List[str]:
@@ -85,10 +91,15 @@ class MentionsScanner(Scanner):
raw_members: List[int],
*,
all_mentions: bool,
all_messages: bool,
) -> bool:
impacted = False
# If author is included in the selection (empty list is all)
if not message.bot and len(raw_members) == 0 or message.author in raw_members:
if (
(not message.bot or all_messages)
and len(raw_members) == 0
or message.author in raw_members
):
impacted = True
for member_id in message.mentions:
name = mention(member_id)
+3 -3
View File
@@ -20,7 +20,7 @@ class MessagesScanner(Scanner):
+ "arguments:\n"
+ COMMON_HELP_ARGS
+ "* <n> - top <n>, default is 10\n"
+ "* all - include bots\n"
+ "* all/everyone - include bots\n"
+ "Example: %msg 10 #channel\n"
+ "```"
)
@@ -28,7 +28,7 @@ class MessagesScanner(Scanner):
def __init__(self):
super().__init__(
has_digit_args=True,
valid_args=["all"],
valid_args=["all", "everyone"],
help=MessagesScanner.help(),
intro_context="Messages",
)
@@ -39,7 +39,7 @@ class MessagesScanner(Scanner):
for arg in args:
if arg.isdigit():
self.top = int(arg)
self.all_messages = "all" in args
self.all_messages = "all" in args or "everyone" in args
# Create mentions dict
self.messages = defaultdict(Counter)
return True
+15 -2
View File
@@ -18,12 +18,14 @@ class PresenceScanner(Scanner):
+ "%pres: Show presence statistics\n"
+ "arguments:\n"
+ COMMON_HELP_ARGS
+ "* all/everyone - include bots\n"
+ "Example: %pres #mychannel1 @user\n"
+ "```"
)
def __init__(self):
super().__init__(
valid_args=["all", "everyone"],
help=PresenceScanner.help(),
intro_context="Presence",
)
@@ -31,11 +33,16 @@ class PresenceScanner(Scanner):
async def init(self, message: discord.Message, *args: str) -> bool:
self.pres = Presence()
self.member_specific = len(self.members) > 0
self.all_messages = "all" in args or "everyone" in args
return True
def compute_message(self, channel: ChannelLogs, message: MessageLog):
return PresenceScanner.analyse_message(
channel, message, self.pres, self.raw_members
channel,
message,
self.pres,
self.raw_members,
all_messages=self.all_messages,
)
def get_results(self, intro: str) -> List[str]:
@@ -55,10 +62,16 @@ class PresenceScanner(Scanner):
message: MessageLog,
pres: Presence,
raw_members: List[int],
*,
all_messages: bool,
) -> bool:
impacted = False
# If author is included in the selection (empty list is all)
if not message.bot and len(raw_members) == 0 or message.author in raw_members:
if (
(not message.bot or all_messages)
and len(raw_members) == 0
or message.author in raw_members
):
impacted = True
pres.channel_usage[channel.id] += 1
for mention in message.mentions: