docs: def _parse_metadata(self, message):
          '''Parse incoming messages to build metadata dict
          Lots of 'if' statements. It sucks, I know.
  
          Args:
              message (dict): JSON dump of message sent from Slack
  
          Returns:
              Legobot.Metadata
          '''
  
          # Try to handle all the fields of events we care about.
          metadata = Metadata(source=self.actor_urn).__dict__
          metadata['thread_ts'] = message.get('thread_ts')
          if 'presence' in message:
              metadata['presence'] = message['presence']
  
          if 'text' in message:
              metadata['text'] = message['text']
          elif 'previous_message' in message:
              # Try to handle slack links
              if 'text' in message['previous_message']:
                  metadata['text'] = message['previous_message']['text']
              else:
                  metadata['text'] = None
          else:
              metadata['text'] = None
  
          if 'user' in message:
              metadata['source_user'] = message['user']
          elif 'bot_id' in message:
              metadata['source_user'] = self.get_userid_from_botid(
                                        message['bot_id'])
          elif 'message' in message and 'user' in message['message']:
              metadata['source_user'] = message['message']['user']
          else:
              metadata['source_user'] = None
  
          metadata['user_id'] = metadata['source_user']
          metadata['display_name'] = self.get_username(metadata['source_user'])
  
          if 'channel' in message:
              metadata['source_channel'] = message['channel']
              # Slack starts DM channel IDs with "D"
              if message['channel'].startswith('D'):
                  metadata['is_private_message'] = True
              else:
                  metadata['is_private_message'] = False
  
          metadata['source_connector'] = 'slack'
  
          return metadata