From 095e0398d017ee2a1a2943e31818d4129ca1ff2c Mon Sep 17 00:00:00 2001 From: KatykhinAA Date: Thu, 18 Jul 2024 23:30:41 +0300 Subject: [PATCH] some fix --- database/db.py | 22 +++++- .../handlers/callback/callback_handlers.py | 30 ++++++-- .../handlers/private/private_handlers.py | 71 +++++++++--------- .../__pycache__/main.cpython-312.pyc | Bin 6436 -> 6480 bytes helper_bot/keyboards/main.py | 7 +- .../__pycache__/helper_func.cpython-312.pyc | Bin 13527 -> 12712 bytes helper_bot/utils/helper_func.py | 46 ++++++------ 7 files changed, 105 insertions(+), 71 deletions(-) diff --git a/database/db.py b/database/db.py index d5923bf..bd3c13c 100644 --- a/database/db.py +++ b/database/db.py @@ -856,11 +856,31 @@ class BotDB: result = self.cursor.execute("SELECT content_name " "FROM posts_from_telegram WHERE group_message_id = ?", (main_post,)) post_content = result.fetchall() - self.logger.info(f"Функция get_post_content_from_telegram_by_last_id получила текст поста: {post_content}") + self.logger.info(f"Функция get_post_content_from_telegram_by_last_id получила список контента: {post_content}") return post_content finally: self.close() + def get_post_ids_from_telegram_by_last_id(self, last_post_id: int): + self.logger.info( + f"Запуск функции get_post_ids_from_telegram_by_last_id, идентификатор поста {last_post_id}") + try: + self.connect() + main_post_sql = self.cursor.execute("SELECT group_message_id " + "FROM posts_from_telegram WHERE message_id = ?", (last_post_id,)) + main_post = main_post_sql.fetchone()[0] + except Exception as e: + self.logger.error(f"Ошибка в функции get_post_ids_from_telegram_by_last_id {str(e)}") + return False + try: + result = self.cursor.execute("SELECT message_id " + "FROM posts_from_telegram WHERE group_message_id = ?", (main_post,)) + post_ids = result.fetchall() + self.logger.info(f"Функция get_post_ids_from_telegram_by_last_id получила идентификаторы сообщений: {post_ids}") + return post_ids + finally: + self.close() + def get_post_text_from_telegram_by_last_id(self, last_post_id: int): self.logger.info(f"Запуск функции get_post_text_from_telegram_by_last_id, идентификатор поста {last_post_id}") try: diff --git a/helper_bot/handlers/callback/callback_handlers.py b/helper_bot/handlers/callback/callback_handlers.py index 888b4e9..66003a2 100644 --- a/helper_bot/handlers/callback/callback_handlers.py +++ b/helper_bot/handlers/callback/callback_handlers.py @@ -8,7 +8,7 @@ from helper_bot.keyboards.main import create_keyboard_with_pagination, get_reply create_keyboard_for_ban_reason from helper_bot.utils.base_dependency_factory import BaseDependencyFactory from helper_bot.utils.helper_func import send_text_message, send_photo_message, get_banned_users_list, \ - get_banned_users_buttons, delete_user_blacklist, get_help_message_id, send_media_group_with_caption + get_banned_users_buttons, delete_user_blacklist, get_help_message_id, send_media_group_to_channel from logs.custom_logger import logger callback_router = Router() @@ -56,21 +56,35 @@ async def post_for_group(call: CallbackQuery, state: FSMContext): await call.answer(text='Что-то пошло не так!', show_alert=True, cache_time=3) elif call.message.text == "^": user_data = await state.get_data() - # Получил идентификатор последнего предложенного сообщения из кэша + + # Получаем идентификатор последнего предложенного сообщения из кэша help_message = get_help_message_id(call.message.message_id, user_data) - media_group_id = help_message-1 + + # Получаем идентификатор медиагруппы + 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) - await send_media_group_with_caption(bot=call.bot, chat_id=MAIN_PUBLIC, post_content=post_content, post_text=post_text) - await call.answer(text='Выложено!', show_alert=True, cache_time=3) + post_ids = BotDB.get_post_ids_from_telegram_by_last_id(media_group_id) + # Преобразуем результат в список + message_ids = [row[0] for row in post_ids] + + # Добавляем help_message в список + message_ids.append(help_message) + + # Выкладываем пост в канал + await send_media_group_to_channel(bot=call.bot, chat_id=MAIN_PUBLIC, post_content=post_content, + post_text=post_text) + await call.bot.delete_messages(chat_id=GROUP_FOR_POST, message_ids=message_ids) + await call.answer(text='Выложено!', show_alert=True, cache_time=3) @callback_router.callback_query( F.data == "decline" ) async def decline_post_for_group(call: CallbackQuery, state: FSMContext): - logger.info( f'Получен callback-запрос с данными: {call.data} от пользователя {call.from_user.full_name} (ID: {call.from_user.id})') try: @@ -150,12 +164,12 @@ async def change_page(call: CallbackQuery): await call.bot.edit_message_reply_markup(chat_id=call.message.chat.id, message_id=call.message.message_id, reply_markup=keyboard) else: - #Готовим сообщения + # Готовим сообщения message_user = get_banned_users_list(int(page_number) * 7 - 7) await call.bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=message_user) - #Готовим клавиатуру + # Готовим клавиатуру buttons = get_banned_users_buttons() keyboard = create_keyboard_with_pagination(int(call.data[5:]), len(buttons), buttons, 'unlock') await call.bot.edit_message_reply_markup(chat_id=call.message.chat.id, message_id=call.message.message_id, diff --git a/helper_bot/handlers/private/private_handlers.py b/helper_bot/handlers/private/private_handlers.py index 7821d27..b3e51fa 100644 --- a/helper_bot/handlers/private/private_handlers.py +++ b/helper_bot/handlers/private/private_handlers.py @@ -17,10 +17,9 @@ from helper_bot.middlewares.blacklist_middleware import BlacklistMiddleware from helper_bot.utils import messages from helper_bot.utils.base_dependency_factory import BaseDependencyFactory from helper_bot.utils.helper_func import get_first_name, get_text_message, send_text_message, send_photo_message, \ - send_media_group_message, process_photo_album, check_username_and_full_name + send_media_group_message_to_private_chat, prepare_media_group_from_middlewares, check_username_and_full_name from logs.custom_logger import logger - private_router = Router() private_router.message.middleware(AlbumMiddleware()) @@ -65,8 +64,10 @@ async def handle_start_message(message: types.Message, state: FSMContext): is_need_update = check_username_and_full_name(user_id, username, full_name) if is_need_update: BotDB.update_username_and_full_name(user_id, username, full_name) - await message.answer(f"Давно не виделись! Вижу что ты изменился;) Теперь буду звать тебя: {full_name} и ник @{username}") - await message.bot.send_message(chat_id=GROUP_FOR_LOGS, text=f'Для пользователя: {user_id} обновлены данные в БД.\nНовое имя: {full_name}\nНовый ник:{username}') + await message.answer( + f"Давно не виделись! Вижу что ты изменился;) Теперь буду звать тебя: {full_name} и ник @{username}") + await message.bot.send_message(chat_id=GROUP_FOR_LOGS, + text=f'Для пользователя: {user_id} обновлены данные в БД.\nНовое имя: {full_name}\nНовый ник:{username}') sleep(1) BotDB.update_date_for_user(date, user_id) await state.set_state("START") @@ -161,57 +162,63 @@ async def suggest_router(message: types.Message, state: FSMContext, album: list try: if message.content_type == 'text': lower_text = message.text.lower() - post_text, is_anonymous = get_text_message(lower_text, message.from_user.full_name, - message.from_user.username) + # Получаем текст сообщения и преобразовываем его по правилам + post_text = get_text_message(lower_text, message.from_user.full_name, + message.from_user.username) + + # Получаем клавиатуру для поста markup = get_reply_keyboard_for_post() - if is_anonymous: - await send_text_message(GROUP_FOR_POST, message, post_text, markup) - else: - await send_text_message(GROUP_FOR_POST, message, post_text, markup) + + # Отправляем сообщение в приватный канал + await send_text_message(GROUP_FOR_POST, message, post_text, markup) + + # Отправляем юзеру ответ, что сообщение отравлено и возвращаем его в меню markup_for_user = get_reply_keyboard(BotDB, message.from_user.id) success_send_message = messages.get_message(get_first_name(message), 'SUCCESS_SEND_MESSAGE') await message.answer(success_send_message, reply_markup=markup_for_user) await state.set_state("START") + elif message.content_type == 'photo' and message.media_group_id is None: lower_caption = message.caption.lower() markup = get_reply_keyboard_for_post() - post_caption, is_anonymous = get_text_message(lower_caption, message.from_user.full_name, - message.from_user.username) - #TODO: тут какая-то шляпа - if is_anonymous: - await send_photo_message(GROUP_FOR_POST, message, - message.photo[-1].file_id, post_caption, markup) - else: - await send_photo_message(GROUP_FOR_POST, message, - message.photo[-1].file_id, post_caption, markup) + # Получаем текст сообщения и преобразовываем его по правилам + post_caption = get_text_message(lower_caption, message.from_user.full_name, + message.from_user.username) + + # Отправляем фото и текст в приватный канал + await send_photo_message(GROUP_FOR_POST, message, + message.photo[-1].file_id, post_caption, markup) + + # Отправляем юзеру ответ и возвращаем его в меню markup_for_user = get_reply_keyboard(BotDB, message.from_user.id) success_send_message = messages.get_message(get_first_name(message), 'SUCCESS_SEND_MESSAGE') await message.answer(success_send_message, reply_markup=markup_for_user) await state.set_state("START") + elif message.media_group_id is not None: post_caption = " " # Получаем сообщение и проверяем есть ли подпись. Если подпись есть, то преобразуем ее через функцию if album[0].caption: lower_caption = album[0].caption.lower() - post_caption, is_anonymous = get_text_message(lower_caption, message.from_user.full_name, - message.from_user.username) + post_caption = get_text_message(lower_caption, message.from_user.full_name, + message.from_user.username) - #Иначе обрабатываем фото и получаем медиагруппу - media_group = await process_photo_album(album, post_caption) + # Иначе обрабатываем фото и получаем медиагруппу + media_group = await prepare_media_group_from_middlewares(album, post_caption) - #Отправляем медиагруппу в секретный чат - media_group_message_id = await send_media_group_message(GROUP_FOR_POST, message, media_group) + # Отправляем медиагруппу в секретный чат + media_group_message_id = await send_media_group_message_to_private_chat(GROUP_FOR_POST, message, media_group) sleep(0.2) - #Получаем клавиатуру и отправляем еще одно текстовое сообщение с кнопками + # Получаем клавиатуру и отправляем еще одно текстовое сообщение с кнопками markup = get_reply_keyboard_for_post() help_message_id = await send_text_message(GROUP_FOR_POST, message, "^", markup) - #Записываем в state идентификаторы текстового сообщения И последнего сообщения медиагруппы + # Записываем в state идентификаторы текстового сообщения И последнего сообщения медиагруппы await state.update_data(media_group_message_id=media_group_message_id, help_message_id=help_message_id) - #Получаем клавиатуру для пользователя, благодарим за пост, и возвращаем в дефолтное сообщение + # Получаем клавиатуру для пользователя, благодарим за пост, и возвращаем в дефолтное сообщение markup_for_user = get_reply_keyboard(BotDB, message.from_user.id) success_send_message = messages.get_message(get_first_name(message), 'SUCCESS_SEND_MESSAGE') await message.answer(success_send_message, reply_markup=markup_for_user) @@ -283,11 +290,3 @@ async def resend_message_in_group_for_message(message: types.Message, state: FSM elif user_state == "CHAT": markup = get_reply_keyboard_leave_chat() await message.answer(question, reply_markup=markup) - -# @private_router.message( -# ChatTypeFilter(chat_type=["private"]) -# ) -# async def default(message: types.Message, state: FSMContext): -# markup = get_reply_keyboard(BotDB, message.from_user.id) -# await message.answer('Кажется ты заблудился. Держи клавиатуру, твое состояние сброшено на начало', reply_markup=markup) -# await state.set_state("START") diff --git a/helper_bot/keyboards/__pycache__/main.cpython-312.pyc b/helper_bot/keyboards/__pycache__/main.cpython-312.pyc index 08b8286aab727a0450bbe3b5ad1413cc0a2bba62..7c259e9328c3f4ea90d6fe5b137dc0b862a6895d 100644 GIT binary patch delta 195 zcmZ2tbis)CG%qg~0}z}po0)cGBJXW3HXw%?h(F($tS98pmcq1#c{S7IMj_Y9IgEUh zJA`;92e6Aw_7@e~yn)e%kui1hTPAh&FAPkqY#-PdSb5sL8@;EnUKh~1D4=zNS8;>n z7iLC58>swdeP%`=ce5eeK}I$ipe4mNlh29DEEeHlVp9fjb3ok9W?akI7ZlY1F? z8JQ**vdd4d78TokfzgJMF>*35v%1_94&Lh=N*6hlZV0Mwi2TCL$mziNg_VVs?E@DB zpXg*m3GvOP%+Hw^1vbaB9b{yb-Yn0d$i%3$*^%ow8>9ASPQgV?jNzNt2zxNG#RIJ_ lZk)VPSa!0WnD}NrvAv9pnVa8;b274WFbaJVoBT^63;?_OGfe;h diff --git a/helper_bot/keyboards/main.py b/helper_bot/keyboards/main.py index 41e238a..9318b99 100644 --- a/helper_bot/keyboards/main.py +++ b/helper_bot/keyboards/main.py @@ -5,9 +5,10 @@ from aiogram.utils.keyboard import ReplyKeyboardBuilder, InlineKeyboardBuilder def get_reply_keyboard_for_post(): builder = InlineKeyboardBuilder() builder.row(types.InlineKeyboardButton( - text="Опубликовать", callback_data="publish"), - types.InlineKeyboardButton( - text="Отклонить", callback_data="decline") + text="Опубликовать", callback_data="publish") + ) + builder.row(types.InlineKeyboardButton( + text="Отклонить", callback_data="decline") ) markup = builder.as_markup(resize_keyboard=True, one_time_keyboard=True) return markup diff --git a/helper_bot/utils/__pycache__/helper_func.cpython-312.pyc b/helper_bot/utils/__pycache__/helper_func.cpython-312.pyc index 229091afe3cfe694a3ba90c467751560242d136d..ca8051095e7ec670e013514f47cf4bb5307fe2c4 100644 GIT binary patch delta 4120 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 E3*oHrPXGV_ diff --git a/helper_bot/utils/helper_func.py b/helper_bot/utils/helper_func.py index 9dbd94b..2d800cb 100644 --- a/helper_bot/utils/helper_func.py +++ b/helper_bot/utils/helper_func.py @@ -27,17 +27,14 @@ def get_text_message(post_text: str, first_name: str, username: str): Returns: Кортеж из двух элементов: - Сформированный текст сообщения. - - Флаг, указывающий, является ли пост анонимным (True - анонимный, False - не анонимный). + - Флаг, указывающий, является ли пост анонимным (True - анонимный, False - не анонимный) """ if "неанон" in post_text or "не анон" in post_text: - is_anonymous = False - return f'Пост из ТГ:\n{post_text}\n\nАвтор поста: {first_name} @{username}', is_anonymous + return f'Пост из ТГ:\n{post_text}\n\nАвтор поста: {first_name} @{username}' elif "анон" in post_text: - is_anonymous = True - return f'Пост из ТГ:\n{post_text}\n\nПост опубликован анонимно', is_anonymous + return f'Пост из ТГ:\n{post_text}\n\nПост опубликован анонимно' else: - is_anonymous = False - return f'Пост из ТГ:\n{post_text}\n\nАвтор поста: {first_name} @{username}', is_anonymous + return f'Пост из ТГ:\n{post_text}\n\nАвтор поста: {first_name} @{username}' async def download_photo(message: types.Message, file_id: str): @@ -46,11 +43,11 @@ async def download_photo(message: types.Message, file_id: str): Args: message: сообщение - file_id: File ID фотографии. - filename: Имя файла, под которым будет сохранено фото. + file_id: File ID фотографии + filename: Имя файла, под которым будет сохранено фото Returns: - Путь к сохраненному файлу, если файл был скачан успешно, иначе None. + Путь к сохраненному файлу, если файл был скачан успешно, иначе None """ try: file = await message.bot.get_file(file_id) @@ -62,29 +59,30 @@ async def download_photo(message: types.Message, file_id: str): return None -async def process_photo_album(album, post_caption: str = ''): +async def prepare_media_group_from_middlewares(album, post_caption: str = ''): """ - Создает список InputMediaPhoto для альбома. + Создает MediaGroup. Args: album: Album объект из Telegram API. post_caption: Текст подписи к первому фото. Returns: - Список InputMediaPhoto. + Список InputMediaPhoto (MediaGroup). """ - photo_media = [] - #Циклом проходимся по собранному миддлварью объекту album + media_group = [] + # Циклом проходимся по собранному миддлварью объекту album + for i, message in enumerate(album): file_id = message.photo[-1].file_id - file_path = await download_photo(message, file_id=file_id) + # Если это последняя фото в массиве, то добавляем подпись. Остальные фото просто преобразуем в InputMediaPhoto # и формируем объект MediaGroup if i == len(album) - 1: - photo_media.append(InputMediaPhoto(media=message.photo[-1].file_id, caption=post_caption)) + media_group.append(InputMediaPhoto(media=file_id, caption=post_caption)) else: - photo_media.append(InputMediaPhoto(media=message.photo[-1].file_id)) - return photo_media # Возвращаем идентификатор медиа-группы + media_group.append(InputMediaPhoto(media=file_id)) + return media_group # Возвращаем MediaGroup async def add_in_db_media(sent_message, post_caption: str = ''): @@ -111,7 +109,8 @@ async def add_in_db_media(sent_message, post_caption: str = ''): return media_group_message_id -async def send_media_group_message(chat_id: int, message: types.Message, media_group: list[InputMediaPhoto]): +async def send_media_group_message_to_private_chat(chat_id: int, message: types.Message, + media_group: list[InputMediaPhoto]): sent_message = await message.bot.send_media_group( chat_id=chat_id, media=media_group, @@ -121,7 +120,7 @@ async def send_media_group_message(chat_id: int, message: types.Message, media_g return message_id -async def send_media_group_with_caption(bot, chat_id: int, post_content: list[tuple[str]], post_text: str): +async def send_media_group_to_channel(bot, chat_id: int, post_content: list[tuple[str]], post_text: str): """ Отправляет медиа-группу с подписью к последнему файлу. @@ -165,7 +164,8 @@ async def send_text_message(chat_id, message: types.Message, post_text: str, mar return message_id -async def send_photo_message(chat_id, message: types.Message, photo: str, post_text: str, markup: types.ReplyKeyboardMarkup = None): +async def send_photo_message(chat_id, message: types.Message, photo: str, post_text: str, + markup: types.ReplyKeyboardMarkup = None): if markup is None: await message.bot.send_photo( chat_id=chat_id, @@ -271,4 +271,4 @@ def unban_notifier(self): message += f"ID: {user_id}, Имя: {user_name}\n" # Отправка сообщения в канал - self.bot.send_message(self.GROUP_FOR_MESSAGE, message) \ No newline at end of file + self.bot.send_message(self.GROUP_FOR_MESSAGE, message)