factorized help and triple-quote multi-line
This commit is contained in:
@@ -11,4 +11,4 @@ from .reactions_scanner import ReactionsScanner
|
||||
from .first_scanner import FirstScanner
|
||||
from .last_scanner import LastScanner
|
||||
from .random_scanner import RandomScanner
|
||||
from .words_scanner import WordsScanner
|
||||
from .words_scanner import WordsScanner
|
||||
|
||||
@@ -8,21 +8,17 @@ import discord
|
||||
from logs import ChannelLogs, MessageLog
|
||||
from .scanner import Scanner
|
||||
from data_types import Counter
|
||||
from utils import COMMON_HELP_ARGS, mention, channel_mention
|
||||
from utils import generate_help, mention, channel_mention
|
||||
|
||||
|
||||
class ChannelsScanner(Scanner):
|
||||
@staticmethod
|
||||
def help() -> str:
|
||||
return (
|
||||
"```\n"
|
||||
+ "%chan: Rank channels by their messages\n"
|
||||
+ "arguments:\n"
|
||||
+ COMMON_HELP_ARGS
|
||||
+ "* <n> - top <n>, default is 10\n"
|
||||
+ "* all/everyone - include bots\n"
|
||||
+ "Example: %chan 10 @user\n"
|
||||
+ "```"
|
||||
return generate_help(
|
||||
"chan",
|
||||
"Rank channels by their messages",
|
||||
args=["<n> - top <n>, default is 10", "all/everyone - include bots"],
|
||||
example="5 @user",
|
||||
)
|
||||
|
||||
def __init__(self):
|
||||
|
||||
@@ -8,21 +8,13 @@ import discord
|
||||
from .scanner import Scanner
|
||||
from data_types import Composition
|
||||
from logs import ChannelLogs, MessageLog
|
||||
from utils import emojis, COMMON_HELP_ARGS
|
||||
from utils import emojis, generate_help
|
||||
|
||||
|
||||
class CompositionScanner(Scanner):
|
||||
@staticmethod
|
||||
def help() -> str:
|
||||
return (
|
||||
"```\n"
|
||||
+ "%compo: Show composition statistics\n"
|
||||
+ "arguments:\n"
|
||||
+ COMMON_HELP_ARGS
|
||||
+ "* all/everyone - include bots\n"
|
||||
+ "Example: %compo #mychannel1 @user\n"
|
||||
+ "```"
|
||||
)
|
||||
return generate_help("compo", "Show composition statistics")
|
||||
|
||||
def __init__(self):
|
||||
super().__init__(
|
||||
|
||||
@@ -8,24 +8,23 @@ import discord
|
||||
from logs import ChannelLogs, MessageLog
|
||||
from data_types import Emote, get_emote_dict
|
||||
from .scanner import Scanner
|
||||
from utils import emojis, COMMON_HELP_ARGS, plural, precise
|
||||
from utils import emojis, generate_help, plural, precise
|
||||
|
||||
|
||||
class EmotesScanner(Scanner):
|
||||
@staticmethod
|
||||
def help() -> str:
|
||||
return (
|
||||
"```\n"
|
||||
+ "%emojis: Rank emojis by their usage\n"
|
||||
+ "arguments:\n"
|
||||
+ COMMON_HELP_ARGS
|
||||
+ "* <n> - top <n> emojis, default is 20\n"
|
||||
+ "* 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"
|
||||
+ "```"
|
||||
return generate_help(
|
||||
"emojis",
|
||||
"Rank emojis by their usage",
|
||||
args=[
|
||||
"<n> - top <n> emojis, default is 20",
|
||||
"all - list all common emojis in addition to this guild's",
|
||||
"members - show top member for each emojis",
|
||||
"sort:usage/reaction - other sorting methods",
|
||||
"everyone - include bots",
|
||||
],
|
||||
example="10 all #mychannel1 #mychannel2 @user",
|
||||
)
|
||||
|
||||
def __init__(self):
|
||||
|
||||
@@ -3,14 +3,13 @@ from typing import List
|
||||
# Custom libs
|
||||
|
||||
from .history_scanner import HistoryScanner
|
||||
from utils import generate_help
|
||||
|
||||
|
||||
class FirstScanner(HistoryScanner):
|
||||
@staticmethod
|
||||
def help() -> str:
|
||||
return super(FirstScanner, FirstScanner).help(
|
||||
cmd="first", text="Read first message"
|
||||
)
|
||||
return generate_help("first", "Read first message")
|
||||
|
||||
def __init__(self):
|
||||
super().__init__(help=FirstScanner.help())
|
||||
|
||||
@@ -8,21 +8,13 @@ import discord
|
||||
from .scanner import Scanner
|
||||
from data_types import Frequency
|
||||
from logs import ChannelLogs, MessageLog
|
||||
from utils import COMMON_HELP_ARGS
|
||||
from utils import generate_help
|
||||
|
||||
|
||||
class FrequencyScanner(Scanner):
|
||||
@staticmethod
|
||||
def help() -> str:
|
||||
return (
|
||||
"```\n"
|
||||
+ "%freq: Show frequency-related statistics\n"
|
||||
+ "arguments:\n"
|
||||
+ COMMON_HELP_ARGS
|
||||
+ "* all/everyone - include bots\n"
|
||||
+ "Example: %freq #mychannel1 @user\n"
|
||||
+ "```"
|
||||
)
|
||||
return generate_help("freq", "Show frequency-related statistics")
|
||||
|
||||
def __init__(self):
|
||||
super().__init__(
|
||||
@@ -55,7 +47,7 @@ class FrequencyScanner(Scanner):
|
||||
freq: Frequency,
|
||||
raw_members: List[int],
|
||||
*,
|
||||
all_messages: bool
|
||||
all_messages: bool,
|
||||
) -> bool:
|
||||
impacted = False
|
||||
# If author is included in the selection (empty list is all)
|
||||
|
||||
@@ -8,21 +8,13 @@ from .scanner import Scanner
|
||||
from . import FrequencyScanner, CompositionScanner, PresenceScanner
|
||||
from data_types import Frequency, Composition, Presence
|
||||
from logs import ChannelLogs, MessageLog
|
||||
from utils import COMMON_HELP_ARGS
|
||||
from utils import generate_help
|
||||
|
||||
|
||||
class FullScanner(Scanner):
|
||||
@staticmethod
|
||||
def help() -> str:
|
||||
return (
|
||||
"```\n"
|
||||
+ "%scan: Show full statistics\n"
|
||||
+ "arguments:\n"
|
||||
+ COMMON_HELP_ARGS
|
||||
+ "* all/everyone - include bots\n"
|
||||
+ "Example: %scan #mychannel1 @user\n"
|
||||
+ "```"
|
||||
)
|
||||
return generate_help("scan", "Show full statistics")
|
||||
|
||||
def __init__(self):
|
||||
super().__init__(
|
||||
|
||||
@@ -7,22 +7,9 @@ import discord
|
||||
from .scanner import Scanner
|
||||
from data_types import History
|
||||
from logs import ChannelLogs, MessageLog
|
||||
from utils import COMMON_HELP_ARGS
|
||||
|
||||
|
||||
class HistoryScanner(Scanner, ABC):
|
||||
@staticmethod
|
||||
def help(*, cmd: str, text: str) -> str:
|
||||
return (
|
||||
"```\n"
|
||||
+ f"%{cmd}: {text}\n"
|
||||
+ "arguments:\n"
|
||||
+ COMMON_HELP_ARGS
|
||||
+ "* all/everyone - include bots\n"
|
||||
+ "Example: %{cmd} #mychannel1 @user\n"
|
||||
+ "```"
|
||||
)
|
||||
|
||||
def __init__(self, *, help: str):
|
||||
super().__init__(
|
||||
has_digit_args=True,
|
||||
|
||||
@@ -3,14 +3,13 @@ from typing import List
|
||||
# Custom libs
|
||||
|
||||
from .history_scanner import HistoryScanner
|
||||
from utils import generate_help
|
||||
|
||||
|
||||
class LastScanner(HistoryScanner):
|
||||
@staticmethod
|
||||
def help() -> str:
|
||||
return super(LastScanner, LastScanner).help(
|
||||
cmd="last", text="Read last message"
|
||||
)
|
||||
return generate_help("last", "Read last message")
|
||||
|
||||
def __init__(self):
|
||||
super().__init__(help=LastScanner.help())
|
||||
|
||||
@@ -8,22 +8,18 @@ import discord
|
||||
from logs import ChannelLogs, MessageLog
|
||||
from .scanner import Scanner
|
||||
from data_types import Counter
|
||||
from utils import COMMON_HELP_ARGS, plural, precise, mention, alt_mention
|
||||
from utils import generate_help, plural, precise, mention, alt_mention
|
||||
|
||||
|
||||
class MentionedScanner(Scanner):
|
||||
@staticmethod
|
||||
def help() -> str:
|
||||
return (
|
||||
"```\n"
|
||||
+ "%mentioned: Rank specific user's mentions by their usage\n"
|
||||
+ "arguments:\n"
|
||||
+ "* @member/me - (required) one or more member\n"
|
||||
+ "\n".join(COMMON_HELP_ARGS.split("\n")[1:])
|
||||
+ "* <n> - top <n> mentions, default is 10\n"
|
||||
+ "* all - include bots mentions\n"
|
||||
+ "Example: %mentioned 10 @user\n"
|
||||
+ "```"
|
||||
return generate_help(
|
||||
"mentioned",
|
||||
"Rank specific user's mentions by their usage",
|
||||
args=["<n> - top <n>, default is 10", "all/everyone - include bots"],
|
||||
example="5 @user",
|
||||
replace_args=[" @member/me - (required) one or more member"],
|
||||
)
|
||||
|
||||
def __init__(self):
|
||||
@@ -45,7 +41,7 @@ class MentionedScanner(Scanner):
|
||||
"You need to mention at least one member or use `me`", reference=message
|
||||
)
|
||||
return False
|
||||
self.all_mentions = "all" in args
|
||||
self.all_mentions = "all" in args or "everyone" in args
|
||||
# Create mentions dict
|
||||
self.mentions = defaultdict(Counter)
|
||||
return True
|
||||
|
||||
@@ -9,7 +9,7 @@ from logs import ChannelLogs, MessageLog
|
||||
from .scanner import Scanner
|
||||
from data_types import Counter
|
||||
from utils import (
|
||||
COMMON_HELP_ARGS,
|
||||
generate_help,
|
||||
plural,
|
||||
precise,
|
||||
mention,
|
||||
@@ -22,16 +22,15 @@ from utils import (
|
||||
class MentionsScanner(Scanner):
|
||||
@staticmethod
|
||||
def help() -> str:
|
||||
return (
|
||||
"```\n"
|
||||
+ "%mentions: Rank mentions by their usage\n"
|
||||
+ "arguments:\n"
|
||||
+ 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"
|
||||
+ "```"
|
||||
return generate_help(
|
||||
"mentions",
|
||||
"Rank mentions by their usage",
|
||||
args=[
|
||||
"<n> - top <n>, default is 10",
|
||||
"all - show role/channel/everyone/here mentions",
|
||||
"everyone - include bots mentions",
|
||||
],
|
||||
example="10 #mychannel1 #mychannel2 @user",
|
||||
)
|
||||
|
||||
def __init__(self):
|
||||
|
||||
@@ -8,21 +8,17 @@ import discord
|
||||
from logs import ChannelLogs, MessageLog
|
||||
from .scanner import Scanner
|
||||
from data_types import Counter
|
||||
from utils import COMMON_HELP_ARGS, mention, channel_mention
|
||||
from utils import generate_help, mention, channel_mention
|
||||
|
||||
|
||||
class MessagesScanner(Scanner):
|
||||
@staticmethod
|
||||
def help() -> str:
|
||||
return (
|
||||
"```\n"
|
||||
+ "%msg: Rank users by their messages\n"
|
||||
+ "arguments:\n"
|
||||
+ COMMON_HELP_ARGS
|
||||
+ "* <n> - top <n>, default is 10\n"
|
||||
+ "* all/everyone - include bots\n"
|
||||
+ "Example: %msg 10 #channel\n"
|
||||
+ "```"
|
||||
return generate_help(
|
||||
"msg",
|
||||
"Rank users by their messages",
|
||||
args=["<n> - top <n>, default is 10", "all/everyone - include bots"],
|
||||
example="10 #channel",
|
||||
)
|
||||
|
||||
def __init__(self):
|
||||
|
||||
@@ -7,21 +7,13 @@ import discord
|
||||
from .scanner import Scanner
|
||||
from data_types import Presence
|
||||
from logs import ChannelLogs, MessageLog
|
||||
from utils import COMMON_HELP_ARGS
|
||||
from utils import generate_help
|
||||
|
||||
|
||||
class PresenceScanner(Scanner):
|
||||
@staticmethod
|
||||
def help() -> str:
|
||||
return (
|
||||
"```\n"
|
||||
+ "%pres: Show presence statistics\n"
|
||||
+ "arguments:\n"
|
||||
+ COMMON_HELP_ARGS
|
||||
+ "* all/everyone - include bots\n"
|
||||
+ "Example: %pres #mychannel1 @user\n"
|
||||
+ "```"
|
||||
)
|
||||
return generate_help("pres", "Show presence statistics")
|
||||
|
||||
def __init__(self):
|
||||
super().__init__(
|
||||
|
||||
@@ -3,14 +3,13 @@ from typing import List
|
||||
# Custom libs
|
||||
|
||||
from .history_scanner import HistoryScanner
|
||||
from utils import generate_help
|
||||
|
||||
|
||||
class RandomScanner(HistoryScanner):
|
||||
@staticmethod
|
||||
def help() -> str:
|
||||
return super(RandomScanner, RandomScanner).help(
|
||||
cmd="rand", text="Read a random message"
|
||||
)
|
||||
return generate_help("rand", "Read a random message")
|
||||
|
||||
def __init__(self):
|
||||
super().__init__(help=RandomScanner.help())
|
||||
|
||||
@@ -8,20 +8,17 @@ import discord
|
||||
from logs import ChannelLogs, MessageLog
|
||||
from .scanner import Scanner
|
||||
from data_types import Counter
|
||||
from utils import COMMON_HELP_ARGS, mention, channel_mention
|
||||
from utils import generate_help, mention, channel_mention
|
||||
|
||||
|
||||
class ReactionsScanner(Scanner):
|
||||
@staticmethod
|
||||
def help() -> str:
|
||||
return (
|
||||
"```\n"
|
||||
+ "%react: Rank users by their reactions\n"
|
||||
+ "arguments:\n"
|
||||
+ COMMON_HELP_ARGS
|
||||
+ "* <n> - top <n>, default is 10\n"
|
||||
+ "Example: %react 10 #channel\n"
|
||||
+ "```"
|
||||
return generate_help(
|
||||
"react",
|
||||
"Rank users by their reactions",
|
||||
args=["<n> - top <n>, default is 10"],
|
||||
example="10 #channel",
|
||||
)
|
||||
|
||||
def __init__(self):
|
||||
|
||||
@@ -9,7 +9,7 @@ from logs import ChannelLogs, MessageLog
|
||||
from .scanner import Scanner
|
||||
from data_types import Counter
|
||||
from utils import (
|
||||
COMMON_HELP_ARGS,
|
||||
generate_help,
|
||||
plural,
|
||||
precise,
|
||||
)
|
||||
@@ -18,16 +18,15 @@ from utils import (
|
||||
class WordsScanner(Scanner):
|
||||
@staticmethod
|
||||
def help() -> str:
|
||||
return (
|
||||
"```\n"
|
||||
+ "%words: (BETA) Rank words by their usage\n"
|
||||
+ "arguments:\n"
|
||||
+ COMMON_HELP_ARGS
|
||||
+ "* <n> - words containings <n> or more letters, default is 3\n"
|
||||
+ "* <n2> - top <n2> words, default is 10\n"
|
||||
+ "* everyone - include bots\n"
|
||||
+ "Example: %words 5 10 #mychannel1 #mychannel2 @user\n"
|
||||
+ "```"
|
||||
return generate_help(
|
||||
"words",
|
||||
"(BETA) Rank words by their usage",
|
||||
args=[
|
||||
"<n> - words containings <n> or more letters, default is 3",
|
||||
"<n2> - top <n2> words, default is 10",
|
||||
"all/everyone - include bots",
|
||||
],
|
||||
example="5 10 #mychannel1 #mychannel2 @user",
|
||||
)
|
||||
|
||||
def __init__(self):
|
||||
|
||||
+35
-38
@@ -3,45 +3,42 @@ import discord
|
||||
from logs import GuildLogs
|
||||
|
||||
|
||||
HELP = (
|
||||
"```\n"
|
||||
+ "%gdpr: Displays GDPR information\n"
|
||||
+ "arguments:\n"
|
||||
+ "* agree - agree to GDPR\n"
|
||||
+ "* revoke - remove this server's data\n"
|
||||
+ "```"
|
||||
)
|
||||
HELP = """```
|
||||
%gdpr: Displays GDPR information
|
||||
arguments:
|
||||
* agree - agree to GDPR
|
||||
* revoke - remove this server's data
|
||||
```"""
|
||||
|
||||
TEXT = (
|
||||
""
|
||||
+ "__**About Analyst-bot's data usage**__\n"
|
||||
+ "**TL;DR**\n"
|
||||
+ "Analyst-bot collects text message information. It does not share collected data with any third-party and data is retained 12 months or until the bot is leaving the guild/server.\n"
|
||||
+ "**Data collection**\n"
|
||||
+ "Analyst-bot collects a Discord guild/server's history when asked to.\n"
|
||||
+ "This includes:\n"
|
||||
+ "- Visible text channel names\n"
|
||||
+ "- Visible text messages: date and time of creation and edition, author, content, reactions and other available metadata (pinned, tts, etc.)\n"
|
||||
+ "This does __not__ includes:\n"
|
||||
+ "- Voice channels and not visible channels\n"
|
||||
+ "- Not visible text messages\n"
|
||||
+ "- Visible text messages' embedded content, images and other attachments\n"
|
||||
+ "**Data processing**\n"
|
||||
+ "Any data collected is only processed in order to produce a one-time report sent to the user immediately. No temporary data are retained.\n"
|
||||
+ "**Data storage and retain policy**\n"
|
||||
+ "Analyst-bot stores the collected data in files that are accessible by the software and its administrator only.\n"
|
||||
+ "Any collected data are retained maximum 12 months until deletion or when the bot is leaving a guild/server.\n"
|
||||
+ "**Data sharing**\n"
|
||||
+ "Analyst-bot does not share the data collected with any third-party.\n"
|
||||
+ "**Right to retract**\n"
|
||||
+ "If you want to have your data removed, you can use the `%gdpr revoke` command or remove this bot from your guild/server.\n"
|
||||
+ "**Terms agreement**\n"
|
||||
+ "By agreeing to these terms, you ensure having the legal age if you are in a country that does have one and you also ensure having the consent of every member involved.\n"
|
||||
+ "\n"
|
||||
+ "*If you want more information, please contact the creator of this bot: <https://github.com/Klemek/discord-analyst>.*\n"
|
||||
+ "\n"
|
||||
+ "Type `%gdpr agree` to agree to these terms, `%gdpr revoke` to remove this guild/server's collected data or `%gdpr` to see this message again."
|
||||
)
|
||||
TEXT = """
|
||||
__**About Analyst-bot's data usage**__
|
||||
**TL;DR**
|
||||
Analyst-bot collects text message information. It does not share collected data with any third-party and data is retained 18 months or until the bot is leaving the guild/server.
|
||||
**Data collection**
|
||||
Analyst-bot collects a Discord guild/server's history when asked to.
|
||||
This includes:
|
||||
- Visible text channel names
|
||||
- Visible text messages: date and time of creation and edition, author, content, reactions and other available metadata (pinned, tts, etc.)
|
||||
This does __not__ includes:
|
||||
- Voice channels and not visible channels
|
||||
- Not visible text messages
|
||||
- Visible text messages' embedded content, images and other attachments
|
||||
**Data processing**
|
||||
Any data collected is only processed in order to produce a one-time report sent to the user immediately. No temporary data are retained.
|
||||
**Data storage and retain policy**
|
||||
Analyst-bot stores the collected data in files that are accessible by the software and its administrator only.
|
||||
Any collected data are retained maximum 18 months until deletion or when the bot is leaving a guild/server.
|
||||
**Data sharing**
|
||||
Analyst-bot does not share the data collected with any third-party.
|
||||
**Right to retract**
|
||||
If you want to have your data removed, you can use the `%gdpr revoke` command or remove this bot from your guild/server.
|
||||
**Terms agreement**
|
||||
By agreeing to these terms, you ensure having the legal age if you are in a country that does have one and you also ensure having the consent of every member involved.
|
||||
|
||||
*If you want more information, please contact the creator of this bot: <https://github.com/Klemek/discord-analyst>.*
|
||||
|
||||
Type `%gdpr agree` to agree to these terms, `%gdpr revoke` to remove this guild/server's collected data or `%gdpr` to see this message again.
|
||||
"""
|
||||
|
||||
AGREE_TEXT = "Thanks for agreeing for these terms, you can now run analysis on this guild/server."
|
||||
|
||||
|
||||
+25
-7
@@ -7,13 +7,31 @@ from datetime import datetime
|
||||
|
||||
# OTHER
|
||||
|
||||
COMMON_HELP_ARGS = (
|
||||
""
|
||||
+ "* @member/me - filter for one or more member\n"
|
||||
+ "* #channel/here - filter for one or more channel\n"
|
||||
+ "* fast - only read cache\n"
|
||||
+ "* fresh - does not read cache (long)\n"
|
||||
)
|
||||
COMMON_HELP_ARGS = [
|
||||
"@member/me - filter for one or more member",
|
||||
"#channel/here - filter for one or more channel",
|
||||
"fast - only read cache",
|
||||
"fresh - does not read cache (long)",
|
||||
]
|
||||
|
||||
|
||||
def generate_help(
|
||||
cmd: str,
|
||||
info: str,
|
||||
*,
|
||||
args=["all/everyone - include bots"],
|
||||
example="#mychannel1 @user",
|
||||
replace_args=[],
|
||||
):
|
||||
arg_list = "* " + "\n* ".join(
|
||||
replace_args + COMMON_HELP_ARGS[len(replace_args) :] + args
|
||||
)
|
||||
return f"""```
|
||||
%{cmd}: {info}
|
||||
arguments:
|
||||
{arg_list}
|
||||
Example: %{cmd} {example}
|
||||
```"""
|
||||
|
||||
|
||||
def delta(t0: datetime):
|
||||
|
||||
Reference in New Issue
Block a user