refactor MediaGroup. Add database

This commit is contained in:
KatykhinAA
2024-07-20 16:54:43 +03:00
parent 54234e59ec
commit 0b7f718f8a
11 changed files with 193 additions and 92 deletions

View File

@@ -55,30 +55,19 @@ async def post_for_group(call: CallbackQuery, state: FSMContext):
logger.error(f'Ошибка при публикации фотографии в канал {MAIN_PUBLIC}: {str(e)}')
await call.answer(text='Что-то пошло не так!', show_alert=True, cache_time=3)
elif call.message.text == "^":
user_data = await state.get_data()
# Получаем контент медиагруппы и текст для публикации
post_content = BotDB.get_post_content_from_telegram_by_last_id(call.message.message_id)
post_text = BotDB.get_post_text_from_telegram_by_last_id(call.message.message_id)
# Получаем идентификатор последнего предложенного сообщения из кэша
help_message = get_help_message_id(call.message.message_id, user_data)
# Получаем идентификатор медиагруппы
media_group_id = help_message - 1
# Получаем контент медиагруппы и текст
post_content = BotDB.get_post_content_from_telegram_by_last_id(media_group_id)
post_text = BotDB.get_post_text_from_telegram_by_last_id(media_group_id)
post_ids = BotDB.get_post_ids_from_telegram_by_last_id(media_group_id)
# Преобразуем результат в список
# Готовим список для удаления
post_ids = BotDB.get_post_ids_from_telegram_by_last_id(call.message.message_id)
message_ids = [row[0] for row in post_ids]
# Добавляем help_message в список
message_ids.append(help_message)
message_ids.append(call.message.message_id)
# Выкладываем пост в канал
await send_media_group_to_channel(bot=call.bot, chat_id=MAIN_PUBLIC, post_content=post_content,
post_text=post_text)
# TODO: Удалить фотки с локалки
# TODO: Поменять чтобы записывалось не в FSM
# TODO: Удалить фотки с локалки после выкладки?
await call.bot.delete_messages(chat_id=GROUP_FOR_POST, message_ids=message_ids)
await call.answer(text='Выложено!', show_alert=True, cache_time=3)
@@ -96,9 +85,12 @@ async def decline_post_for_group(call: CallbackQuery, state: FSMContext):
f'Сообщение отклонено админом {call.from_user.full_name} (ID: {call.from_user.id}).')
await call.answer(text='Отклонено!', show_alert=True, cache_time=3)
if call.message.text == '^':
user_data = await state.get_data()
media_group_message_id = get_help_message_id(call.message.message_id, user_data)
await call.bot.delete_message(chat_id=MAIN_PUBLIC, message_id=media_group_message_id)
post_ids = BotDB.get_post_ids_from_telegram_by_last_id(call.message.message_id)
message_ids = [row[0] for row in post_ids]
message_ids.append(call.message.message_id)
await call.bot.delete_messages(chat_id=GROUP_FOR_POST, message_ids=message_ids)
await call.answer(text='Удалено!', show_alert=True, cache_time=3)
except Exception as e:
await call.bot.send_message(IMPORTANT_LOGS,
f"Произошла ошибка: {str(e)}\n\nTraceback:\n{traceback.format_exc()}")

View File

@@ -161,6 +161,7 @@ async def suggest_router(message: types.Message, state: FSMContext, album: list
f"Вызов функции suggest_router. Пользователь: {message.from_user.id} Имя автора сообщения: {message.from_user.full_name}")
try:
if message.content_type == 'text':
print(message.content_type)
lower_text = message.text.lower()
# Получаем текст сообщения и преобразовываем его по правилам
post_text = get_text_message(lower_text, message.from_user.full_name,
@@ -179,6 +180,7 @@ async def suggest_router(message: types.Message, state: FSMContext, album: list
await state.set_state("START")
elif message.content_type == 'photo' and message.media_group_id is None:
print(message.content_type)
lower_caption = message.caption.lower()
markup = get_reply_keyboard_for_post()
# Получаем текст сообщения и преобразовываем его по правилам
@@ -197,7 +199,10 @@ async def suggest_router(message: types.Message, state: FSMContext, album: list
elif message.media_group_id is not None:
post_caption = " "
#TODO: Поставить запрет на обработку любых типов кроме photo. Запретить работать с forward message
if message.content_type != 'photo':
await message.bot.send_message(message.chat.id,
'Я пока не умею работать с таким сообщением. '
'Пришли текст и фото/фоты(ы)')
# Получаем сообщение и проверяем есть ли подпись. Если подпись есть, то преобразуем ее через функцию
if album[0].caption:
@@ -217,7 +222,7 @@ async def suggest_router(message: types.Message, state: FSMContext, album: list
help_message_id = await send_text_message(GROUP_FOR_POST, message, "^", markup)
# Записываем в state идентификаторы текстового сообщения И последнего сообщения медиагруппы
await state.update_data(media_group_message_id=media_group_message_id, help_message_id=help_message_id)
BotDB.update_helper_message_in_db(message_id=media_group_message_id, helper_message_id=help_message_id)
# Получаем клавиатуру для пользователя, благодарим за пост, и возвращаем в дефолтное сообщение
markup_for_user = get_reply_keyboard(BotDB, message.from_user.id)
@@ -225,6 +230,7 @@ async def suggest_router(message: types.Message, state: FSMContext, album: list
await message.answer(success_send_message, reply_markup=markup_for_user)
await state.set_state("START")
else:
print(f'Тип: {message.content_type}')
await message.bot.send_message(message.chat.id,
'Я пока не умею работать с таким сообщением. Пришли текст и фото/фоты(ы)')
except Exception as e: