Сохранить сообщение в телеграмм боте в базу данных

Как удобнее всего сохранить допустим сообщение со всеми изображениями, видео, с форматом ссылок. Допустим есть сообщение:

введите сюда описание изображения

В формате json оно выглядит вот так.

    {
   "message_id":3410,
   "from":{
      "id":1905459018,
      "is_bot":false,
      "first_name":"Соня",
      "last_name":"Мармеладова",
      "username":"topskiyyy",
      "language_code":"ru"
   },
   "chat":{
      "id":1905459018,
      "first_name":"Соня",
      "last_name":"Мармеладова",
      "username":"topskiyyy",
      "type":"private"
   },
   "date":1645194239,
   "forward_from_chat":{
      "id":-1001237513492,
      "title":"Топор 18+",
      "type":"channel"
   },
   "forward_from_message_id":26967,
   "forward_date":1645180206,
   "photo":[
      {
         "file_id":"AgACAgIAAxkBAAINUmIPq_-7_NuN8yOPnW5xRZzptGo7AALcuDEbWz2ASBCdi80PEHIlAQADAgADcwADIwQ",
         "file_unique_id":"AQAD3LgxG1s9gEh4",
         "file_size":1322,
         "width":90,
         "height":51
      },
      {
         "file_id":"AgACAgIAAxkBAAINUmIPq_-7_NuN8yOPnW5xRZzptGo7AALcuDEbWz2ASBCdi80PEHIlAQADAgADbQADIwQ",
         "file_unique_id":"AQAD3LgxG1s9gEhy",
         "file_size":15716,
         "width":320,
         "height":182
      },
      {
         "file_id":"AgACAgIAAxkBAAINUmIPq_-7_NuN8yOPnW5xRZzptGo7AALcuDEbWz2ASBCdi80PEHIlAQADAgADeAADIwQ",
         "file_unique_id":"AQAD3LgxG1s9gEh9",
         "file_size":24634,
         "width":550,
         "height":312
      }
   ],
   "caption":"Переболевшие ковидом на 40% больше подвержены риску развития депрессии. \n\nУчёные из университета Сент-Луиса провели исследование и пришли к выводу, что после ковида у многих наблюдается депрессия, тревожность, апатия и суицидальные настроения. Это может быть связано с повреждением кровеносных сосудов и нейронов в голове.\n\n? Топор +18",
   "caption_entities":[
      {
         "type":"bold",
         "offset":0,
         "length":70
      },
      {
         "type":"text_link",
         "offset":324,
         "length":12,
         "url":"https://t.me/+XS5ugsn-4nMyMDEy"
      }
   ]
}

Вот так добавляю сообщение в бд

messages = media_groups[mg_id]
    mg = types.MediaGroup()
    posts = []
    for m in messages:
        if m.video:
            text = m.html_text if (m.text or m.caption) else None
            mg.attach_video(m.video.file_id, caption=text)

            file_id = m.video.file_id
            path = f"tmps/video.{m.video.file_id}.in.mp4"
            await bot.download_file_by_id(file_id, path)
            posts.append(path)
        else:
            text = m.html_text if (m.text or m.caption) else None
            mg.attach_photo(m.photo[0].file_id, text)

            path = f"tmps/photo.{m.photo[-1].file_id}.png"
            await m.photo[-1].download(path)
            posts.append(path)

    post = Post.select().where(Post.id == post_id).get()
    post.media = json.dumps(posts)
    post.text = user_id.caption
    post.save()

После чего его отправляю. Но хочется найти метод сохранения получше, например с помощью сериализации класса Message

И вот мне нужно взять это сообщение и занести в базу данных, после чего в определенное время его опубликовать.


Ответы (1 шт):

Автор решения: oleksandrigo

Я думаю самый простой возможный способ - это json.dumps. Просто приведи весь джисон к строке и сохрани это. Потом через json.loads разпарси.

→ Ссылка