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