ijo42 / CurseForge2Discord

Update Announcer over Discord Webhooks. CurseForge
https://hub.docker.com/r/ijo42/curseforge2discord
MIT License
1 stars 2 forks source link

Failed to execute request: getFiles() #25

Open estevez-dev opened 3 years ago

estevez-dev commented 3 years ago

Hi. I've built an image from dev branch for arm. The cache was created successfully, but then, when one of the addons was updated, I'm getting:

com.therandomlabs.curseapi.CurseException: Failed to execute request: Request{method=GET, url=https://addons-ecs.forgesvc.net/api/v2/addon/457334/files, tags={class retrofit2.Invocation=com.therandomlabs.curseapi.forgesvc.ForgeSvc.getFiles() [457334]}}

Here are the last logs I have from the container:

    at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:43),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117),
    at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:94),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117),
    at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:88),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117),
    at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:229),
    at okhttp3.RealCall.execute(RealCall.java:81),
    at retrofit2.OkHttpCall.execute(OkHttpCall.java:204),
    at io.github.resilience4j.retrofit.RetrofitCircuitBreaker$CircuitBreakingCall.execute(RetrofitCircuitBreaker.java:114),
    at com.therandomlabs.curseapi.util.RetrofitUtils.lambda$execute$39f5113e$1(RetrofitUtils.java:99),
    at io.github.resilience4j.retry.Retry.lambda$decorateCheckedSupplier$3f69f149$1(Retry.java:137),
    at io.vavr.control.Try.of(Try.java:75),
    at com.therandomlabs.curseapi.util.RetrofitUtils.execute(RetrofitUtils.java:98),
    ... 9 more,
com.therandomlabs.curseapi.CurseException: Failed to execute request: Request{method=GET, url=https://addons-ecs.forgesvc.net/api/v2/addon/326516/files, tags={class retrofit2.Invocation=com.therandomlabs.curseapi.forgesvc.ForgeSvc.getFiles() [326516]}},
    at com.therandomlabs.curseapi.util.RetrofitUtils.execute(RetrofitUtils.java:119),
    at com.therandomlabs.curseapi.forgesvc.ForgeSvcProvider.files(ForgeSvcProvider.java:121),
    at com.therandomlabs.curseapi.CurseAPI.lambda$files$5(CurseAPI.java:224),
    at com.therandomlabs.curseapi.CurseAPI.get(CurseAPI.java:679),
    at com.therandomlabs.curseapi.CurseAPI.files(CurseAPI.java:224),
    at com.therandomlabs.curseapi.forgesvc.ForgeSvcProject.files(ForgeSvcProject.java:182),
    at com.therandomlabs.curseapi.forgesvc.ForgeSvcProject.refreshFiles(ForgeSvcProject.java:202),
    at de.erdbeerbaerlp.curseforge.CurseForgeUpdateThread.run(CurseForgeUpdateThread.java:45),
    at java.base/java.util.TimerThread.mainLoop(Timer.java:556),
    at java.base/java.util.TimerThread.run(Timer.java:506),
Caused by: java.net.SocketTimeoutException: timeout,
    at okhttp3.internal.http2.Http2Stream$StreamTimeout.newTimeoutException(Http2Stream.java:678),
    at okhttp3.internal.http2.Http2Stream$StreamTimeout.exitAndThrowIfTimedOut(Http2Stream.java:686),
    at okhttp3.internal.http2.Http2Stream.takeHeaders(Http2Stream.java:154),
    at okhttp3.internal.http2.Http2ExchangeCodec.readResponseHeaders(Http2ExchangeCodec.java:136),
    at okhttp3.internal.connection.Exchange.readResponseHeaders(Exchange.java:115),
    at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:94),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:43),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117),
    at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:94),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117),
    at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:88),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117),
    at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:229),
    at okhttp3.RealCall.execute(RealCall.java:81),
    at retrofit2.OkHttpCall.execute(OkHttpCall.java:204),
    at io.github.resilience4j.retrofit.RetrofitCircuitBreaker$CircuitBreakingCall.execute(RetrofitCircuitBreaker.java:114),
    at com.therandomlabs.curseapi.util.RetrofitUtils.lambda$execute$39f5113e$1(RetrofitUtils.java:99),
    at io.github.resilience4j.retry.Retry.lambda$decorateCheckedSupplier$3f69f149$1(Retry.java:137),
    at io.vavr.control.Try.of(Try.java:75),
    at com.therandomlabs.curseapi.util.RetrofitUtils.execute(RetrofitUtils.java:98),
    ... 9 more,
