Files
discord-analyst/src/scanners/full_scanner.py
T
2021-04-22 14:58:08 +02:00

72 lines
2.3 KiB
Python

from typing import List
import discord
# Custom libs
from .scanner import Scanner
from .composition_scanner import CompositionScanner
from .frequency_scanner import FrequencyScanner
from .presence_scanner import PresenceScanner
from data_types import Frequency, Composition, Presence
from logs import ChannelLogs, MessageLog
from utils import generate_help
class FullScanner(Scanner):
@staticmethod
def help() -> str:
return generate_help("scan", "Show full statistics")
def __init__(self):
super().__init__(
valid_args=["all", "everyone"],
help=FullScanner.help(),
intro_context="Full analysis",
)
async def init(self, message: discord.Message, *args: str) -> bool:
self.freq = Frequency()
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, 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 or self.all_messages)
and len(self.raw_members) == 0
or message.author in self.raw_members
)
def get_results(self, intro: str) -> List[str]:
FrequencyScanner.compute_results(self.freq)
res = [intro]
res += ["__Frequency__:"]
res += self.freq.to_string(member_specific=self.member_specific)
res += ["__Composition__:"]
res += self.compo.to_string(self.msg_count)
res += ["__Presence__:"]
res += self.pres.to_string(
self.msg_count,
self.total_msg,
show_top_channel=len(self.channels) > 1,
member_specific=self.member_specific,
chan_count=len(self.channels) if not self.full else None,
)
return res