Change processing engine

This commit is contained in:
Nexus 2024-04-15 19:47:58 +01:00
parent 7f2e5e1d36
commit 2fb9fc77a2
Signed by: nex
GPG key ID: 0FA334385D0B689F

View file

@ -6,7 +6,7 @@ import io
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
from datetime import timedelta, datetime from datetime import timedelta, datetime
from discord.ext import commands from discord.ext import commands
from typing import Iterable, Annotated from typing import Callable, Iterable, Annotated
from conf import CONFIG from conf import CONFIG
@ -183,6 +183,38 @@ class QuoteQuota(commands.Cog):
file=file file=file
) )
def _metacounter(
self,
messages: list[discord.Message],
filter_func: Callable[[discord.Message], bool],
*,
now: datetime = None
) -> dict[str, float | int]:
now = now or discord.utils.utcnow().replace(minute=0, second=0, microsecond=0)
counts = {
"hour": 0,
"day": 0,
"week": 0,
"all_time": 0,
"per_minute": 0.0,
"per_hour": 0.0,
"per_day": 0.0,
}
for message in messages:
if filter_func(message):
counts["all_time"] += 1
if message.created_at > now - timedelta(hours=1):
counts["hour"] += 1
if message.created_at > now - timedelta(days=1):
counts["day"] += 1
if message.created_at > now - timedelta(days=7):
counts["week"] += 1
counts["per_minute"] = counts["hour"] / 60
counts["per_hour"] = counts["day"] / 24
counts["per_day"] = counts["week"] / 7
return counts
async def _process_trump_truths(self, messages: list[discord.Message]) -> dict[str, int]: async def _process_trump_truths(self, messages: list[discord.Message]) -> dict[str, int]:
""" """
Processes the given messages to count the number of posts by Donald Trump. Processes the given messages to count the number of posts by Donald Trump.
@ -201,23 +233,7 @@ class QuoteQuota(commands.Cog):
return True return True
return False return False
now = discord.utils.utcnow().replace(minute=0, second=0, microsecond=0) return self._metacounter(messages, is_truth)
counts = {
"hour": 0,
"day": 0,
"week": 0,
"all_time": 0
}
for message in messages:
if is_truth(message):
counts["all_time"] += 1
if message.created_at > now - timedelta(hours=1):
counts["hour"] += 1
if message.created_at > now - timedelta(days=1):
counts["day"] += 1
if message.created_at > now - timedelta(days=7):
counts["week"] += 1
return counts
async def _process_tate_truths(self, messages: list[discord.Message]) -> dict[str, int]: async def _process_tate_truths(self, messages: list[discord.Message]) -> dict[str, int]:
""" """
@ -234,30 +250,7 @@ class QuoteQuota(commands.Cog):
return True return True
return False return False
now = discord.utils.utcnow().replace(minute=0, second=0, microsecond=0) return self._metacounter(messages, is_truth)
counts = {
"hour": 0,
"day": 0,
"week": 0,
"all_time": 0,
"per_minute": 0.0,
"per_hour": 0.0,
"per_day": 0.0,
}
for message in messages:
if is_truth(message):
counts["all_time"] += 1
if message.created_at > now - timedelta(hours=1):
counts["hour"] += 1
if message.created_at > now - timedelta(days=1):
counts["day"] += 1
if message.created_at > now - timedelta(days=7):
counts["week"] += 1
counts["per_minute"] = counts["hour"] / 60
counts["per_hour"] = counts["day"] / 24
counts["per_day"] = counts["week"] / 7
return counts
async def _process_all_messages(self, channel: discord.TextChannel) -> discord.Embed: async def _process_all_messages(self, channel: discord.TextChannel) -> discord.Embed:
""" """