public static Task <IReadOnlyList <IMessage> > FetchMessagesAsync(this IRestClient client, Snowflake channelId, int limit = 100, RetrievalDirection direction = RetrievalDirection.Before, Snowflake?startFromId = null, IRestRequestOptions options = null)
        {
            if (limit == 0)
            {
                return(Task.FromResult(ReadOnlyList <IMessage> .Empty));
            }

            if (limit <= 100)
            {
                return(client.InternalFetchMessagesAsync(channelId, limit, direction, startFromId, options));
            }

            var enumerable = client.EnumerateMessages(channelId, limit, direction, startFromId, options);

            return(enumerable.FlattenAsync());
        }
        public static Task <IReadOnlyList <IMessage> > FetchMessagesAsync(this IRestClient client,
                                                                          Snowflake channelId, int limit = Discord.Limits.Rest.FetchMessagesPageSize, RetrievalDirection direction = RetrievalDirection.Before, Snowflake?startFromId = null,
                                                                          IRestRequestOptions options    = null, CancellationToken cancellationToken = default)
        {
            if (limit == 0)
            {
                return(Task.FromResult(ReadOnlyList <IMessage> .Empty));
            }

            if (limit <= Discord.Limits.Rest.FetchMessagesPageSize)
            {
                return(client.InternalFetchMessagesAsync(channelId, limit, direction, startFromId, options, cancellationToken));
            }

            var enumerable = client.EnumerateMessages(channelId, limit, direction, startFromId, options);

            return(enumerable.FlattenAsync(cancellationToken));
        }