我正试图使用python Telegram bot创建一个Telegram bot,它将读取一条大消息(约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将消息分割成4096(最大消息大小(的块
收到长度为4096 的消息
收到长度为4096 的消息
收到长度为4095的消息(不确定为什么是4095(
收到长度为24 的消息
我如何修改机器人程序,以便尽管消息是以块的形式发送的,但我能够将所有这些组合起来创建单个原始消息,而不修改格式。
我最初的想法是创建一个全局变量,并将每个消息块附加到一个列表中,但除了发送/startMessage和/endMessage这样的命令来表示消息何时发送之外,我不知道如何实现这一点。这种方法似乎效率不高。
一个想法可以是使用一个全局变量并将所有chunck附加到该变量,使用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)
问题可能是当你认为消息已结束以便重新发送、存储或处理时。这不是一个很好的解决方案,但你可以在else
条件下认为前一条消息已结束,或者你可以检查chuck是否<4095-4096,或者再次在消息的末尾添加一个特殊字符