com.therandomlabs.curseapi.CurseException: Failed to execute request: Request{method=GET, url=https://addons-ecs.forgesvc.net/api/v2/addon/457334/files, tags={class retrofit2.Invocation=com.therandomlabs.curseapi.forgesvc.ForgeSvc.getFiles() [457334]}},
    at com.therandomlabs.curseapi.util.RetrofitUtils.execute(RetrofitUtils.java:119),
    at com.therandomlabs.curseapi.forgesvc.ForgeSvcProvider.files(ForgeSvcProvider.java:121),
    at com.therandomlabs.curseapi.CurseAPI.lambda$files$5(CurseAPI.java:224),
    at com.therandomlabs.curseapi.CurseAPI.get(CurseAPI.java:679),
    at com.therandomlabs.curseapi.CurseAPI.files(CurseAPI.java:224),
    at com.therandomlabs.curseapi.forgesvc.ForgeSvcProject.files(ForgeSvcProject.java:182),
    at com.therandomlabs.curseapi.forgesvc.ForgeSvcProject.refreshFiles(ForgeSvcProject.java:202),
    at de.erdbeerbaerlp.curseforge.CurseForgeUpdateThread.run(CurseForgeUpdateThread.java:45),
    at java.base/java.util.TimerThread.mainLoop(Timer.java:556),
    at java.base/java.util.TimerThread.run(Timer.java:506),
Caused by: java.net.SocketTimeoutException: timeout,
    at okhttp3.internal.http2.Http2Stream$StreamTimeout.newTimeoutException(Http2Stream.java:678),
    at okhttp3.internal.http2.Http2Stream$StreamTimeout.exitAndThrowIfTimedOut(Http2Stream.java:686),
    at okhttp3.internal.http2.Http2Stream.takeHeaders(Http2Stream.java:154),
    at okhttp3.internal.http2.Http2ExchangeCodec.readResponseHeaders(Http2ExchangeCodec.java:136),
    at okhttp3.internal.connection.Exchange.readResponseHeaders(Exchange.java:115),
    at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:94),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:43),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117),
    at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:94),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117),
    at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:88),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117),
    at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:229),
    at okhttp3.RealCall.execute(RealCall.java:81),
    at retrofit2.OkHttpCall.execute(OkHttpCall.java:204),
    at io.github.resilience4j.retrofit.RetrofitCircuitBreaker$CircuitBreakingCall.execute(RetrofitCircuitBreaker.java:114),
    at com.therandomlabs.curseapi.util.RetrofitUtils.lambda$execute$39f5113e$1(RetrofitUtils.java:99),
    at io.github.resilience4j.retry.Retry.lambda$decorateCheckedSupplier$3f69f149$1(Retry.java:137),
    at io.vavr.control.Try.of(Try.java:75),
    at com.therandomlabs.curseapi.util.RetrofitUtils.execute(RetrofitUtils.java:98),
    ... 9 more,
Attempting to save cache...,
Attempting to save cache...,

My Dockerfile could be found here.

ijo42 commented 3 years ago

Hello. I assume this issue is related to the work of the retrofit library as described in #8. I can advise you to try using the build flag LIBERICA_IMAGE_VARIANT=full

estevez-dev commented 3 years ago

Thanks, @ijo42, it helped, but not completely. Now there is no error and there is an Attempting to save cache... when there is an update found. But still no message in Discord. I've created a webhook for the channel and copied the channel id. Here is my bot.conf where 84000000000000 is a channel id and xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx is a webhook token from webhook URL:

# Don´t change this! Used internally to backup and reset the config if needed!
ver = 5

# Provide some CurseForge project IDs you want the bot to listen to
#
# Role ID doesn't have to be set, if its not don't include second ;;
# NOTE: Role ID can only be set if a channel id is set as well
# NOTE 2: channelId must me grabbed from DISCORD WEBHOOK
# e.g. https://discord.com/api/webhooks/xxx/zzzz
# which xxx is channel id, zzzz is webhook token
ids = [
    # Questie
    "334372;;84000000000000;;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    # Bagnon
    "1592;;84000000000000;;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    # Combuctor
    "15947;;84000000000000;;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    # AtlasLootClassic
    "326516;;84000000000000;;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    # CraftPresence
    "457334;;84000000000000;;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
]

