@@ -74,6 +74,8 @@ type TelegramReactionOpts = {
7474
7575const PARSE_ERR_RE = / c a n ' t p a r s e e n t i t i e s | p a r s e e n t i t i e s | f i n d e n d o f t h e e n t i t y / i;
7676const THREAD_NOT_FOUND_RE = / 4 0 0 : \s * B a d R e q u e s t : \s * m e s s a g e t h r e a d n o t f o u n d / i;
77+ const MESSAGE_NOT_MODIFIED_RE =
78+ / 4 0 0 : \s * B a d R e q u e s t : \s * m e s s a g e i s n o t m o d i f i e d | M E S S A G E _ N O T _ M O D I F I E D / i;
7779const diagLogger = createSubsystemLogger ( "telegram/diagnostic" ) ;
7880
7981function createTelegramHttpLogger ( cfg : ReturnType < typeof loadConfig > ) {
@@ -182,6 +184,10 @@ function isTelegramThreadNotFoundError(err: unknown): boolean {
182184 return THREAD_NOT_FOUND_RE . test ( formatErrorMessage ( err ) ) ;
183185}
184186
187+ function isTelegramMessageNotModifiedError ( err : unknown ) : boolean {
188+ return MESSAGE_NOT_MODIFIED_RE . test ( formatErrorMessage ( err ) ) ;
189+ }
190+
185191function hasMessageThreadIdParam ( params ?: Record < string , unknown > ) : boolean {
186192 if ( ! params ) {
187193 return false ;
@@ -730,10 +736,15 @@ export async function editMessageTelegram(
730736 verbose : opts . verbose ,
731737 } ) ;
732738 const logHttpError = createTelegramHttpLogger ( cfg ) ;
733- const requestWithDiag = < T > ( fn : ( ) => Promise < T > , label ?: string ) =>
739+ const requestWithDiag = < T > (
740+ fn : ( ) => Promise < T > ,
741+ label ?: string ,
742+ shouldLog ?: ( err : unknown ) => boolean ,
743+ ) =>
734744 withTelegramApiErrorLogging ( {
735745 operation : label ?? "request" ,
736746 fn : ( ) => request ( fn , label ) ,
747+ shouldLog,
737748 } ) . catch ( ( err ) => {
738749 logHttpError ( label ?? "request" , err ) ;
739750 throw err ;
@@ -768,7 +779,12 @@ export async function editMessageTelegram(
768779 await requestWithDiag (
769780 ( ) => api . editMessageText ( chatId , messageId , htmlText , editParams ) ,
770781 "editMessage" ,
782+ ( err ) => ! isTelegramMessageNotModifiedError ( err ) ,
771783 ) . catch ( async ( err ) => {
784+ if ( isTelegramMessageNotModifiedError ( err ) ) {
785+ return ;
786+ }
787+
772788 // Telegram rejects malformed HTML. Fall back to plain text.
773789 const errText = formatErrorMessage ( err ) ;
774790 if ( PARSE_ERR_RE . test ( errText ) ) {
@@ -788,7 +804,13 @@ export async function editMessageTelegram(
788804 ? api . editMessageText ( chatId , messageId , text , plainParams )
789805 : api . editMessageText ( chatId , messageId , text ) ,
790806 "editMessage-plain" ,
791- ) ;
807+ ( plainErr ) => ! isTelegramMessageNotModifiedError ( plainErr ) ,
808+ ) . catch ( ( plainErr ) => {
809+ if ( isTelegramMessageNotModifiedError ( plainErr ) ) {
810+ return ;
811+ }
812+ throw plainErr ;
813+ } ) ;
792814 }
793815 throw err ;
794816 } ) ;
0 commit comments