Сохранить сообщение в телеграмм боте в базу данных
Как удобнее всего сохранить допустим сообщение со всеми изображениями, видео, с форматом ссылок. Допустим есть сообщение:
В формате 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 разпарси.
