code: async def get_prefix(self, message):
          
          prefix = ret = self.command_prefix
          if callable(prefix):
              ret = await discord.utils.maybe_coroutine(prefix, self, message)
  
          if not isinstance(ret, str):
              try:
                  ret = list(ret)
              except TypeError:
                  # It's possible that a generator raised this exception.  Don't
                  # replace it with our own error if that's the case.
                  if isinstance(ret, collections.Iterable):
                      raise
  
                  raise TypeError("command_prefix must be plain string, iterable of strings, or callable "
                                  "returning either of these, not {}".format(ret.__class__.__name__))
  
              if not ret:
                  raise ValueError("Iterable command_prefix must contain at least one prefix")
  
          return ret
docs: |coro|
  
          Retrieves the prefix the bot is listening to
          with the message as a context.
  
          Parameters
          -----------
          message: :class:`discord.Message`
              The message context to get the prefix of.
  
          Returns
          --------
          Union[List[:class:`str`], :class:`str`]
              A list of prefixes or a single prefix that the bot is
              listening for.