aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar MarkKoz <[email protected]>2019-06-14 10:11:43 -0700
committerGravatar MarkKoz <[email protected]>2019-06-14 21:08:05 -0700
commit1f9d9eb3072a0f63044efc7846a474339a69f219 (patch)
tree05621cd0a2bf4a256e64e26f00b6ad959af886ec
parentSnekbox: add a function to send a request to the API (diff)
Snekbox: move input code preparation to a separate function
-rw-r--r--bot/cogs/snekbox.py39
1 files changed, 23 insertions, 16 deletions
diff --git a/bot/cogs/snekbox.py b/bot/cogs/snekbox.py
index 70a19db87..1d18d2d84 100644
--- a/bot/cogs/snekbox.py
+++ b/bot/cogs/snekbox.py
@@ -64,6 +64,28 @@ class Snekbox:
async with self.bot.http_session.post(url, json=data, raise_for_status=True) as resp:
return await resp.json()
+ @staticmethod
+ def prepare_input(code: str) -> str:
+ """Extract code from the Markdown, format it, and insert it into the code template."""
+ match = FORMATTED_CODE_REGEX.fullmatch(code)
+ if match:
+ code, block, lang, delim = match.group("code", "block", "lang", "delim")
+ code = textwrap.dedent(code)
+ if block:
+ info = (f"'{lang}' highlighted" if lang else "plain") + " code block"
+ else:
+ info = f"{delim}-enclosed inline code"
+ log.trace(f"Extracted {info} for evaluation:\n{code}")
+ else:
+ code = textwrap.dedent(RAW_CODE_REGEX.fullmatch(code).group("code"))
+ log.trace(
+ f"Eval message contains unformatted or badly formatted code, "
+ f"stripping whitespace only:\n{code}"
+ )
+
+ code = textwrap.indent(code, " ")
+ return CODE_TEMPLATE.replace("{CODE}", code)
+
@command(name='eval', aliases=('e',))
@guild_only()
@in_channel(Channels.bot, bypass_roles=BYPASS_ROLES)
@@ -85,22 +107,7 @@ class Snekbox:
log.info(f"Received code from {ctx.author.name}#{ctx.author.discriminator} for evaluation:\n{code}")
self.jobs[ctx.author.id] = datetime.datetime.now()
- # Strip whitespace and inline or block code markdown and extract the code and some formatting info
- match = FORMATTED_CODE_REGEX.fullmatch(code)
- if match:
- code, block, lang, delim = match.group("code", "block", "lang", "delim")
- code = textwrap.dedent(code)
- if block:
- info = (f"'{lang}' highlighted" if lang else "plain") + " code block"
- else:
- info = f"{delim}-enclosed inline code"
- log.trace(f"Extracted {info} for evaluation:\n{code}")
- else:
- code = textwrap.dedent(RAW_CODE_REGEX.fullmatch(code).group("code"))
- log.trace(f"Eval message contains not or badly formatted code, stripping whitespace only:\n{code}")
-
- code = textwrap.indent(code, " ")
- code = CODE_TEMPLATE.replace("{CODE}", code)
+ code = self.prepare_input(code)
try:
async with ctx.typing():