## UPDATE MESSAGE OPTIONS ##
# Provide a language syntax name to have the changelog formatted inside the embedded message for easier viewing if desired.
#
# Can be very useful if project owner/author uses discord Markdown formatting in their changelog
# Uploads as plain text if not changed (example: yml, md, css) Only choose one syntax
changelogDiscordFormat = "md"

# This sets the text that appears as the message description in the update notification
# (the text directly under the project name which is the message title)
#
# This can adhere to discord markdown rules but due to how the message is formatted as a whole, keep this
# message under 250 characters
messageDescription = "New file detected for CurseForge addon"

# Sets the message to include a download link for the new project file
#
# Use the following 3 options only to set the link
# "direct" = Direct link to download the file
# "curse" = Link to the file download page on curseforge.com
# "nolink" = Do not include a download link
updateFileLink = "CURSE"

# If you want the message to mention a particular role when a update message is sent, add the Role ID here
#
# You may provide custom image by URL into Message Footer
mentionRole = 000000000

footerImage = ""
ijo42 commented 3 years ago

Most likely, you took the channel id from the context menu. In the config, you must specify the channel id from the webhook url. as described in NOTE 2

estevez-dev commented 3 years ago

Yep, that was the case, thanks! One last question. Could I use my own bot or change the current bot name from Update Detector to something else? I thought it would be the name of webhook.

ijo42 commented 3 years ago

The bot username is hardcoded, which is definitely a bad practice. I'll take a note to fix it https://github.com/ijo42/CurseForge2Discord/blob/3ba3ddd4c6bb05fd0475672b0ac4c8ca5e731e98/src/main/java/de/erdbeerbaerlp/curseforge/EmbedMessage.java#L142

estevez-dev commented 3 years ago

Nice! Thanks a lot!

estevez-dev commented 3 years ago

So it was working only the first time when I started a container. The bot loaded a cache and found an outdated addon. The message was sent and the cache was updated. But then:

    at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:94),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:43),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117),
    at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:94),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117),
    at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:88),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117),
    at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:229),
    at okhttp3.RealCall.execute(RealCall.java:81),
    at retrofit2.OkHttpCall.execute(OkHttpCall.java:204),
    at io.github.resilience4j.retrofit.RetrofitCircuitBreaker$CircuitBreakingCall.execute(RetrofitCircuitBreaker.java:114),
    at com.therandomlabs.curseapi.util.RetrofitUtils.lambda$execute$39f5113e$1(RetrofitUtils.java:99),
    at io.github.resilience4j.retry.Retry.lambda$decorateCheckedSupplier$3f69f149$1(Retry.java:137),
    at io.vavr.control.Try.of(Try.java:75),
    at com.therandomlabs.curseapi.util.RetrofitUtils.execute(RetrofitUtils.java:98),
    ... 9 more,
com.therandomlabs.curseapi.CurseException: Failed to execute request: Request{method=GET, url=https://addons-ecs.forgesvc.net/api/v2/addon/15947/files, tags={class retrofit2.Invocation=com.therandomlabs.curseapi.forgesvc.ForgeSvc.getFiles() [15947]}},
    at com.therandomlabs.curseapi.util.RetrofitUtils.execute(RetrofitUtils.java:119),
    at com.therandomlabs.curseapi.forgesvc.ForgeSvcProvider.files(ForgeSvcProvider.java:121),
    at com.therandomlabs.curseapi.CurseAPI.lambda$files$5(CurseAPI.java:224),
    at com.therandomlabs.curseapi.CurseAPI.get(CurseAPI.java:679),
    at com.therandomlabs.curseapi.CurseAPI.files(CurseAPI.java:224),
    at com.therandomlabs.curseapi.forgesvc.ForgeSvcProject.files(ForgeSvcProject.java:182),
    at com.therandomlabs.curseapi.forgesvc.ForgeSvcProject.refreshFiles(ForgeSvcProject.java:202),
    at de.erdbeerbaerlp.curseforge.CurseForgeUpdateThread.run(CurseForgeUpdateThread.java:45),
    at java.base/java.util.TimerThread.mainLoop(Timer.java:556),
    at java.base/java.util.TimerThread.run(Timer.java:506),
Caused by: java.net.SocketTimeoutException: timeout,
    at okhttp3.internal.http2.Http2Stream$StreamTimeout.newTimeoutException(Http2Stream.java:678),
    at okhttp3.internal.http2.Http2Stream$StreamTimeout.exitAndThrowIfTimedOut(Http2Stream.java:686),
    at okhttp3.internal.http2.Http2Stream.takeHeaders(Http2Stream.java:154),
    at okhttp3.internal.http2.Http2ExchangeCodec.readResponseHeaders(Http2ExchangeCodec.java:136),
    at okhttp3.internal.connection.Exchange.readResponseHeaders(Exchange.java:115),
    at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:94),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:43),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117),
    at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:94),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117),
    at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:88),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117),
    at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:229),
    at okhttp3.RealCall.execute(RealCall.java:81),
    at retrofit2.OkHttpCall.execute(OkHttpCall.java:204),
    at io.github.resilience4j.retrofit.RetrofitCircuitBreaker$CircuitBreakingCall.execute(RetrofitCircuitBreaker.java:114),
    at com.therandomlabs.curseapi.util.RetrofitUtils.lambda$execute$39f5113e$1(RetrofitUtils.java:99),
    at io.github.resilience4j.retry.Retry.lambda$decorateCheckedSupplier$3f69f149$1(Retry.java:137),
    at io.vavr.control.Try.of(Try.java:75),
    at com.therandomlabs.curseapi.util.RetrofitUtils.execute(RetrofitUtils.java:98),
    ... 9 more,
