Выбросы сообщений телемарафона 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 час), а затем пересылать сохраненные сообщения в другое время.

Ни pickleDB, ни dill библиотеки не могут сохранять объект сообщения:

TypeError: невозможно обработать объект _asyncio.Future

Я прочитал много связанных вопросов, но ни один из них мне не помог. Есть ли у вас какие-либо идеи? Если эта проблема связана с pickleDB, есть ли библиотеки, в которых этой проблемы нет?


person Ayub    schedule 18.01.2021    source источник
comment
вы все равно нашли для этой акции?   -  person Purya    schedule 14.02.2021
comment
Нашел временное решение. Прочтите мой ответ.   -  person Ayub    schedule 14.02.2021


Ответы (1)


Я еще не нашел решения для сброса телемарафона Message в pickleDB, но в качестве временного / альтернативного решения я могу сохранить идентификатор сообщения и идентификатор чата (которому принадлежит сообщение):

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

А затем перешлите это сообщение с этими двумя идентификаторами.

await client.forward_messages(entity, message_id, chat_id)
person Ayub    schedule 14.02.2021