Pickle Telethon 消息抛出“无法pickle '_asyncio.Future' 对象”

问题描述

messages = []

async def save_messages():
   async for dialog in client.iter_dialogs():
       async for msg in client.iter_messages(dialog):
           messages.append(msg)
           with open("data.db",'wb') as f:
               pickle.dump(messages,f) # "TypeError: cannot pickle '_asyncio.Future' object"
               print("saved to database")


client = TelegramClient('Session',config.api_id,config.api_hash)
client.start()
client.loop.run_until_complete(save_messages())

Telethon一个名为:forward_message方法,我可以通过它转发消息。我想定期save_messages(例如每 1 小时),然后在其他时间转发保存的消息。

pickleDBdill 库都不能保存消息对象:

"TypeError: 不能pickle '_asyncio.Future' 对象"

我阅读了很多相关问题,但没有一个我有帮助。你有什么主意吗?如果此问题与 pickleDB 相关,是否有任何库没有此问题?

解决方法

我还没有找到在 pickleDB 中转储 Telethon Message 的任何解决方案,但作为临时/替代解决方案,我可以存储消息 ID 和聊天 ID(消息所属):>

async for dialog in client.iter_dialogs():
   async for msg in client.iter_messages(dialog):
      db.save_message(msg.id,msg.chat.id)

然后使用这两个 ID 转发该消息

await client.forward_messages(entity,message_id,chat_id)