babalae/better-genshin-impact · error · NotifierException
Telegram API request timed out. Check your internet connecti
Error message
Telegram API request timed out. Check your internet connection.
What it means
Wraps TaskCanceledException — fires when the HttpClient request exceeds the 30-second timeout configured in the ctor (or the task is explicitly cancelled). Indicates the request was sent but no timely response arrived.
Source
Thrown at BetterGenshinImpact/Service/Notifier/TelegramNotifier.cs:134
if (string.IsNullOrEmpty(content.Message)) throw new NotifierException("No message content to send");
try
{
if (content.Screenshot != null)
{
await SendImageMessageAsync(content.Screenshot, content.Message.Length < 1024 ? content.Message : null);
if (content.Message.Length < 1024) return;
}
await SendTextMessageAsync(content.Message);
}
catch (HttpRequestException ex)
{
throw new NotifierException("Network error sending Telegram notification: " + ex.Message);
}
catch (TaskCanceledException)
{
throw new NotifierException("Telegram API request timed out. Check your internet connection.");
}
catch (System.Exception ex) when (ex is not NotifierException)
{
throw new NotifierException("Error sending Telegram notification: " + ex.Message);
}
}
private async Task SendImageMessageAsync(Image<Rgb24> image, string? caption)
{
var endpoint = $"{TelegramApiBaseUrl}{TelegramBotToken}/sendPhoto";
using var memoryStream = new MemoryStream();
await image.SaveAsPngAsync(memoryStream);
memoryStream.Position = 0;
var content = new MultipartFormDataContent
{
{ new StreamContent(memoryStream), "photo", "image.png" },
{ new StringContent(TelegramChatId), "chat_id" }View on GitHub (pinned to a7cb36712d)
Solutions
- Confirm connectivity to api.telegram.org (or raise the timeout for large image uploads).
- If using a proxy, ensure it has adequate bandwidth and is not stalling.
- Consider increasing the 30s timeout for sendPhoto payloads.
- Implement one retry on TaskCanceledException before reporting failure.
Example fix
// before
_httpClient = new HttpClient(handler) { Timeout = TimeSpan.FromSeconds(30) };
// after — longer timeout for image-capable notifier + retry
_httpClient = new HttpClient(handler) { Timeout = TimeSpan.FromSeconds(60) };
// and in SendAsync:
// catch (TaskCanceledException) when (!cancellationToken.IsCancellationRequested)
// => transient timeout, retry once Defensive patterns
Strategy: retry
Try / catch
for (int attempt = 0; ; attempt++)
try { await telegramNotifier.SendAsync(data); break; }
catch (NotifierException ex) when (ex.Message.Contains("timed out") && attempt < 1)
{ await Task.Delay(TimeSpan.FromSeconds(5)); } Prevention
- Raise the HttpClient timeout for large image uploads.
- Ensure the proxy is not stalling.
- Retry once on timeout before surfacing.
When it happens
Trigger: _httpClient.SendAsync does not complete within TimeSpan.FromSeconds(30); the CancellationToken (none passed here) would also surface as TaskCanceledException.
Common situations: Slow/blocked network reaching Telegram; large screenshot upload over a throttled proxy; regional blocking causing TCP hangs; the 30s timeout too low for big images on poor links.
Understand the failure class
- Timeouts: ETIMEDOUT, deadlines, and hung requests — what actually expires when a request times out.
Related errors
- Network error sending Telegram notification: {ex.Message}
- 图片下载超时({DownloadTimeout.TotalSeconds:0} 秒)。
- Error sending MeoW message: {ex.Message}
- Error sending OneBot message: {ex.Message}
- Error sending ServerChan message: {ex.Message}
AI-assisted analysis of babalae/better-genshin-impact@a7cb36712d (2026-08-13).
Data as JSON: /api/errors/bc115598cde9d714.
Report an issue: GitHub.