all/everyone to include bots on scans
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user