aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar MarkKoz <[email protected]>2019-06-14 19:12:35 -0700
committerGravatar MarkKoz <[email protected]>2019-06-14 21:08:22 -0700
commit6fe67047ba4df4949cf5f86aaa7df19d90788601 (patch)
treee1b23c76707ad5d017e77774f9928397beb1c6df
parentSnekbox: refactor eval command (diff)
Snekbox: redirect stderr to stdout
* Save original output before processing output
-rw-r--r--bot/cogs/snekbox.py12
1 files changed, 8 insertions, 4 deletions
diff --git a/bot/cogs/snekbox.py b/bot/cogs/snekbox.py
index f6cf31487..909479f4f 100644
--- a/bot/cogs/snekbox.py
+++ b/bot/cogs/snekbox.py
@@ -21,7 +21,11 @@ CODE_TEMPLATE = """
venv_file = "/snekbox/.venv/bin/activate_this.py"
exec(open(venv_file).read(), dict(__file__=venv_file))
+import contextlib
+import sys
+
try:
+ with contextlib.redirect_stderr(sys.stdout):
{CODE}
except Exception as e:
print(e)
@@ -75,6 +79,7 @@ class Snekbox:
if "key" in data:
return URLs.paste_service.format(key=data["key"])
except Exception:
+ # 400 (Bad Request) means the data is too large
log.exception("Failed to upload full output to paste service!")
@staticmethod
@@ -96,7 +101,7 @@ class Snekbox:
f"stripping whitespace only:\n{code}"
)
- code = textwrap.indent(code, " ")
+ code = textwrap.indent(code, " ")
return CODE_TEMPLATE.replace("{CODE}", code)
async def format_output(self, output: str) -> Tuple[str, Optional[str]]:
@@ -107,6 +112,7 @@ class Snekbox:
and upload the full output to a paste service.
"""
output = output.strip(" \n")
+ original_output = output # To be uploaded to a pasting service if needed
paste_link = None
if "<@" in output:
@@ -118,8 +124,6 @@ class Snekbox:
if ESCAPE_REGEX.findall(output):
return "Code block escape attempt detected; will not output result", paste_link
- # the original output, to send to a pasting service if needed
- full_output = output
truncated = False
if output.count("\n") > 0:
output = [f"{i:03d} | {line}" for i, line in enumerate(output.split("\n"), start=1)]
@@ -139,7 +143,7 @@ class Snekbox:
truncated = True
if truncated:
- paste_link = await self.upload_output(full_output)
+ paste_link = await self.upload_output(original_output)
return output.strip(), paste_link