diff options
| author | 2020-05-30 02:41:05 +0200 | |
|---|---|---|
| committer | 2020-05-30 02:41:05 +0200 | |
| commit | 0b266169160a8368a3c7eba3fcdfb404b657232e (patch) | |
| tree | 53b60bb69129e439cfcfa7345df6f655ae682a0c | |
| parent | Add 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.py | 22 |
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)) |