From f701cc96557e8d9811de5f73fbf7c3276b9b933b Mon Sep 17 00:00:00 2001 From: Zevaryx Date: Fri, 6 Aug 2021 00:16:51 -0600 Subject: [PATCH] Close #81, wrote custom caching in on_member_update to handle duplicates --- jarvis/__init__.py | 12 ++++++++---- jarvis/cogs/modlog/member.py | 11 +++++++++-- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/jarvis/__init__.py b/jarvis/__init__.py index 2982e9a..c4b077a 100644 --- a/jarvis/__init__.py +++ b/jarvis/__init__.py @@ -1,5 +1,6 @@ import asyncio from pathlib import Path +from typing import Union from discord import Intents from discord.ext import commands @@ -19,15 +20,18 @@ intents = Intents.default() intents.members = True restart_ctx = None +jconfig = get_config() jarvis = commands.Bot( - command_prefix=utils.get_prefix, intents=intents, help_command=None + command_prefix=utils.get_prefix, + intents=intents, + help_command=None, + max_messages=jconfig.max_messages, ) + slash = SlashCommand(jarvis, sync_commands=True, sync_on_cog_reload=True) jarvis_self = Process() -__version__ = "1.10.2" - -jconfig = get_config() +__version__ = "1.10.3" @jarvis.event diff --git a/jarvis/cogs/modlog/member.py b/jarvis/cogs/modlog/member.py index 11665ad..49db62d 100644 --- a/jarvis/cogs/modlog/member.py +++ b/jarvis/cogs/modlog/member.py @@ -15,6 +15,7 @@ from jarvis.utils.field import Field class ModlogMemberCog(commands.Cog): def __init__(self, bot): self.bot = bot + self.cache = [] @commands.Cog.listener() async def on_member_ban(self, guild: discord.Guild, user: discord.User): @@ -89,7 +90,7 @@ class ModlogMemberCog(commands.Cog): await channel.send(embed=embed) @commands.Cog.listener() - async def on_member_remove(self, user: discord.User): + async def on_member_remove(self, user: discord.Member): modlog = Setting.objects(guild=user.guild.id, setting="modlog").first() if modlog: channel = user.guild.get_channel(modlog.value) @@ -243,8 +244,13 @@ class ModlogMemberCog(commands.Cog): @commands.Cog.listener() async def on_member_update( - self, before: discord.User, after: discord.User + self, before: discord.Member, after: discord.Member ): + h = hash(hash(before) * hash(after)) + if h not in self.cache: + self.cache.append(h) + else: + return modlog = Setting.objects( guild=before.guild.id, setting="modlog" ).first() @@ -335,3 +341,4 @@ class ModlogMemberCog(commands.Cog): embed = await self.process_rolechange(before, after) if embed: await channel.send(embed=embed) + self.cache.remove(h)