Skip to content

Commit c1a62b6

Browse files
committed
fix: stop retrying unchanged telegram edits
Handle BadRequest before NetworkError in the message queue. Treat Telegram's 'message is not modified' response as a successful no-op edit instead of a retryable network failure. This prevents pointless retries and dead-letter churn for unchanged status updates.
1 parent aea64b7 commit c1a62b6

File tree

1 file changed

+17
-8
lines changed

1 file changed

+17
-8
lines changed

dumpyarabot/message_queue.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from pydantic import BaseModel, Field, model_validator
1010
from rich.console import Console
1111
from telegram import Bot
12-
from telegram.error import RetryAfter, TelegramError, NetworkError
12+
from telegram.error import RetryAfter, TelegramError, NetworkError, BadRequest
1313
import telegram
1414

1515
from dumpyarabot.config import settings
@@ -505,13 +505,22 @@ async def _process_message(self, message: QueuedMessage) -> bool:
505505
console.print(f"[green]Successfully processed {message.type.value} message[/green]")
506506
return True
507507

508-
except RetryAfter as e:
509-
console.print(f"[yellow]Rate limited by Telegram API. Retry after {e.retry_after} seconds[/yellow]")
510-
# Re-queue the message with a delay
511-
message.scheduled_for = datetime.now(timezone.utc) + timedelta(seconds=e.retry_after)
512-
await self._requeue_message(message)
513-
return True # Don't increment retry count for rate limits
514-
508+
except RetryAfter as e:
509+
console.print(f"[yellow]Rate limited by Telegram API. Retry after {e.retry_after} seconds[/yellow]")
510+
# Re-queue the message with a delay
511+
message.scheduled_for = datetime.now(timezone.utc) + timedelta(seconds=e.retry_after)
512+
await self._requeue_message(message)
513+
return True # Don't increment retry count for rate limits
514+
515+
except BadRequest as e:
516+
error_text = str(e)
517+
if "message is not modified" in error_text.lower():
518+
console.print("[yellow]Skipping no-op edit: message content is unchanged[/yellow]")
519+
return True
520+
521+
console.print(f"[red]Telegram bad request processing message: {e}[/red]")
522+
return False
523+
515524
except NetworkError as e:
516525
console.print(f"[yellow]Network error processing message: {e}[/yellow]")
517526
message.retry_count += 1

0 commit comments

Comments
 (0)