Python Telegram 机器人读取大消息

Python Telegram Bot Read Large Message

我正在尝试使用 python-telegram-bot 创建一个 Telegram 机器人,它将读取一条大消息(~12K 个字符)并将输出保存到一个文件中。

我手上的相关代码是:

updater = Updater(token='XXXXXXXXXXXXXXXXXX')
dispatcher = updater.dispatcher

def runMe(update, context):
    received_message = update.message.text
    print("Received message with length %d" % len(received_message))
    # Save (full) message to file

arg_handler = MessageHandler(Filters.text, runMe)
dispatcher.add_handler(arg_handler)

然而,当我这样做时,Telegram 将消息分成 4,096(最大消息大小)的块

Received message with length 4096

Received message with length 4096

Received message with length 4095 (Not sure why this is 4095)

Received message with length 24

如何修改 bot,以便尽管消息以块的形式发送,但我能够将所有这些组合起来以创建单个原始消息而不修改格式。

我最初的想法是创建一个全局变量并将每个消息块附加到一个列表中,但我不确定如何通过发送 /startMessage 和 /endMessage 之类的命令来表示消息何时发送来实现这一点。这种方法似乎效率低下。

一个想法可能是使用全局变量并将所有块附加到该变量,使用 message_id 了解消息何时不同。

updater = Updater(token='XXXXXXXXXXXXXXXXXX')
dispatcher = updater.dispatcher

all_message = {
    message_id = 0
    text = ""
}

def runMe(update, context):
    global all_message
    if update.message.message_id == all_message["message_id"]:
        received_message = update.message.text
        all_message["text"] += received_message 
        print("Received message with length %d" % len(received_message))
        # Save (full) message to file
    else:
        all_message["message_id"] = update.message.message_id
        all_message["text"] += received_message

arg_handler = MessageHandler(Filters.text, runMe)
dispatcher.add_handler(arg_handler)

问题可能出在您认为 re-send 的消息结束时,存储或处理它。这不是一个很好的解决方案,但您可以考虑在进入 else 条件时结束上一条消息,或者您可以检查 chuck 是否 <4095-4096,或者再次在消息末尾添加一个特殊字符