From a3b53d26e251a1e538bd581d1294c98601ba347d Mon Sep 17 00:00:00 2001 From: KatykhinAA Date: Wed, 17 Jul 2024 00:15:15 +0300 Subject: [PATCH] add mediaGroup func --- .gitignore | 3 + database/db.py | 72 +++++++++++-- .../callback/__pycache__/main.cpython-312.pyc | Bin 0 -> 15306 bytes .../handlers/callback/callback_handlers.py | 24 ++--- .../private/__pycache__/main.cpython-312.pyc | Bin 0 -> 23314 bytes .../handlers/private/private_handlers.py | 23 ++-- .../__pycache__/helper_func.cpython-312.pyc | Bin 9425 -> 13527 bytes helper_bot/utils/helper_func.py | 98 +++++++++++++++--- run_helper.py | 2 +- 9 files changed, 183 insertions(+), 39 deletions(-) create mode 100644 helper_bot/handlers/callback/__pycache__/main.cpython-312.pyc create mode 100644 helper_bot/handlers/private/__pycache__/main.cpython-312.pyc diff --git a/.gitignore b/.gitignore index 8cf4112..851f65f 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ /database/tg-bot-database +/settings.ini +/myenv/ +/venv/ diff --git a/database/db.py b/database/db.py index d38600a..d5923bf 100644 --- a/database/db.py +++ b/database/db.py @@ -605,9 +605,11 @@ class BotDB: f"Запуск функции update_username_and_full_name: user_id={user_id}, username={username}, full_name={full_name}") try: self.connect() - self.cursor.execute("UPDATE our_users SET username = ?, full_name = ? WHERE user_id = ?", (username, full_name, user_id,)) + self.cursor.execute("UPDATE our_users SET username = ?, full_name = ? WHERE user_id = ?", + (username, full_name, user_id,)) self.conn.commit() - self.logger.info(f"Функция update_username_and_full_name. Данные пользователя: user_id={user_id} успешно обновлены") + self.logger.info( + f"Функция update_username_and_full_name. Данные пользователя: user_id={user_id} успешно обновлены") return True except sqlite3.Error as error: self.logger.error(f"Ошибка в функции update_username_and_full_name: {error}") @@ -823,18 +825,69 @@ class BotDB: finally: self.close() + def add_post_from_telegram_in_db(self, group_message_id, message_id, is_last_message_id, content_name, text): + self.logger.info( + f"Запуск функции add_post_from_telegram_in_db: group_message_id={group_message_id}, message_id={message_id}" + f", is_last_message_id={is_last_message_id}, content_name={content_name}, text={text}") + try: + self.connect() + self.cursor.execute( + "INSERT INTO posts_from_telegram (group_message_id, message_id, is_last_message_id, content_name, text)" + "VALUES (?, ?, ?, ?, ?)", (group_message_id, message_id, is_last_message_id, content_name, text)) + self.conn.commit() + self.logger.info(f"Функция add_post_from_telegram_in_db отработала успешно") + return True + except Exception as e: + self.logger.error(f"Ошибка в функции add_post_from_telegram_in_db при добавлении поста в базу данных: {e}") + return False + + def get_post_content_from_telegram_by_last_id(self, last_post_id: int): + self.logger.info( + f"Запуск функции get_post_content_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_content_from_telegram_by_last_id {str(e)}") + return False + try: + 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}") + return post_content + 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: + self.connect() + result = self.cursor.execute("SELECT text " + "FROM posts_from_telegram WHERE message_id = ?", (last_post_id,)) + text = result.fetchone()[0] + self.logger.info(f"Функция get_post_text_from_telegram_by_last_id получила text") + return text + except Exception as e: + self.logger.error(f"Ошибка в функции get_post_text_from_telegram_by_last_id {str(e)}") + def add_audio_record(self, file_name, author_id, date_added, listen_count, file_id): """Добавляет информацию о войсе юзера в БД""" self.logger.info( - f"Запуск функции add_audio_record (file_name = {file_name}, author_id = {author_id}, date_added = {date_added}") + f"Запуск функции add_audio_record (file_name = {file_name}, author_id = {author_id}," + f" date_added = {date_added}") try: self.connect() result = self.cursor.execute( - "INSERT INTO `audio_message_reference` (file_name, author_id, date_added, listen_count, file_id) VALUES (?, ?, ?, ?, ?)", + "INSERT INTO `audio_message_reference` (file_name, author_id, date_added, listen_count, file_id) " + "VALUES (?, ?, ?, ?, ?)", (file_name, author_id, date_added, listen_count, file_id)) self.conn.commit() self.logger.info( - f"Аудио успешно добавлено в БД (file_name = {file_name}, author_id = {author_id}, date_added = {date_added}") + f"Аудио успешно добавлено в БД (file_name = {file_name}, author_id = {author_id}, " + f"date_added = {date_added}") return None except sqlite3.Error as error: print(error) @@ -871,7 +924,8 @@ class BotDB: try: self.connect() result = self.cursor.execute( - "SELECT `file_id` FROM `audio_message_reference` WHERE `author_id` = ? ORDER BY date_added DESC LIMIT 1", + "SELECT `file_id` FROM `audio_message_reference` WHERE `author_id` = ? " + "ORDER BY date_added DESC LIMIT 1", (user_id,)) return result.fetchone()[0] except sqlite3.Error as error: @@ -884,7 +938,11 @@ class BotDB: try: self.connect() result = self.cursor.execute( - "SELECT `file_name` FROM `audio_message_reference` WHERE `author_id` = ? ORDER BY date_added DESC LIMIT 1", + "SELECT `file_name` " + "FROM `audio_message_reference` " + "WHERE `author_id` = ? " + "ORDER BY date_added " + "DESC LIMIT 1", (user_id,)) return result.fetchone()[0] except sqlite3.Error as error: diff --git a/helper_bot/handlers/callback/__pycache__/main.cpython-312.pyc b/helper_bot/handlers/callback/__pycache__/main.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b532bc4adf2807275d1de05cbd8b92eaee9b775a GIT binary patch literal 15306 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 literal 0 HcmV?d00001 diff --git a/helper_bot/handlers/private/private_handlers.py b/helper_bot/handlers/private/private_handlers.py index f4695ba..7821d27 100644 --- a/helper_bot/handlers/private/private_handlers.py +++ b/helper_bot/handlers/private/private_handlers.py @@ -17,9 +17,10 @@ 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, \ - process_photo_album, send_media_group_message, check_username_and_full_name + send_media_group_message, process_photo_album, check_username_and_full_name from logs.custom_logger import logger + private_router = Router() private_router.message.middleware(AlbumMiddleware()) @@ -189,20 +190,28 @@ async def suggest_router(message: types.Message, state: FSMContext, album: list 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) - media_group = process_photo_album(album, post_caption) - media_group_message_id = await send_media_group_message(GROUP_FOR_POST, message, - media_group) - print(f'Отправил в чат предложки сообщения, media_group_message_id:{media_group_message_id}\n\n') + + #Иначе обрабатываем фото и получаем медиагруппу + media_group = await process_photo_album(album, post_caption) + + #Отправляем медиагруппу в секретный чат + media_group_message_id = await send_media_group_message(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 идентификаторы текстового сообщения И последнего сообщения медиагруппы await state.update_data(media_group_message_id=media_group_message_id, help_message_id=help_message_id) - d = await state.get_data() - print(f'ЗАПИСАЛ В state.update_data {d}') + + #Получаем клавиатуру для пользователя, благодарим за пост, и возвращаем в дефолтное сообщение 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) diff --git a/helper_bot/utils/__pycache__/helper_func.cpython-312.pyc b/helper_bot/utils/__pycache__/helper_func.cpython-312.pyc index 1ed1cd0d81e2e2a7e48d451ffa0152073f60f092..229091afe3cfe694a3ba90c467751560242d136d 100644 GIT binary patch delta 6276 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 HxUK&KBK7lX delta 2534 zcmZ`5ZERat^=)bdN9;IuoH|L9v~g-@X<98y*RiEvTbre6o2?AD?8(l3X`T3s z`<^#aQYAv&j{#x}SFo`%1llGI4Mar{41~sh0IJ{z4oqtFRK(CU1QJNu`Ug!yaL#qw zWuRUu=bn4M-uZTJ6xWXje%IRSC2*ep%{S)$x??pEcfCbd2ZwqnVT7qAciEHkP~sw{ z=M5BtlhaLoJ|dpGr*k>yWtyqX$C`}okhx9&oXR{`)LbjmO+RaaKQGYS%m=gp>t}v= zxmfEJEf-_~Gjvx=K{IS>2`~=2A<%7O16#5pPov9z)&?%@+Wzq-4&o6o9=#*}eb6!^P!A0^_S{#4>wLe7K0W#zJJBSRiWmsHVcjdoro%=NPJ z25pilSyGs?FbJOP7w`7P0(Q%m0$Eb$z2aNp1oaC#5)tpW#^@7w7da5v?fJ4wmRvJr ztrmz-(G@+ojBft@KXB46M=N7i9M4t=Y08tpO?#Xcvr;dcJa3zhR^!Er?RdB1H;T-0 z=W8{y!nhlRfsaXbJafg83Cy(SX!%m1UgjOh^+_%y55Gf;T%QE0r2*){!)1~qHC~;C z^cqd!raJcE5DE(bD`Yc9BJC@aH)Gx3(f%0Q^&!!;(_*T9r^n}io_^`x4e|3(Qd|pV z+I+yEn||W&Xs9ucbrNH-Ov{e}nIx3FApVlNM_i2^$U%}-9E5oc<9`lR34N4@X-n!= z^0I4NdDIy)M!quo1LbL&cAreU_->GtxvM_{nD~0faUYuIodD{G#OZieti%&%R7WXP zZ6{D;g7oyWwxhJ{5zg%&jRs5WRw8>jr?nc zY$STbXku{svBu;1#$$y>VXoo5@Q!+MBfR6q!g{#(MmVz`&a9lcskSuyC$C?+UTS#H zy`!Gr@U=J8_RXLYb$?_9!P*ylC*t%KIuTP}-8T_mJDCd5WenC)aVXMC)7ufG__ua^#7{E>^xr`53S*9N;al{j(R%*##p%i;c|>0;42yeVsJ4R_{AN z=>y_g{~mxh`|s;&E}A@J2Fov6hFyi*Hu+J|`J5OTxF2*%1BYGon7Fq4Egky`LKzoN z4Q3{e!Nbw&mdP!SE#s&XR{_NoHpiDeWx0zAE_86xjW3 zG%2nRb@gL^zd&H$(WeM+VJ>-VOO&}VoEfsHq}3noS*3lShNpCbM*)L4CE*FcEp!b- z5^u&ut);&Fqfd}4>t`8jD2u2#w%z7}}(6jFbLp&rt%uMU| zgS1TE@oX}Qk8LI6Pr_S*H6oU?DRBSW*}DGO+bYT7oj$BGZ$n^+M~2fhAo%c3Hv_^? ziFj#v3`+Hf;medhC{B%hrVDpn+RHIL{2>H#%qI{V7r!1EWH=&x6o3tl_T@)B_Ks z>-65Jy9|_H5V5fLn?c-&Y3dN}L!?_oMl<5b=$>U%g7w7a95?n0RD2vMo~h>SItsK5 z$CbeG9~6%3*-`M9L6zNvJIINg!4)uRE*7eJ&Zguhkh98hdgK(ywwAreu~8hA6=!XJ zjzA|j3xLVw=&$Smxxi%`f21EQS6RJeeu`fLF7~K(65ysnDg84Ue4ix#MAG8KzR7(b zjJDB^*Jo}KxHgA$8hiclCV}hCfnR2SmX&DZY_4%`e*NsiEo6KU6QTWI=nT^EHD!~) X_2zzgy?yu=zBc>CYx{>)%-nwgI1E`u diff --git a/helper_bot/utils/helper_func.py b/helper_bot/utils/helper_func.py index 768b6e9..9dbd94b 100644 --- a/helper_bot/utils/helper_func.py +++ b/helper_bot/utils/helper_func.py @@ -1,9 +1,10 @@ from datetime import datetime, timedelta from aiogram import types -from aiogram.types import InputMediaPhoto +from aiogram.types import InputMediaPhoto, FSInputFile from helper_bot.utils.base_dependency_factory import BaseDependencyFactory +from logs.custom_logger import logger bdf = BaseDependencyFactory() @@ -39,7 +40,29 @@ def get_text_message(post_text: str, first_name: str, username: str): return f'Пост из ТГ:\n{post_text}\n\nАвтор поста: {first_name} @{username}', is_anonymous -def process_photo_album(album, post_caption: str = ''): +async def download_photo(message: types.Message, file_id: str): + """ + Скачивает фото по file_id из Telegram. + + Args: + message: сообщение + file_id: File ID фотографии. + filename: Имя файла, под которым будет сохранено фото. + + Returns: + Путь к сохраненному файлу, если файл был скачан успешно, иначе None. + """ + try: + file = await message.bot.get_file(file_id) + file_path = file.file_path + await message.bot.download_file(file_path=file_path, destination=file_path) + return file_path + except Exception as e: + logger.error(f"Ошибка скачивания фотографии: {e}") + return None + + +async def process_photo_album(album, post_caption: str = ''): """ Создает список InputMediaPhoto для альбома. @@ -51,13 +74,41 @@ def process_photo_album(album, post_caption: str = ''): Список InputMediaPhoto. """ photo_media = [] + #Циклом проходимся по собранному миддлварью объекту album for i, message in enumerate(album): - print(f'message_id в функции process_photo_album: {message.message_id}\n\n') - if i == 0: + 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)) else: photo_media.append(InputMediaPhoto(media=message.photo[-1].file_id)) - return photo_media + return photo_media # Возвращаем идентификатор медиа-группы + + +async def add_in_db_media(sent_message, post_caption: str = ''): + """ + Идентификатор медиа-группы + + Args: + sent_message: sent_message объект из Telegram API. + post_caption: Текст подписи к первому фото. + + Returns: + Список InputMediaPhoto. + """ + media_group_message_id = sent_message[0].message_id # Получаем идентификатор медиа-группы + for i, message in enumerate(sent_message): + file_id = message.photo[-1].file_id + file_path = await download_photo(message, file_id=file_id) + if i == 0: + BotDB.add_post_from_telegram_in_db(media_group_message_id, message.message_id, 0, file_path, post_caption) + elif i == len(sent_message) - 1: + BotDB.add_post_from_telegram_in_db(media_group_message_id, message.message_id, 1, file_path, post_caption) + else: + BotDB.add_post_from_telegram_in_db(media_group_message_id, message.message_id, 0, file_path, post_caption) + return media_group_message_id async def send_media_group_message(chat_id: int, message: types.Message, media_group: list[InputMediaPhoto]): @@ -65,12 +116,37 @@ async def send_media_group_message(chat_id: int, message: types.Message, media_g chat_id=chat_id, media=media_group, ) - print(f'ПОЛНЫЙ ОБЪЕКТ ОТПРАВЛЕННЫХ СООБЩЕНИЙ : {sent_message}\n\n') + await add_in_db_media(sent_message, post_caption=sent_message[-1].caption) message_id = sent_message[-1].message_id - print(f'ИДЕНТИФИКАТОР ПОСЛЕДНГО СООБЩЕНИЯ: {message_id}') return message_id +async def send_media_group_with_caption(bot, chat_id: int, post_content: list[tuple[str]], post_text: str): + """ + Отправляет медиа-группу с подписью к последнему файлу. + + Args: + bot: Экземпляр бота aiogram. + chat_id: ID чата для отправки. + post_content: Список кортежей с путями к файлам. + post_text: Текст подписи. + """ + media = [] + for file_path in post_content: + try: + file = FSInputFile(path=file_path[0]) + media.append(types.InputMediaPhoto(media=file)) + except FileNotFoundError: + logger.error(f"Файл не найден: {file_path[0]}") + return + + # Добавляем подпись к последнему файлу + if media: + media[-1].caption = post_text + + await bot.send_media_group(chat_id=chat_id, media=media) + + async def send_text_message(chat_id, message: types.Message, post_text: str, markup: types.ReplyKeyboardMarkup = None): if markup is None: sent_message = await message.bot.send_message( @@ -160,7 +236,7 @@ def get_banned_users_buttons(): def get_help_message_id(media_group_message_id: int, data: dict) -> int: """ - Получает идентификатор сообщения помощи по идентификатору сообщения группы. + Получает идентификатор текстового сообщения по идентификатору сообщения группы. Args: media_group_message_id: Идентификатор сообщения группы @@ -169,9 +245,8 @@ def get_help_message_id(media_group_message_id: int, data: dict) -> int: Returns: Идентификатор сообщения помощи. """ - - if 'help_message_id' in data and 'media_group_message_id' in data: - return data['media_group_message_id'] + if 'help_message_id' in data: + return data['help_message_id'] # Возвращаем help_message_id else: return 0 @@ -188,7 +263,6 @@ def check_username_and_full_name(user_id: int, username: str, full_name: str): def unban_notifier(self): # Получение сегодняшней даты в формате DD-MM-YYYY current_date = datetime.now() - print('Мы в функции unban_notifier') today = current_date.strftime("%d-%m-%Y") # Получение списка разблокированных пользователей unblocked_users = self.BotDB.get_users_for_unblock_today(today) diff --git a/run_helper.py b/run_helper.py index ad7b9df..efa1bb1 100644 --- a/run_helper.py +++ b/run_helper.py @@ -4,4 +4,4 @@ from helper_bot.utils.base_dependency_factory import BaseDependencyFactory if __name__ == '__main__': - asyncio.run(start_bot(BaseDependencyFactory())) + asyncio.run(start_bot(BaseDependencyFactory())) \ No newline at end of file