not found proposition
This commit is contained in:
+29
-25
@@ -120,31 +120,35 @@ async def on_message(message):
|
|||||||
left_wmark_text = f"By {message.author.display_name}"
|
left_wmark_text = f"By {message.author.display_name}"
|
||||||
img = meme_otron.compute(*args, left_wmark_text=left_wmark_text)
|
img = meme_otron.compute(*args, left_wmark_text=left_wmark_text)
|
||||||
if img is None:
|
if img is None:
|
||||||
await message.channel.send(f":warning: Template `{args[0]}` not found\n"
|
hint = db.find_nearest(args[0])
|
||||||
f"You can find a more detailed help and a list of templates at:\n"
|
response = f":warning: Template `{args[0]}` not found\n"
|
||||||
f"<https://github.com/klemek/meme-otron/tree/master/docs/README.md>")
|
if hint is not None:
|
||||||
return
|
response += f"Did you mean `{hint}`?\n"
|
||||||
with tempfile.NamedTemporaryFile(delete=False) as output:
|
response += f"You can find a more detailed help and a list of templates at:\n" \
|
||||||
img.save(output, format="JPEG")
|
f"<https://github.com/klemek/meme-otron/tree/master/docs/README.md>"
|
||||||
response = None
|
await message.channel.send(response)
|
||||||
if len(args) == 1:
|
else:
|
||||||
meme = db.get_meme(args[0])
|
with tempfile.NamedTemporaryFile(delete=False) as output:
|
||||||
response = f"Template `{meme.id}`:"
|
img.save(output, format="JPEG")
|
||||||
if len(meme.aliases) > 0:
|
response = None
|
||||||
response += f"\n- Aliases: `{'`, `'.join(meme.aliases)}`"
|
if len(args) == 1:
|
||||||
if meme.info is not None:
|
meme = db.get_meme(args[0])
|
||||||
response += f"\n- More info: <{meme.info}>"
|
response = f"Template `{meme.id}`:"
|
||||||
elif not direct:
|
if len(meme.aliases) > 0:
|
||||||
response = f"A meme by {message.author.mention}:"
|
response += f"\n- Aliases: `{'`, `'.join(meme.aliases)}`"
|
||||||
if mid not in SENT:
|
if meme.info is not None:
|
||||||
SENT[mid] = []
|
response += f"\n- More info: <{meme.info}>"
|
||||||
response = await message.channel.send(response,
|
elif not direct:
|
||||||
file=discord.File(filename="meme.jpg", fp=output.name))
|
response = f"A meme by {message.author.mention}:"
|
||||||
SENT[mid] += [response]
|
if mid not in SENT:
|
||||||
try:
|
SENT[mid] = []
|
||||||
os.remove(output.name)
|
response = await message.channel.send(response,
|
||||||
except PermissionError:
|
file=discord.File(filename="meme.jpg", fp=output.name))
|
||||||
pass
|
SENT[mid] += [response]
|
||||||
|
try:
|
||||||
|
os.remove(output.name)
|
||||||
|
except PermissionError:
|
||||||
|
pass
|
||||||
if not direct:
|
if not direct:
|
||||||
await delete(message)
|
await delete(message)
|
||||||
|
|
||||||
|
|||||||
+10
-9
@@ -9,23 +9,26 @@ from . import meme_otron
|
|||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
db.load_memes()
|
db.load_memes()
|
||||||
imgf.load_fonts()
|
imgf.load_fonts()
|
||||||
|
|
||||||
if len(sys.argv) <= 1 or sys.argv[1].lower().strip() == "help" or "-h" in sys.argv :
|
if len(sys.argv) <= 1 or sys.argv[1].lower().strip() == "help" or "-h" in sys.argv:
|
||||||
print("python -h\r\n",
|
print("python -h\r\n",
|
||||||
"python -m meme_otron (meme_id) \"[text 1]\" \"[text 2]\" ... > file.jpg\r\n",
|
"python -m meme_otron (meme_id) \"[text 1]\" \"[text 2]\" ... > file.jpg\r\n",
|
||||||
"python -m meme_otron -o file.jpg (meme_id) \"[text 1]\" \"[text 2]\" ...",
|
"python -m meme_otron -o file.jpg (meme_id) \"[text 1]\" \"[text 2]\" ...",
|
||||||
file=sys.stderr)
|
file=sys.stderr)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
else:
|
else:
|
||||||
output_f = None
|
output_f = None
|
||||||
if "-o" in sys.argv:
|
if "-o" in sys.argv:
|
||||||
i = sys.argv.index("-o")
|
i = sys.argv.index("-o")
|
||||||
if len(sys.argv) >= i:
|
if len(sys.argv) >= i:
|
||||||
output_f = sys.argv[i+1]
|
output_f = sys.argv[i + 1]
|
||||||
del sys.argv[i+1]
|
del sys.argv[i + 1]
|
||||||
del sys.argv[i]
|
del sys.argv[i]
|
||||||
img = meme_otron.compute(*sys.argv[1:])
|
img = meme_otron.compute(*sys.argv[1:])
|
||||||
if img is None:
|
if img is None:
|
||||||
|
hint = db.find_nearest(sys.argv[1])
|
||||||
|
if hint is not None:
|
||||||
|
print(f"Did you mean '{hint}'?")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
if output_f is None:
|
if output_f is None:
|
||||||
with os.fdopen(os.dup(sys.stdout.fileno())) as output:
|
with os.fdopen(os.dup(sys.stdout.fileno())) as output:
|
||||||
@@ -40,5 +43,3 @@ if __name__ == "__main__":
|
|||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
print(f"Cannot write '{output_f}': {e}", file=sys.stderr)
|
print(f"Cannot write '{output_f}': {e}", file=sys.stderr)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -165,3 +165,8 @@ def get_meme(name):
|
|||||||
return DATA[ALIASES[name]].clone()
|
return DATA[ALIASES[name]].clone()
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def find_nearest(word):
|
||||||
|
word = word.lower().strip().replace(" ", "_")
|
||||||
|
return utils.find_nearest(word, ALIASES.keys())
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import re
|
import re
|
||||||
import os.path as path
|
import os.path as path
|
||||||
|
from Levenshtein import distance
|
||||||
|
|
||||||
|
|
||||||
def relative_path(file, *args):
|
def relative_path(file, *args):
|
||||||
@@ -120,3 +121,19 @@ def parse_arguments(s):
|
|||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
return [[g for g in m if len(g) > 0][0] for m in args_regex.findall(s)]
|
return [[g for g in m if len(g) > 0][0] for m in args_regex.findall(s)]
|
||||||
|
|
||||||
|
|
||||||
|
def find_nearest(word, wlist, threshold=5):
|
||||||
|
"""
|
||||||
|
TODO
|
||||||
|
|
||||||
|
:param (str) word:
|
||||||
|
:param (list of str) wlist:
|
||||||
|
:param (int) threshold:
|
||||||
|
:rtype: str | None
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
found = min([(distance(word, w) - abs(len(w) - len(word)), w) for w in wlist], key=lambda v: v[0])
|
||||||
|
if found[0] > threshold:
|
||||||
|
return None
|
||||||
|
return found[1]
|
||||||
|
|||||||
+2
-1
@@ -1 +1,2 @@
|
|||||||
Pillow
|
Pillow
|
||||||
|
python-Levenshtein
|
||||||
Reference in New Issue
Block a user