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,或者再次在消息末尾添加一个特殊字符
我正在尝试使用 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,或者再次在消息末尾添加一个特殊字符