from bot.action.util.textformat import FormattedText


class CommandUsageMessage:
    @classmethod
    def get_formatted_usage_text(cls, command, args=None, description=""):
        text = FormattedText().bold("Usage").newline()
        if type(args) is list:
            text.concat(FormattedText().newline().join((cls.__get_command_with_args(command, arg) for arg in args)))
        else:
            text.concat(cls.__get_command_with_args(command, args))
        if description:
            if not isinstance(description, FormattedText):
                description = FormattedText().normal(description)
            text.newline().newline().concat(description)
        return text

    @classmethod
    def get_usage_message(cls, command, args=None, description=""):
        return cls.get_formatted_usage_text(command, args, description).build_message()

    @staticmethod
    def __get_command_with_args(command, args):
        text = command
        if args:
            text += " " + args
        return FormattedText().code_inline(text)

from bot.action.util.textformat import FormattedText, FormattedTextFactory


class CommandUsageMessage:
    @classmethod
    def get_formatted_usage_text(cls, command, args=None, description=""):
        text = FormattedTextFactory.get_new_markdown().bold("Usage").newline()
        if type(args) is list:
            text.concat(
                FormattedTextFactory.get_new_markdown().newline().join(
                    (cls.__get_command_with_args(command, arg) for arg in args)
                )
            )
        else:
            text.concat(cls.__get_command_with_args(command, args))
        if description:
            if not isinstance(description, FormattedText):
                description = FormattedTextFactory.get_new_markdown().raw(description)
            text.newline().newline().concat(description)
        return text

    @classmethod
    def get_usage_message(cls, command, args=None, description=""):
        return cls.get_formatted_usage_text(command, args, description).build_message()

    @staticmethod
    def __get_command_with_args(command, args):
        text = command
        if args:
            text += " " + args
        return FormattedTextFactory.get_new_markdown().code_inline(text)

Fix CommandUsageMessage to allow backward compatibility with already existing raw Markdown formatted text
Fix CommandUsageMessage to allow backward compatibility with already existing raw Markdown formatted text

- from bot.action.util.textformat import FormattedText
+ from bot.action.util.textformat import FormattedText, FormattedTextFactory
  
  
  class CommandUsageMessage:
      @classmethod
      def get_formatted_usage_text(cls, command, args=None, description=""):
-         text = FormattedText().bold("Usage").newline()
+         text = FormattedTextFactory.get_new_markdown().bold("Usage").newline()
          if type(args) is list:
-             text.concat(FormattedText().newline().join((cls.__get_command_with_args(command, arg) for arg in args)))
+             text.concat(
+                 FormattedTextFactory.get_new_markdown().newline().join(
+                     (cls.__get_command_with_args(command, arg) for arg in args)
+                 )
+             )
          else:
              text.concat(cls.__get_command_with_args(command, args))
          if description:
              if not isinstance(description, FormattedText):
-                 description = FormattedText().normal(description)
+                 description = FormattedTextFactory.get_new_markdown().raw(description)
              text.newline().newline().concat(description)
          return text
  
      @classmethod
      def get_usage_message(cls, command, args=None, description=""):
          return cls.get_formatted_usage_text(command, args, description).build_message()
  
      @staticmethod
      def __get_command_with_args(command, args):
          text = command
          if args:
              text += " " + args
-         return FormattedText().code_inline(text)
+         return FormattedTextFactory.get_new_markdown().code_inline(text)
  
Fix CommandUsageMessage to allow backward compatibility with already existing raw Markdown formatted text
## Code Before:
from bot.action.util.textformat import FormattedText


class CommandUsageMessage:
    @classmethod
    def get_formatted_usage_text(cls, command, args=None, description=""):
        text = FormattedText().bold("Usage").newline()
        if type(args) is list:
            text.concat(FormattedText().newline().join((cls.__get_command_with_args(command, arg) for arg in args)))
        else:
            text.concat(cls.__get_command_with_args(command, args))
        if description:
            if not isinstance(description, FormattedText):
                description = FormattedText().normal(description)
            text.newline().newline().concat(description)
        return text

    @classmethod
    def get_usage_message(cls, command, args=None, description=""):
        return cls.get_formatted_usage_text(command, args, description).build_message()

    @staticmethod
    def __get_command_with_args(command, args):
        text = command
        if args:
            text += " " + args
        return FormattedText().code_inline(text)

## Instruction:
Fix CommandUsageMessage to allow backward compatibility with already existing raw Markdown formatted text
## Code After:
from bot.action.util.textformat import FormattedText, FormattedTextFactory


class CommandUsageMessage:
    @classmethod
    def get_formatted_usage_text(cls, command, args=None, description=""):
        text = FormattedTextFactory.get_new_markdown().bold("Usage").newline()
        if type(args) is list:
            text.concat(
                FormattedTextFactory.get_new_markdown().newline().join(
                    (cls.__get_command_with_args(command, arg) for arg in args)
                )
            )
        else:
            text.concat(cls.__get_command_with_args(command, args))
        if description:
            if not isinstance(description, FormattedText):
                description = FormattedTextFactory.get_new_markdown().raw(description)
            text.newline().newline().concat(description)
        return text

    @classmethod
    def get_usage_message(cls, command, args=None, description=""):
        return cls.get_formatted_usage_text(command, args, description).build_message()

    @staticmethod
    def __get_command_with_args(command, args):
        text = command
        if args:
            text += " " + args
        return FormattedTextFactory.get_new_markdown().code_inline(text)
