aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bot/bot.py8
-rw-r--r--bot/cogs/antimalware.py2
-rw-r--r--bot/cogs/filter_lists.py18
-rw-r--r--bot/cogs/filtering.py3
-rw-r--r--tests/bot/cogs/test_antimalware.py10
5 files changed, 20 insertions, 21 deletions
diff --git a/bot/bot.py b/bot/bot.py
index 5deb986ec..4492feaa9 100644
--- a/bot/bot.py
+++ b/bot/bot.py
@@ -35,7 +35,7 @@ class Bot(commands.Bot):
self.redis_ready = asyncio.Event()
self.redis_closed = False
self.api_client = api.APIClient(loop=self.loop)
- self.filter_list_cache = defaultdict(list)
+ self.filter_list_cache = defaultdict(dict)
self._connector = None
self._resolver = None
@@ -169,14 +169,14 @@ class Bot(commands.Bot):
"""Add an item to the bots filter_list_cache."""
type_ = item["type"]
allowed = item["allowed"]
- metadata = {
+ content = item["content"]
+
+ self.filter_list_cache[f"{type_}.{allowed}"][content] = {
"id": item["id"],
- "content": item["content"],
"comment": item["comment"],
"created_at": item["created_at"],
"updated_at": item["updated_at"],
}
- self.filter_list_cache[f"{type_}.{allowed}"].append(metadata)
async def login(self, *args, **kwargs) -> None:
"""Re-create the connector and set up sessions before logging into Discord."""
diff --git a/bot/cogs/antimalware.py b/bot/cogs/antimalware.py
index 9a100b3fc..c76bd2c60 100644
--- a/bot/cogs/antimalware.py
+++ b/bot/cogs/antimalware.py
@@ -40,7 +40,7 @@ class AntiMalware(Cog):
def _get_whitelisted_file_formats(self) -> list:
"""Get the file formats currently on the whitelist."""
- return [item['content'] for item in self.bot.filter_list_cache['file_format.True']]
+ return self.bot.filter_list_cache['FILE_FORMAT.True'].keys()
def _get_disallowed_extensions(self, message: Message) -> t.Iterable[str]:
"""Get an iterable containing all the disallowed extensions of attachments."""
diff --git a/bot/cogs/filter_lists.py b/bot/cogs/filter_lists.py
index a93de2de9..3331be014 100644
--- a/bot/cogs/filter_lists.py
+++ b/bot/cogs/filter_lists.py
@@ -88,16 +88,16 @@ class FilterLists(Cog):
# Find the content and delete it.
log.trace(f"Trying to delete the {content} item from the {list_type} {allow_type}")
- for allow_list in self.bot.filter_list_cache[f"{list_type}.{allowed}"]:
- if content == allow_list.get("content"):
- item = allow_list
+ for allow_list, metadata in self.bot.filter_list_cache[f"{list_type}.{allowed}"].items():
+ if content == allow_list:
+ item = metadata
break
if item is not None:
await self.bot.api_client.delete(
- f"bot/filter-lists/{item.get('id')}"
+ f"bot/filter-lists/{item['id']}"
)
- self.bot.filter_list_cache[f"{list_type}.{allowed}"].remove(item)
+ del self.bot.filter_list_cache[f"{list_type}.{allowed}"][content]
await ctx.message.add_reaction("✅")
async def _list_all_data(self, ctx: Context, allowed: bool, list_type: ValidFilterListType) -> None:
@@ -107,11 +107,11 @@ class FilterLists(Cog):
# Build a list of lines we want to show in the paginator
lines = []
- for item in result:
- line = f"• `{item.get('content')}`"
+ for content, metadata in result.items():
+ line = f"• `{content}`"
- if item.get("comment"):
- line += f" - {item.get('comment')}"
+ if metadata.get("comment"):
+ line += f" - {metadata.get('comment')}"
lines.append(line)
lines = sorted(lines)
diff --git a/bot/cogs/filtering.py b/bot/cogs/filtering.py
index 7787d396d..0951cb740 100644
--- a/bot/cogs/filtering.py
+++ b/bot/cogs/filtering.py
@@ -101,8 +101,7 @@ class Filtering(Cog):
def _get_filterlist_items(self, list_type: str, *, allowed: bool) -> list:
"""Fetch items from the filter_list_cache."""
- items = self.bot.filter_list_cache[f"{list_type.upper()}.{allowed}"]
- return [item["content"] for item in items]
+ return self.bot.filter_list_cache[f"{list_type.upper()}.{allowed}"].keys()
@staticmethod
def _expand_spoilers(text: str) -> str:
diff --git a/tests/bot/cogs/test_antimalware.py b/tests/bot/cogs/test_antimalware.py
index 664fa8f19..82eadf226 100644
--- a/tests/bot/cogs/test_antimalware.py
+++ b/tests/bot/cogs/test_antimalware.py
@@ -15,11 +15,11 @@ class AntiMalwareCogTests(unittest.IsolatedAsyncioTestCase):
"""Sets up fresh objects for each test."""
self.bot = MockBot()
self.bot.filter_list_cache = {
- "file_format.True": [
- {"content": ".first"},
- {"content": ".second"},
- {"content": ".third"}
- ]
+ "file_format.True": {
+ ".first": {},
+ ".second": {},
+ ".third": {},
+ }
}
self.cog = antimalware.AntiMalware(self.bot)
self.message = MockMessage()