diff --git a/src/main/java/net/dv8tion/jda/api/requests/restaction/pagination/ThreadChannelPaginationAction.java b/src/main/java/net/dv8tion/jda/api/requests/restaction/pagination/ThreadChannelPaginationAction.java index fdfe9fbec0..d05a8ee087 100644 --- a/src/main/java/net/dv8tion/jda/api/requests/restaction/pagination/ThreadChannelPaginationAction.java +++ b/src/main/java/net/dv8tion/jda/api/requests/restaction/pagination/ThreadChannelPaginationAction.java @@ -78,4 +78,14 @@ default Guild getGuild() { return getChannel().getGuild(); } + + /** + * {@inheritDoc} + * + * Note: When paginating over public and not-joined private threads, + * this skips based on {@link ThreadChannel#getTimeArchiveInfoLastModified() the archive timestamp}. + */ + @Nonnull + @Override + ThreadChannelPaginationAction skipTo(long id); } diff --git a/src/main/java/net/dv8tion/jda/internal/requests/restaction/pagination/ThreadChannelPaginationActionImpl.java b/src/main/java/net/dv8tion/jda/internal/requests/restaction/pagination/ThreadChannelPaginationActionImpl.java index 8a66407a37..4778b841ed 100644 --- a/src/main/java/net/dv8tion/jda/internal/requests/restaction/pagination/ThreadChannelPaginationActionImpl.java +++ b/src/main/java/net/dv8tion/jda/internal/requests/restaction/pagination/ThreadChannelPaginationActionImpl.java @@ -10,9 +10,11 @@ import net.dv8tion.jda.api.requests.Response; import net.dv8tion.jda.api.requests.Route; import net.dv8tion.jda.api.requests.restaction.pagination.ThreadChannelPaginationAction; +import net.dv8tion.jda.api.utils.TimeUtil; import net.dv8tion.jda.api.utils.data.DataArray; import net.dv8tion.jda.api.utils.data.DataObject; import net.dv8tion.jda.internal.entities.EntityBuilder; +import net.dv8tion.jda.internal.entities.GuildImpl; import net.dv8tion.jda.internal.utils.Helpers; import javax.annotation.Nonnull; @@ -59,19 +61,16 @@ protected String getPaginationLastEvaluatedKey(long lastId, ThreadChannel last) if (useID) return Long.toUnsignedString(lastId); - if (order == PaginationOrder.FORWARD && lastId == 0) - { - // first second of 2015 aka discords epoch, hard coding something older makes no sense to me - return "2015-01-01T00:00:00.000"; - } - - // this should be redundant, due to calling this with PaginationAction#getLast() as last param, - // but let's have this here. - if (last == null) + if (last != null) + // If threads were retrieved + // OffsetDateTime#toString() is defined to be ISO8601, needs no helper method. + return last.getTimeArchiveInfoLastModified().toString(); + else if (lastId != 0) + // If the user skipped ahead + return TimeUtil.getTimeCreated(lastId).toString(); + else + // If we just started paginating return OffsetDateTime.now(ZoneOffset.UTC).toString(); - - // OffsetDateTime#toString() is defined to be ISO8601, needs no helper method. - return last.getTimeArchiveInfoLastModified().toString(); } @Override @@ -102,7 +101,7 @@ protected void handleSuccess(Response response, Request> req try { - ThreadChannel thread = builder.createThreadChannel(threadObj, getGuild().getIdLong()); + ThreadChannel thread = builder.createThreadChannel((GuildImpl) getGuild(), threadObj, getGuild().getIdLong(), false); list.add(thread); if (this.useCache)