@@ -28,6 +28,7 @@ import (
2828)
2929
3030const telegramThinkingMessage = "🤔 thinking..."
31+ const telegramMaxMessageLength = 3000
3132
3233type Telegram struct {
3334 Token string
@@ -218,6 +219,14 @@ func formatResponseWithURLs(response string, urls []string) string {
218219func (t * Telegram ) handleUpdate (ctx context.Context , b * bot.Bot , a * agent.Agent , update * models.Update ) {
219220 username := update .Message .From .Username
220221
222+ internalError := func (err error , msg * models.Message ) {
223+ xlog .Error ("Error updating final message" , "error" , err )
224+ b .EditMessageText (ctx , & bot.EditMessageTextParams {
225+ ChatID : update .Message .Chat .ID ,
226+ MessageID : msg .ID ,
227+ Text : "there was an internal error. try again!" ,
228+ })
229+ }
221230 if len (t .admins ) > 0 && ! slices .Contains (t .admins , username ) {
222231 xlog .Info ("Unauthorized user" , "username" , username )
223232 _ , err := b .SendMessage (ctx , & bot.SendMessageParams {
@@ -334,19 +343,38 @@ func (t *Telegram) handleUpdate(ctx context.Context, b *bot.Bot, a *agent.Agent,
334343 }
335344
336345 // Update the message with the final response
346+ formattedResponse := formatResponseWithURLs (res .Response , urls )
347+
348+ // Split the message if it's too long
349+ messages := xstrings .SplitParagraph (formattedResponse , telegramMaxMessageLength )
350+
351+ if len (messages ) == 0 {
352+ internalError (errors .New ("empty response from agent" ), msg )
353+ return
354+ }
355+
356+ // Update the first message
337357 _ , err = b .EditMessageText (ctx , & bot.EditMessageTextParams {
338358 ChatID : update .Message .Chat .ID ,
339359 MessageID : msg .ID ,
340- Text : formatResponseWithURLs ( res . Response , urls ) ,
360+ Text : messages [ 0 ] ,
341361 ParseMode : models .ParseModeMarkdown ,
342362 })
343363 if err != nil {
344- xlog .Error ("Error updating final message" , "error" , err )
345- b .EditMessageText (ctx , & bot.EditMessageTextParams {
364+ internalError (fmt .Errorf ("internal error: %w" , err ), msg )
365+ return
366+ }
367+
368+ // Send additional chunks as new messages
369+ for i := 1 ; i < len (messages ); i ++ {
370+ _ , err = b .SendMessage (ctx , & bot.SendMessageParams {
346371 ChatID : update .Message .Chat .ID ,
347- MessageID : msg . ID ,
348- Text : "there was an internal error. try again!" ,
372+ Text : messages [ i ] ,
373+ ParseMode : models . ParseModeMarkdown ,
349374 })
375+ if err != nil {
376+ internalError (fmt .Errorf ("internal error: %w" , err ), msg )
377+ }
350378 }
351379}
352380
0 commit comments