From 04a8f1d186be04d5e72e0ca2464ae7ea4db4916c Mon Sep 17 00:00:00 2001 From: nex Date: Tue, 18 Apr 2023 17:42:01 +0100 Subject: [PATCH] Manually cache deleted messages --- cogs/mod.py | 32 +++++++++++++++++++++++++++++++- utils/client.py | 1 + 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/cogs/mod.py b/cogs/mod.py index f06edae..7781c4a 100644 --- a/cogs/mod.py +++ b/cogs/mod.py @@ -3,11 +3,41 @@ from datetime import datetime import discord from discord.ext import commands from utils import Student, get_or_none, BannedStudentID, owner_or_admin, JimmyBans +from typing import Sized + + +class LimitedList(list): + """FIFO Limited list""" + def __init__(self, iterable: Sized = None, size: int = 5000): + if iterable: + assert len(iterable) <= size, "Initial iterable too big." + super().__init__(iterable or []) + self._max_size = size + + def append(self, __object) -> None: + if len(self) + 1 >= self._max_size: + self.pop(0) + super().append(__object) + + def __add__(self, other): + if len(other) > self._max_size: + raise ValueError("Other is too large") + elif len(other) == self._max_size: + self.clear() + super().__add__(other) + else: + for item in other: + self.append(item) class Mod(commands.Cog): def __init__(self, bot): self.bot = bot + self.cache = LimitedList() + + @commands.Cog.listener() + async def on_message_delete(self, message: discord.Message): + self.cache.append(message) @commands.user_command(name="Ban Account's B Number") @discord.default_permissions(ban_members=True) @@ -97,7 +127,7 @@ class Mod(commands.Cog): @commands.command() async def undelete(self, ctx: commands.Context, user: discord.User, *, query: str = None): """Searches through the message cache to see if there's any deleted messages.""" - for message in self.bot.cached_messages: + for message in self.cache: message: discord.Message if message.author == user: query_ = query.lower() if query else None diff --git a/utils/client.py b/utils/client.py index 2ed3beb..8fe971d 100644 --- a/utils/client.py +++ b/utils/client.py @@ -28,6 +28,7 @@ class Bot(commands.Bot): debug_guilds=guilds, allowed_mentions=discord.AllowedMentions.none(), intents=intents, + max_messages=100 ) self.loop.run_until_complete(registry.create_all()) self.training_lock = Lock()