aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar MarkKoz <[email protected]>2020-05-06 23:12:20 -0700
committerGravatar MarkKoz <[email protected]>2020-06-13 11:21:07 -0700
commite03c194242b16d5f5ef9d937a13daef424800bec (patch)
tree626cf9ec7cf60e3d6bd87d4eae9b14785d283199
parentCode block: move instructions deletion to a separate function (diff)
Code block: move instructions retrieval to a separate function
Not only is it cleaner and more testable, but it allows for other functions to also retrieve instructions.
-rw-r--r--bot/cogs/codeblock/cog.py32
-rw-r--r--bot/cogs/codeblock/instructions.py31
2 files changed, 37 insertions, 26 deletions
diff --git a/bot/cogs/codeblock/cog.py b/bot/cogs/codeblock/cog.py
index 396353d40..23d5267a9 100644
--- a/bot/cogs/codeblock/cog.py
+++ b/bot/cogs/codeblock/cog.py
@@ -8,7 +8,8 @@ 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 instructions, parsing
+from . import parsing
+from .instructions import get_instructions
log = logging.getLogger(__name__)
@@ -120,31 +121,10 @@ class CodeBlockCog(Cog, name="Code Block"):
log.trace(f"Skipping code block detection of {msg.id}: #{msg.channel} is on cooldown.")
return
- blocks = parsing.find_code_blocks(msg.content)
- if blocks is None:
- # None is returned when there's at least one valid block with a language.
- return
- if not blocks:
- log.trace(f"No code blocks were found in message {msg.id}.")
- description = instructions.get_no_ticks_message(msg.content)
- else:
- log.trace("Searching results for a code block with invalid ticks.")
- block = next((block for block in blocks if block.tick != parsing.BACKTICK), None)
-
- if block:
- log.trace(f"A code block exists in {msg.id} but has invalid ticks.")
- description = instructions.get_bad_ticks_message(block)
- else:
- log.trace(f"A code block exists in {msg.id} but is missing a 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)
+ instructions = get_instructions(msg.content)
+ if instructions:
+ await self.send_guide_embed(msg, instructions)
+
if msg.channel.id not in self.channel_whitelist:
log.trace(f"Adding #{msg.channel} to the channel cooldowns.")
self.channel_cooldowns[msg.channel.id] = time.time()
diff --git a/bot/cogs/codeblock/instructions.py b/bot/cogs/codeblock/instructions.py
index 28242ce75..d331dd2ee 100644
--- a/bot/cogs/codeblock/instructions.py
+++ b/bot/cogs/codeblock/instructions.py
@@ -133,3 +133,34 @@ def get_no_lang_message(content: str) -> Optional[str]:
)
else:
log.trace("Aborting missing language instructions: content is not Python code.")
+
+
+def get_instructions(content: str) -> Optional[str]:
+ """Return code block formatting instructions for `content` or None if nothing's wrong."""
+ log.trace("Getting formatting instructions.")
+
+ blocks = parsing.find_code_blocks(content)
+ if blocks is None:
+ log.trace("At least one valid code block found; no instructions to return.")
+ return
+
+ if not blocks:
+ log.trace(f"No code blocks were found in message.")
+ return get_no_ticks_message(content)
+ else:
+ log.trace("Searching results for a code block with invalid ticks.")
+ block = next((block for block in blocks if block.tick != parsing.BACKTICK), None)
+
+ if block:
+ log.trace(f"A code block exists but has invalid ticks.")
+ return get_bad_ticks_message(block)
+ else:
+ log.trace(f"A code block exists but is missing a language.")
+ block = blocks[0]
+
+ # Check for a bad language first to avoid parsing content into an AST.
+ description = get_bad_lang_message(block.content)
+ if not description:
+ description = get_no_lang_message(block.content)
+
+ return description