code: def get_layers(self) -> List[BaseLayer]:
          
          out = []
          msg = self._event.get('message', {})
  
          if 'text' in msg:
              out.append(lyr.RawText(msg['text']))
  
          for attachment in msg.get('attachments') or []:
              if attachment['type'] == 'image':
                  out.append(lyr.Image(UrlMedia(attachment['payload']['url'])))
              elif attachment['type'] == 'audio':
                  out.append(lyr.Audio(UrlMedia(attachment['payload']['url'])))
              elif attachment['type'] == 'file':
                  out.append(lyr.File(UrlMedia(attachment['payload']['url'])))
              elif attachment['type'] == 'video':
                  out.append(lyr.Video(UrlMedia(attachment['payload']['url'])))
              elif attachment['type'] == 'location':
                  # noinspection PyArgumentList
                  out.append(lyr.Location(lyr.Location.Point(
                      lat=attachment['payload']['coordinates']['lat'],
                      lon=attachment['payload']['coordinates']['long'],
                  )))
  
          if 'quick_reply' in msg:
              out.append(QuickReply(msg['quick_reply']['payload']))
  
          if 'postback' in self._event:
              payload = ujson.loads(self._event['postback']['payload'])
              out.append(lyr.Postback(payload))
  
          if 'optin' in self._event:
              out.append(OptIn(self._event['optin']['ref']))
  
          return out
docs: Return all layers that can be found in the message.