diff --git a/bmt_discord_bot/cogs/math.py b/bmt_discord_bot/cogs/math.py index ac16fc1..4860da8 100644 --- a/bmt_discord_bot/cogs/math.py +++ b/bmt_discord_bot/cogs/math.py @@ -25,6 +25,8 @@ CODE_BLOCK_RE = re.compile(r"```(\w+)\n(.*?)```", re.DOTALL) +SPOILER_RE = re.compile(r"\|\|.+?\|\|", re.DOTALL) +CODE_SPAN_RE = re.compile(r"```.*?```|`[^`]+`", re.DOTALL) def strip_code_block(source: str) -> str: @@ -150,12 +152,14 @@ def __init__( source: str, default_renderer: MathRenderer, renderers: list[MathRenderer], + spoiler: bool = False, ): super().__init__() self.ctx = ctx self.source = source self.default_renderer = default_renderer self.renderers = renderers + self.spoiler = spoiler self.select_renderer = self.RendererSelect(default_renderer, renderers) async def render(self, renderer: MathRenderer): @@ -163,7 +167,7 @@ async def render(self, renderer: MathRenderer): self.remove_item(self.select_renderer) try: bufs = await renderer.render(self.source) - self.files = [discord.File(buf, filename=f"math_{i}.png") for i, buf in enumerate(bufs)] + self.files = [discord.File(buf, filename=f"math_{i}.png", spoiler=self.spoiler) for i, buf in enumerate(bufs)] self.content = None except CompileError as e: error = str(e) @@ -318,8 +322,10 @@ async def process_math_command( async def process_math(self, ctx: Context, renderer: MathRenderer, source: str): source = strip_code_block(source) + text_outside_code = CODE_SPAN_RE.sub(" ", ctx.message.content) + spoiler = SPOILER_RE.search(text_outside_code) is not None async with ctx.typing(): - view = MathView(ctx, source, renderer, self.renderers) + view = MathView(ctx, source, renderer, self.renderers, spoiler=spoiler) await view.send(ctx.channel)