def history(self, *, limit=100, before=None, after=None, around=None, oldest_first=None):
        """Return an :class:`.AsyncIterator` that enables receiving the destination's message history.

        You must have :attr:`~.Permissions.read_message_history` permissions to use this.

        Examples
        ---------

        Usage ::

            counter = 0
            async for message in channel.history(limit=200):
                if message.author == client.user:
                    counter += 1

        Flattening into a list: ::

            messages = await channel.history(limit=123).flatten()
            # messages is now a list of Message...

        All parameters are optional.

        Parameters
        -----------
        limit: Optional[:class:`int`]
            The number of messages to retrieve.
            If ``None``, retrieves every message in the channel. Note, however,
            that this would make it a slow operation.
        before: :class:`.Message` or :class:`datetime.datetime`
            Retrieve messages before this date or message.
            If a date is provided it must be a timezone-naive datetime representing UTC time.
        after: :class:`.Message` or :class:`datetime.datetime`
            Retrieve messages after this date or message.
            If a date is provided it must be a timezone-naive datetime representing UTC time.
        around: :class:`.Message` or :class:`datetime.datetime`
            Retrieve messages around this date or message.
            If a date is provided it must be a timezone-naive datetime representing UTC time.
            When using this argument, the maximum limit is 101. Note that if the limit is an
            even number then this will return at most limit + 1 messages.
        oldest_first: Optional[:class:`bool`]
            If set to true, return messages in oldest->newest order. Defaults to True if
            ``after`` is specified, otherwise False.

        Raises
        ------
        :exc:`.Forbidden`
            You do not have permissions to get channel message history.
        :exc:`.HTTPException`
            The request to get message history failed.

        Yields
        -------
        :class:`.Message`
            The message with the message data parsed.
        """
        return HistoryIterator(self, limit=limit, before=before, after=after, around=around, oldest_first=oldest_first)