diff options
Diffstat (limited to '')
| -rw-r--r-- | bot/cogs/codeblock/cog.py | 109 | 
1 files changed, 1 insertions, 108 deletions
diff --git a/bot/cogs/codeblock/cog.py b/bot/cogs/codeblock/cog.py index 25791801e..d0ffcab3f 100644 --- a/bot/cogs/codeblock/cog.py +++ b/bot/cogs/codeblock/cog.py @@ -2,7 +2,7 @@ import ast  import logging  import re  import time -from typing import NamedTuple, Optional, Sequence, Tuple +from typing import NamedTuple, Optional, Sequence  import discord  from discord import Embed, Message, RawMessageUpdateEvent @@ -71,74 +71,6 @@ class CodeBlockCog(Cog, name="Code Block"):          # Stores improperly formatted Python codeblock message ids and the corresponding bot message          self.codeblock_message_ids = {} -    def codeblock_stripping(self, msg: str, bad_ticks: bool) -> Optional[Tuple[Tuple[str, ...], str]]: -        """ -        Strip msg in order to find Python code. - -        Tries to strip out Python code out of msg and returns the stripped block or -        None if the block is a valid Python codeblock. -        """ -        if len(msg.split("\n", 3)) <= 3: -            return None - -        # Filtering valid Python codeblocks and exiting if a valid Python codeblock is found. -        if RE_CODE_BLOCK_LANGUAGE.search(msg) and not bad_ticks: -            log.trace("Code block already has valid syntax highlighting; no action taken") -            return None - -        else: -            # Stripping backticks from every line of the message. -            log.trace(f"Stripping backticks from message.\n\n{msg}\n\n") -            content = "" -            for line in msg.splitlines(keepends=True): -                content += line.strip("`") - -            content = content.strip() - -            # Remove "Python" or "Py" from start of the message if it exists. -            log.trace(f"Removing 'py' or 'python' from message.\n\n{content}\n\n") -            pycode = False -            if content.lower().startswith("python"): -                content = content[6:] -                pycode = True -            elif content.lower().startswith("py"): -                content = content[2:] -                pycode = True - -            if pycode: -                content = content.splitlines(keepends=True) - -                # Check if there might be code in the first line, and preserve it. -                first_line = content[0] -                if " " in content[0]: -                    first_space = first_line.index(" ") -                    content[0] = first_line[first_space:] -                    content = "".join(content) - -                # If there's no code we can just get rid of the first line. -                else: -                    content = "".join(content[1:]) - -            # Strip it again to remove any leading whitespace. This is neccessary -            # if the first line of the message looked like ```python <code> -            old = content.strip() - -            # Strips REPL code out of the message if there is any. -            content, repl_code = self.repl_stripping(old) -            if old != content: -                return (content, old), repl_code - -            # Try to apply indentation fixes to the code. -            content = self.fix_indentation(content) - -            # Check if the code contains backticks, if it does ignore the message. -            if "`" in content: -                log.trace("Detected ` inside the code, won't reply") -                return None -            else: -                log.trace(f"Returning message.\n\n{content}\n\n") -                return (content,), repl_code -      def format_bad_ticks_message(self, message: discord.Message) -> Optional[str]:          """Return the guide message to output for bad code block ticks in `message`."""          ticks = message.content[:3] @@ -221,45 +153,6 @@ class CodeBlockCog(Cog, name="Code Block"):                  code_block = CodeBlock(content, language, tick)                  code_blocks.append(code_block) -    def fix_indentation(self, msg: str) -> str: -        """Attempts to fix badly indented code.""" -        def unindent(code: str, skip_spaces: int = 0) -> str: -            """Unindents all code down to the number of spaces given in skip_spaces.""" -            final = "" -            current = code[0] -            leading_spaces = 0 - -            # Get numbers of spaces before code in the first line. -            while current == " ": -                current = code[leading_spaces + 1] -                leading_spaces += 1 -            leading_spaces -= skip_spaces - -            # If there are any, remove that number of spaces from every line. -            if leading_spaces > 0: -                for line in code.splitlines(keepends=True): -                    line = line[leading_spaces:] -                    final += line -                return final -            else: -                return code - -        # Apply fix for "all lines are overindented" case. -        msg = unindent(msg) - -        # If the first line does not end with a colon, we can be -        # certain the next line will be on the same indentation level. -        # -        # If it does end with a colon, we will need to indent all successive -        # lines one additional level. -        first_line = msg.splitlines()[0] -        code = "".join(msg.splitlines(keepends=True)[1:]) -        if not first_line.endswith(":"): -            msg = f"{first_line}\n{unindent(code)}" -        else: -            msg = f"{first_line}\n{unindent(code, 4)}" -        return msg -      @staticmethod      def is_repl_code(content: str, threshold: int = 3) -> bool:          """Return True if `content` has at least `threshold` number of Python REPL-like lines."""  |