es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Una solicitud a la API de Telegram fue fallida. Código de error: 400. Descripción: Solicitud inválida: el mensaje es demasiado largo.

Estoy tratando de obtener mensajes de los subreddits de Reddit usando PRAW. Funciona correctamente en la mayoría de los casos, pero estoy obteniendo el siguiente error que indica que el mensaje es demasiado largo. Estoy usando pytelegrambotApi.

Fragmento de código:

import praw
import telebot

bot = telebot.TeleBot(token)

reddit = praw.Reddit(
    client_id=client, # Estos detalles se proporcionan y son correctos. No hay errores aquí.
    client_secret=secret,
    user_agent="user_agent",
)

def get_posts(sub):
   for submission in reddit.subreddit(sub).hot(limit=10):
    print(submission)
    if submission.author.is_mod:
      continue
    elif submission.selftext=="":
      return submission.title,submission.url
    else:
      print("Está funcionando")
      print(submission.url)
      return submission.title,submission.selftext 

@bot.message_handler(func=lambda message: True)
def echo_message(message):
    subreddit = message.text
    title,post = get_posts(subreddit)
    m = title + "\n" + post
    bot.reply_to(message,m)

bot.infinity_polling()

Error:
Error
¿Hay alguna forma de acceder al mensaje completo? ¿Hay alguna solución alternativa que pueda hacer aquí?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error “TelegramError: Mensaje demasiado largo” es causado cuando el mensaje que estás intentando enviar a través de pytelegrambotAPI excede el límite de caracteres que se pueden enviar en un solo mensaje, que actualmente está establecido en 4096 caracteres.

    Para solucionar este problema, puedes dividir el mensaje en fragmentos más pequeños y enviarlos por separado utilizando el método telegram.send_message. Así es como puedes modificar tu función echo_message para dividir el mensaje:

    @bot.message_handler(func=lambda message: True)
    def echo_message(message):
        subreddit = message.text
        title, post = get_posts(subreddit)
        message_chunks = [(title + "\n" + post)[i:i+4096] for i in range(0, len(title+post), 4096)]
        for chunk in message_chunks:
            bot.send_message(message.chat.id, chunk)
    

    Este código dividirá el mensaje en fragmentos de 4096 caracteres o menos y los enviará por separado utilizando el método bot.send_message. Esto debería solucionar el problema de que el mensaje sea demasiado largo para enviarlo a través de Telegram.

Comments are closed.