diff --git a/telegrambots/src/main/java/org/telegram/telegrambots/updatesreceivers/RestApi.java b/telegrambots/src/main/java/org/telegram/telegrambots/updatesreceivers/RestApi.java index 517455e6..df089e02 100644 --- a/telegrambots/src/main/java/org/telegram/telegrambots/updatesreceivers/RestApi.java +++ b/telegrambots/src/main/java/org/telegram/telegrambots/updatesreceivers/RestApi.java @@ -1,14 +1,7 @@ package org.telegram.telegrambots.updatesreceivers; import java.util.List; -import javax.ws.rs.core.Response.Status; -import lombok.extern.slf4j.Slf4j; -import org.telegram.telegrambots.Constants; -import org.telegram.telegrambots.meta.api.methods.BotApiMethod; -import org.telegram.telegrambots.meta.api.objects.Update; -import org.telegram.telegrambots.meta.exceptions.TelegramApiValidationException; -import org.telegram.telegrambots.meta.generics.WebhookBot; - +import java.util.concurrent.ConcurrentHashMap; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.POST; @@ -17,7 +10,13 @@ import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import java.util.concurrent.ConcurrentHashMap; +import javax.ws.rs.core.Response.Status; +import lombok.extern.slf4j.Slf4j; +import org.telegram.telegrambots.Constants; +import org.telegram.telegrambots.meta.api.methods.BotApiMethod; +import org.telegram.telegrambots.meta.api.objects.Update; +import org.telegram.telegrambots.meta.exceptions.TelegramApiValidationException; +import org.telegram.telegrambots.meta.generics.WebhookBot; /** * @author Ruben Bermudez @@ -51,7 +50,14 @@ public class RestApi { } return Response.ok(response).build(); } catch (TooManyRequestsException e) { - return Response.status(Status.TOO_MANY_REQUESTS).build(); + if (e.getProcessedRequestsCount().isPresent()) { + return Response + .status(Status.TOO_MANY_REQUESTS) + .header("X-Processed-Requests", e.getProcessedRequestsCount().getAsInt()) + .build(); + } else { + return Response.status(Status.TOO_MANY_REQUESTS).build(); + } } catch (TelegramApiValidationException e) { log.error(e.getLocalizedMessage(), e); return Response.serverError().build(); @@ -78,7 +84,14 @@ public class RestApi { } return Response.ok(responses).build(); } catch (TooManyRequestsException e) { - return Response.status(Status.TOO_MANY_REQUESTS).build(); + if (e.getProcessedRequestsCount().isPresent()) { + return Response + .status(Status.TOO_MANY_REQUESTS) + .header("X-Processed-Requests", e.getProcessedRequestsCount().getAsInt()) + .build(); + } else { + return Response.status(Status.TOO_MANY_REQUESTS).build(); + } } catch (TelegramApiValidationException e) { log.error(e.getLocalizedMessage(), e); return Response.serverError().build(); diff --git a/telegrambots/src/main/java/org/telegram/telegrambots/updatesreceivers/TooManyRequestsException.java b/telegrambots/src/main/java/org/telegram/telegrambots/updatesreceivers/TooManyRequestsException.java index 2c24aa4f..ccc8218e 100644 --- a/telegrambots/src/main/java/org/telegram/telegrambots/updatesreceivers/TooManyRequestsException.java +++ b/telegrambots/src/main/java/org/telegram/telegrambots/updatesreceivers/TooManyRequestsException.java @@ -1,3 +1,33 @@ package org.telegram.telegrambots.updatesreceivers; -public class TooManyRequestsException extends RuntimeException {} +import java.util.OptionalInt; +import java.util.StringJoiner; + +public class TooManyRequestsException extends RuntimeException { + + private final int processedRequestsCount; + + public TooManyRequestsException(int processedRequestsCount) { + if (processedRequestsCount < 0) { + throw new ArrayIndexOutOfBoundsException(processedRequestsCount); + } + this.processedRequestsCount = processedRequestsCount; + } + + public TooManyRequestsException() { + this.processedRequestsCount = -1; + } + + public OptionalInt getProcessedRequestsCount() { + if (processedRequestsCount == -1) { + return OptionalInt.empty(); + } else { + return OptionalInt.of(processedRequestsCount); + } + } + + @Override + public String toString() { + return "Too many requests. " + processedRequestsCount + " requests have been processed."; + } +}