Fix some issues around names and diff contents

This commit is contained in:
Zeva Rose 2022-10-03 18:49:17 -06:00
parent d343ea6086
commit 10615c6c58

View file

@ -1,6 +1,7 @@
"""Filters cog.""" """Filters cog."""
import asyncio import asyncio
import difflib import difflib
import re
from typing import Dict, List from typing import Dict, List
from jarvis_core.db import q from jarvis_core.db import q
@ -32,8 +33,10 @@ class FilterCog(Extension):
if f := await Filter.find_one(q(name=name, guild=ctx.guild.id)): if f := await Filter.find_one(q(name=name, guild=ctx.guild.id)):
content = "\n".join(f.filters) content = "\n".join(f.filters)
kw = "Updating" if search else "Creating"
modal = Modal( modal = Modal(
title=f"Creating filter `{name}`", title=f'{kw} filter "{name}"',
components=[ components=[
InputText( InputText(
label="Filter (one statement per line)", label="Filter (one statement per line)",
@ -51,10 +54,13 @@ class FilterCog(Extension):
filters = data.responses.get("filters").split("\n") filters = data.responses.get("filters").split("\n")
except asyncio.TimeoutError: except asyncio.TimeoutError:
return return
# Thanks, Glitter
new_name = re.sub(r"[^\w-]", "", name)
try: try:
if not f: if not f:
f = Filter(name=name, guild=ctx.guild.id, filters=filters) f = Filter(name=new_name, guild=ctx.guild.id, filters=filters)
else: else:
f.name = new_name
f.filters = filters f.filters = filters
await f.commit() await f.commit()
except Exception as e: except Exception as e:
@ -62,14 +68,16 @@ class FilterCog(Extension):
return return
content = content.splitlines() content = content.splitlines()
diff = "\n".join(difflib.ndiff(content, filters)) diff = "\n".join(difflib.ndiff(content, filters)).replace("`", "\u200b`")
await data.send(f"Filter `{name}` has been updated:\n\n```diff\n{diff}\n```") await data.send(f"Filter `{new_name}` has been updated:\n\n```diff\n{diff}\n```")
if ctx.guild.id not in self.cache: if ctx.guild.id not in self.cache:
self.cache[ctx.guild.id] = [] self.cache[ctx.guild.id] = []
if name not in self.cache[ctx.guild.id]: if new_name not in self.cache[ctx.guild.id]:
self.cache[ctx.guild.id].append(name) self.cache[ctx.guild.id].append(new_name)
if name != new_name:
self.cache[ctx.guild.id].remove(name)
filter_ = SlashCommand(name="filter", description="Manage keyword filters") filter_ = SlashCommand(name="filter", description="Manage keyword filters")