From 5a3e7cc2b17ba3d2f7568996974083cf5397eaae Mon Sep 17 00:00:00 2001 From: klemek Date: Mon, 11 Jan 2021 12:20:19 +0100 Subject: [PATCH] template for new scanners --- src/data_types/__init__.py | 2 ++ src/data_types/composition.py | 9 +++++ src/data_types/other.py | 9 +++++ src/main.py | 27 +++++++++++---- src/scanners/__init__.py | 2 ++ src/scanners/composition_scanner.py | 54 +++++++++++++++++++++++++++++ src/scanners/other_scanner.py | 54 +++++++++++++++++++++++++++++ 7 files changed, 151 insertions(+), 6 deletions(-) create mode 100644 src/data_types/composition.py create mode 100644 src/data_types/other.py diff --git a/src/data_types/__init__.py b/src/data_types/__init__.py index fc4681f..f34a200 100644 --- a/src/data_types/__init__.py +++ b/src/data_types/__init__.py @@ -1,2 +1,4 @@ from .emote import Emote from .frequency import Frequency +from .composition import Composition +from .other import Other diff --git a/src/data_types/composition.py b/src/data_types/composition.py new file mode 100644 index 0000000..6bd0805 --- /dev/null +++ b/src/data_types/composition.py @@ -0,0 +1,9 @@ +from typing import List + + +class Composition: + def __init__(self): + pass # TODO + + def to_string(self) -> List[str]: + return [] # TODO diff --git a/src/data_types/other.py b/src/data_types/other.py new file mode 100644 index 0000000..a7dd56c --- /dev/null +++ b/src/data_types/other.py @@ -0,0 +1,9 @@ +from typing import List + + +class Other: + def __init__(self): + pass # TODO + + def to_string(self) -> List[str]: + return [] # TODO diff --git a/src/main.py b/src/main.py index ae80d49..f4c58e1 100644 --- a/src/main.py +++ b/src/main.py @@ -2,7 +2,7 @@ from miniscord import Bot import logging from utils import emojis -from scanners import EmotesScanner, FrequencyScanner +from scanners import EmotesScanner, FrequencyScanner, CompositionScanner, OtherScanner logging.basicConfig( format="[%(asctime)s][%(levelname)s][%(module)s] %(message)s", level=logging.INFO @@ -15,18 +15,33 @@ bot = Bot( "1.6(wip)", alias="%", ) + bot.log_calls = True bot.client.bot = bot # TODO place in miniscord + bot.register_command( - "freq(ency)?", - lambda *args: FrequencyScanner().compute(*args), - "freq: Frequency analysis", - FrequencyScanner.help(), + "other", + lambda *args: OtherScanner().compute(*args), + "other: other data analysis", + OtherScanner.help(), ) bot.register_command( "emotes", lambda *args: EmotesScanner().compute(*args), - "emotes: Emotes analysis", + "emotes: emotes analysis", EmotesScanner.help(), ) +bot.register_command( + "comp(osition)?", + lambda *args: CompositionScanner().compute(*args), + "comp: composition analysis", + CompositionScanner.help(), +) +bot.register_command( + "freq(ency)?", + lambda *args: FrequencyScanner().compute(*args), + "freq: frequency analysis", + FrequencyScanner.help(), +) + bot.start() diff --git a/src/scanners/__init__.py b/src/scanners/__init__.py index 4670fbc..eaf2f17 100644 --- a/src/scanners/__init__.py +++ b/src/scanners/__init__.py @@ -1,2 +1,4 @@ from .emotes_scanner import EmotesScanner from .frequency_scanner import FrequencyScanner +from .composition_scanner import CompositionScanner +from .other_scanner import OtherScanner diff --git a/src/scanners/composition_scanner.py b/src/scanners/composition_scanner.py index e69de29..f3242b9 100644 --- a/src/scanners/composition_scanner.py +++ b/src/scanners/composition_scanner.py @@ -0,0 +1,54 @@ +from typing import List +import discord + + +# Custom libs + +from .scanner import Scanner +from data_types import Composition +from logs import ChannelLogs, MessageLog + + +class CompositionScanner(Scanner): + @staticmethod + def help() -> str: + return "```\n" + +"%comp : Show composition statistics\n" + +"arguments:\n" + +"* @member : filter for one or more member\n" + +"* #channel : filter for one or more channel\n" + +"Example: %comp #mychannel1 @user\n" + +"```" + + def __init__(self): + super().__init__( + help=CompositionScanner.help(), + intro_context="Composition", + ) + + async def init(self, message: discord.Message, *args: str) -> bool: + self.comp = Composition() + return True + + def compute_message(self, channel: ChannelLogs, message: MessageLog): + return Composition.analyse_message(message, self.comp, self.raw_members) + + def get_results(self, intro: str) -> List[str]: + Composition.compute_results(self.comp) + res = [intro] + res += self.comp.to_string() + return res + + @staticmethod + def analyse_message( + message: MessageLog, comp: Composition, raw_members: List[int] + ) -> 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: + pass # TODO + return impacted + + @staticmethod + def compute_results(comp: Composition): + pass # TODO diff --git a/src/scanners/other_scanner.py b/src/scanners/other_scanner.py index e69de29..f8253d0 100644 --- a/src/scanners/other_scanner.py +++ b/src/scanners/other_scanner.py @@ -0,0 +1,54 @@ +from typing import List +import discord + + +# Custom libs + +from .scanner import Scanner +from data_types import Other +from logs import ChannelLogs, MessageLog + + +class OtherScanner(Scanner): + @staticmethod + def help() -> str: + return "```\n" + +"%other : Show other statistics\n" + +"arguments:\n" + +"* @member : filter for one or more member\n" + +"* #channel : filter for one or more channel\n" + +"Example: %other #mychannel1 @user\n" + +"```" + + def __init__(self): + super().__init__( + help=OtherScanner.help(), + intro_context="Other data", + ) + + async def init(self, message: discord.Message, *args: str) -> bool: + self.other = Other() + return True + + def compute_message(self, channel: ChannelLogs, message: MessageLog): + return OtherScanner.analyse_message(message, self.other, self.raw_members) + + def get_results(self, intro: str) -> List[str]: + OtherScanner.compute_results(self.other) + res = [intro] + res += self.other.to_string() + return res + + @staticmethod + def analyse_message( + message: MessageLog, other: Other, raw_members: List[int] + ) -> 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: + pass # TODO + return impacted + + @staticmethod + def compute_results(other: Other): + pass # TODO