@skrat ты можешь узнать это через бота достю в дискорде командой !Playerstats nickname
upd: а, ну только глобал и 1х1

@skrat ты можешь узнать это через бота достю в дискорде командой !Playerstats nickname
upd: а, ну только глобал и 1х1

The issue was on our side ( xd ) — we needed to remove the GitHub Copilot entries from the hosts file
thank you all!
/thread
so:
Without a VPN, my IP address is 123.
With a US VPN, my IP address is 321.
With another VPN, it’s 222.
Four of my friends, under the same conditions, have even more IP combinations.
However, when accessing the API
https://api.github.com/repos/FAForever/Neroxis-Map-Generator/releases,
we all get the same error:
{"message":"API rate limit exceeded for 144.31.14.104"}
We don’t know what the IP address 144.31.14.104 is, as it doesn’t belong to any of us.
@magge But my friends are getting exactly the same error with the same IP address, and he dont use VPN. Likewise, I also get the same error without using a VPN, from that same Dutch IP (144.31.14.104), which is not associated with me or my friends in any way.
When I visit the link https://api.github.com/repos/FAForever/Neroxis-Map-Generator/releases, I get the message:
{"message":"API rate limit exceeded for 144.31.14.104. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.)","documentation_url":"https://docs.github.com/rest/overview/resources-in-the-rest-api#rate-limiting"}
The IP is Dutch, which I assume belongs to the launcher servers. So, if I understand correctly, the launcher has exceeded the GitHub API rate limit.
Yes, I’ve tried German, Dutch, and US VPNs (and, just in case, a Moscow-based VPN xd)
The issue started about two weeks ago and seems to be intermittent — very rarely, but occasionally, I’m able to create a map without encountering this error.
I’m not very knowledgeable in this area, but it seems to me that the problem is not related to blocking or restrictions on our side.
FYI: We bypass DPI checks using third-party tools (not VPNs), but they don’t affect the generator either.
If I can provide any additional logs that might help resolve the issue, please let me know!
I’m changing my IP address using a VPN, but the problem still persists. I think roughly a third of the Russian-speaking community is experiencing the same issue right now — possibly not only Russian-speaking users, but I don’t really have anyone else to ask.
Does anyone have any advice on how this can be worked around? A friend tried installing a generator from GitHub and generating the maps locally, but for some reason it didn’t work.
@Sheikah I forgot to mention this in the post, thanks for good point. I have access to GitHub both with and without a VPN; it isn’t blocked in Russia. However, the generator still doesn’t work, regardless of whether the VPN is on or off.
When clicking the “Generate Map” button in the FAF launcher (version 2025.11.3), the operation fails with a 403 Forbidden error. The launcher attempts to fetch data from the GitHub API endpoint:
https://api.github.com/repos/FAForever/Neroxis-Map-Generator/releases
but receives a “403 Forbidden” response.
In a sample of 7 friends from russia, 4 have this problem =(
Client Version: 2025.11.3
org.springframework.web.reactive.function.client.WebClientResponseException$Forbidden: 403 Forbidden from GET https://api.github.com/repos/FAForever/Neroxis-Map-Generator/releases
at org.springframework.web.reactive.function.client.WebClientResponseException.create(WebClientResponseException.java:323)
Suppressed: The stacktrace has been enhanced by Reactor, refer to additional information below:
Error has been observed at the following site(s):
*__checkpoint ⇢ 403 FORBIDDEN from GET https://api.github.com/repos/FAForever/Neroxis-Map-Generator/releases [DefaultWebClient]
Original Stack Trace:
at org.springframework.web.reactive.function.client.WebClientResponseException.create(WebClientResponseException.java:323)
at org.springframework.web.reactive.function.client.DefaultClientResponse.lambda$createException$1(DefaultClientResponse.java:214)
at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:106)
at reactor.core.publisher.FluxOnErrorReturn$ReturnSubscriber.onNext(FluxOnErrorReturn.java:162)
at reactor.core.publisher.FluxDefaultIfEmpty$DefaultIfEmptySubscriber.onNext(FluxDefaultIfEmpty.java:122)
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:129)
at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onNext(FluxContextWrite.java:107)
at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onNext(FluxMapFuseable.java:299)
at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.onNext(FluxFilterFuseable.java:337)
at reactor.core.publisher.Operators$BaseFluxToMonoOperator.completePossiblyEmpty(Operators.java:2096)
at reactor.core.publisher.MonoCollect$CollectSubscriber.onComplete(MonoCollect.java:145)
at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:144)
at reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:260)
at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:144)
at reactor.netty.channel.FluxReceive.onInboundComplete(FluxReceive.java:413)
at reactor.netty.channel.ChannelOperations.onInboundComplete(ChannelOperations.java:464)
at reactor.netty.channel.ChannelOperations.terminate(ChannelOperations.java:518)
at reactor.netty.http.client.HttpClientOperations.onInboundNext(HttpClientOperations.java:925)
at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:115)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436)
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318)
at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1519)
at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1377)
at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1428)
at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:530)
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:469)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868)
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:796)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:732)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:658)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.base/java.lang.Thread.run(Thread.java:1474)

I also duplicated it in the technical channel in the discord, because I'm not sure where to write it more correctly.