def _update(self, **data):
        # at the moment, the timestamps seem to be naive so they have no time zone and operate on UTC time.
        # we can use this to our advantage to use strptime instead of a complicated parsing routine.
        # example timestamp: 2015-08-21T12:03:45.782000+00:00
        # sometimes the .%f modifier is missing
        self.edited_timestamp = utils.parse_time(data.get('edited_timestamp'))
        self.timestamp = utils.parse_time(data.get('timestamp'))
        self.tts = data.get('tts')
        self.content = data.get('content')
        self.mention_everyone = data.get('mention_everyone')
        self.embeds = data.get('embeds')
        self.id = data.get('id')
        self.channel = data.get('channel')
        self.author = User(**data.get('author', {}))
        self.nonce = data.get('nonce')
        self.attachments = data.get('attachments')
        self._handle_upgrades(data.get('channel_id'))
        self._handle_mentions(data.get('mentions', []), data.get('mention_roles', []))

        # clear the cached properties
        cached = filter(lambda attr: attr[0] == '_', self.__slots__)
        for attr in cached:
            try:
                delattr(self, attr)
            except __HOLE__:
                pass
dataset/ETHPy150Open Rapptz/discord.py/discord/message.py/Message._update