aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Numerlor <[email protected]>2020-05-30 02:41:05 +0200
committerGravatar Numerlor <[email protected]>2020-05-30 02:41:05 +0200
commit0b266169160a8368a3c7eba3fcdfb404b657232e (patch)
tree53b60bb69129e439cfcfa7345df6f655ae682a0c
parentAdd tests for `send_to_paste_service`. (diff)
Truncate amount of lines in int eval output to 15.
Previously the amount of newlines was checked and uploaded to the paste service if above 15 but the sent message was not truncated to only include that amount of lines.
-rw-r--r--bot/cogs/eval.py22
1 files changed, 20 insertions, 2 deletions
diff --git a/bot/cogs/eval.py b/bot/cogs/eval.py
index c75c1e55f..edb59d286 100644
--- a/bot/cogs/eval.py
+++ b/bot/cogs/eval.py
@@ -172,7 +172,15 @@ async def func(): # (None,) -> Any
res = traceback.format_exc()
out, embed = self._format(code, res)
- if len(out) > 1500 or out.count("\n") > 15:
+ # Truncate output to max 15 lines or 1500 characters
+ newline_truncate_index = find_nth_occurrence(out, "\n", 15)
+
+ if newline_truncate_index is None or newline_truncate_index > 1500:
+ truncate_index = 1500
+ else:
+ truncate_index = newline_truncate_index
+
+ if len(out) > truncate_index:
paste_link = await send_to_paste_service(self.bot.http_session, out, extension="py")
if paste_link is not None:
paste_text = f"full contents at {paste_link}"
@@ -180,7 +188,7 @@ async def func(): # (None,) -> Any
paste_text = "failed to upload contents to paste service."
await ctx.send(
- f"```py\n{out[:1500]}\n```"
+ f"```py\n{out[:truncate_index]}\n```"
f"... response truncated; {paste_text}",
embed=embed
)
@@ -212,6 +220,16 @@ async def func(): # (None,) -> Any
await self._eval(ctx, code)
+def find_nth_occurrence(string: str, substring: str, n: int) -> Optional[int]:
+ """Return index of `n`th occurrence of `substring` in `string`, or None if not found."""
+ index = 0
+ for _ in range(n):
+ index = string.find(substring, index+1)
+ if index == -1:
+ return None
+ return index
+
+
def setup(bot: Bot) -> None:
"""Load the CodeEval cog."""
bot.add_cog(CodeEval(bot))