aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar MarkKoz <[email protected]>2020-05-06 13:41:37 -0700
committerGravatar MarkKoz <[email protected]>2020-06-13 11:21:05 -0700
commita61d0564b46ee4f2cb295317cdad6a47bfd88e13 (patch)
tree07b9d52e509bcc635139b4e25c62df54021dd42f
parentCode block: remove truncate function (diff)
Code block: use new formatting functions in on_message
-rw-r--r--bot/cogs/codeblock/cog.py37
1 files changed, 20 insertions, 17 deletions
diff --git a/bot/cogs/codeblock/cog.py b/bot/cogs/codeblock/cog.py
index efc22c8a5..959fc138e 100644
--- a/bot/cogs/codeblock/cog.py
+++ b/bot/cogs/codeblock/cog.py
@@ -8,7 +8,7 @@ from discord.ext.commands import Bot, Cog
from bot.cogs.token_remover import TokenRemover
from bot.constants import Categories, Channels, DEBUG_MODE
from bot.utils.messages import wait_for_deletion
-from . import parsing
+from . import instructions, parsing
log = logging.getLogger(__name__)
@@ -90,12 +90,7 @@ class CodeBlockCog(Cog, name="Code Block"):
@Cog.listener()
async def on_message(self, msg: Message) -> None:
- """
- Detect poorly formatted Python code in new messages.
-
- If poorly formatted code is detected, send the user a helpful message explaining how to do
- properly formatted Python syntax highlighting codeblocks.
- """
+ """Detect incorrect Markdown code blocks in `msg` and send instructions to fix them."""
if not self.should_parse(msg):
return
@@ -103,17 +98,25 @@ class CodeBlockCog(Cog, name="Code Block"):
if self.is_on_cooldown(msg.channel) and not DEBUG_MODE:
return
- try:
- if parsing.has_bad_ticks(msg):
- description = self.format_bad_ticks_message(msg)
+ blocks = parsing.find_code_blocks(msg.content)
+ if not blocks:
+ # No code blocks found in the message.
+ description = instructions.get_no_ticks_message(msg.content)
+ else:
+ # Get the first code block with invalid ticks.
+ block = next((block for block in blocks if block.tick != parsing.BACKTICK), None)
+
+ if block:
+ # A code block exists but has invalid ticks.
+ description = instructions.get_bad_ticks_message(block)
else:
- description = self.format_guide_message(msg)
- except SyntaxError:
- log.trace(
- f"SyntaxError while parsing code block sent by {msg.author}; "
- f"code posted probably just wasn't Python:\n\n{msg.content}\n\n"
- )
- return
+ # Only other possibility is a block with valid ticks but a missing language.
+ block = blocks[0]
+
+ # Check for a bad language first to avoid parsing content into an AST.
+ description = instructions.get_bad_lang_message(block.content)
+ if not description:
+ description = instructions.get_no_lang_message(block.content)
if description:
await self.send_guide_embed(msg, description)