com.therandomlabs.curseapi.CurseException: Failed to execute request: Request{method=GET, url=https://addons-ecs.forgesvc.net/api/v2/addon/326516/files, tags={class retrofit2.Invocation=com.therandomlabs.curseapi.forgesvc.ForgeSvc.getFiles() [326516]}},
    at com.therandomlabs.curseapi.util.RetrofitUtils.execute(RetrofitUtils.java:119),
    at com.therandomlabs.curseapi.forgesvc.ForgeSvcProvider.files(ForgeSvcProvider.java:121),
    at com.therandomlabs.curseapi.CurseAPI.lambda$files$5(CurseAPI.java:224),
    at com.therandomlabs.curseapi.CurseAPI.get(CurseAPI.java:679),
    at com.therandomlabs.curseapi.CurseAPI.files(CurseAPI.java:224),
    at com.therandomlabs.curseapi.forgesvc.ForgeSvcProject.files(ForgeSvcProject.java:182),
    at com.therandomlabs.curseapi.forgesvc.ForgeSvcProject.refreshFiles(ForgeSvcProject.java:202),
    at de.erdbeerbaerlp.curseforge.CurseForgeUpdateThread.run(CurseForgeUpdateThread.java:45),
    at java.base/java.util.TimerThread.mainLoop(Timer.java:556),
    at java.base/java.util.TimerThread.run(Timer.java:506),
Caused by: java.net.SocketTimeoutException: timeout,
    at okhttp3.internal.http2.Http2Stream$StreamTimeout.newTimeoutException(Http2Stream.java:678),
    at okhttp3.internal.http2.Http2Stream$StreamTimeout.exitAndThrowIfTimedOut(Http2Stream.java:686),
    at okhttp3.internal.http2.Http2Stream.takeHeaders(Http2Stream.java:154),
    at okhttp3.internal.http2.Http2ExchangeCodec.readResponseHeaders(Http2ExchangeCodec.java:136),
    at okhttp3.internal.connection.Exchange.readResponseHeaders(Exchange.java:115),
    at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:94),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:43),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117),
    at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:94),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117),
    at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:88),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142),
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117),
    at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:229),
    at okhttp3.RealCall.execute(RealCall.java:81),
    at retrofit2.OkHttpCall.execute(OkHttpCall.java:204),
    at io.github.resilience4j.retrofit.RetrofitCircuitBreaker$CircuitBreakingCall.execute(RetrofitCircuitBreaker.java:114),
    at com.therandomlabs.curseapi.util.RetrofitUtils.lambda$execute$39f5113e$1(RetrofitUtils.java:99),
    at io.github.resilience4j.retry.Retry.lambda$decorateCheckedSupplier$3f69f149$1(Retry.java:137),
    at io.vavr.control.Try.of(Try.java:75),
    at com.therandomlabs.curseapi.util.RetrofitUtils.execute(RetrofitUtils.java:98),
    ... 9 more,

The cache is updated, but the message is not sent =(