diff --git a/database/db.py b/database/db.py index 4c63f2d..f614b15 100644 --- a/database/db.py +++ b/database/db.py @@ -562,6 +562,62 @@ class BotDB: finally: self.close() + def get_username_and_full_name(self, user_id: int): + """ + Получает full_name и username пользователя по ID из базы + + Args: + date (str): Новая дата изменения. + user_id (int): Идентификатор пользователя в Telegram. + + Returns: + username (str): username пользователя + full_name (str): full_name пользователя + """ + self.logger.info( + f"Запуск функции check_username_and_first_name: user_id={user_id}") + try: + self.connect() + self.cursor.execute("SELECT username FROM our_users WHERE user_id = ?", (user_id,)) + username = self.cursor.fetchone()[0] + self.cursor.execute("SELECT full_name FROM our_users WHERE user_id = ?", (user_id,)) + full_name = self.cursor.fetchone()[0] + self.logger.info( + f"Функция check_username_and_first_name успешно отработала: user_id={user_id}, username={username}, full_name={full_name}") + return username, full_name + except sqlite3.Error as error: + self.logger.error(f"Ошибка в функции get_username_and_first_name: {error}") + return None + finally: + self.close() + + def update_username_and_full_name(self, user_id: int, username: str, full_name: str): + """ + Обновляет full_name и username пользователя + + Args: + username (str): username пользователя + full_name (str): full_name пользователя + user_id (int): Идентификатор пользователя в Telegram + + Returns: + True (bool): Если обновления прошли успешно + sqlite3. Error: Если произошла ошибка при выполнении запроса. + """ + self.logger.info( + 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.conn.commit() + 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}") + raise + finally: + self.close() + def update_date_for_user(self, date: str, user_id: int): """ #TODO: Не возвращается ошибка sqlite3. Error. Тест не перехватывает. Возвращается no such table: our_users @@ -785,6 +841,7 @@ class BotDB: return None except sqlite3.Error as error: print(error) + raise finally: self.close() diff --git a/helper_bot/handlers/callback/__pycache__/main.cpython-312.pyc b/helper_bot/handlers/callback/__pycache__/main.cpython-312.pyc index 90d4174..16ba361 100644 Binary files a/helper_bot/handlers/callback/__pycache__/main.cpython-312.pyc and b/helper_bot/handlers/callback/__pycache__/main.cpython-312.pyc differ diff --git a/helper_bot/handlers/callback/main.py b/helper_bot/handlers/callback/main.py index 69620db..f049910 100644 --- a/helper_bot/handlers/callback/main.py +++ b/helper_bot/handlers/callback/main.py @@ -106,7 +106,7 @@ async def process_ban_user(call: CallbackQuery, state: FSMContext): date_to_unban=None) markup = create_keyboard_for_ban_reason() await call.message.answer( - text=f"Выбран пользователь: {user_id}. Выбери причину бана из списка или напиши ее в чат", + text=f"Выбран пользователь:\nid: {user_id}\nusername:{user_name}. Выбери причину бана из списка или напиши ее в чат", reply_markup=markup) await state.set_state('BAN_2') else: @@ -120,8 +120,9 @@ async def process_ban_user(call: CallbackQuery, state: FSMContext): ) async def process_unlock_user(call: CallbackQuery): user_id = call.data[7:] + user_name = BotDB.get_username(user_id=user_id) delete_user_blacklist(user_id) - logger.info(f"Разблокирован пользователь с ID: {user_id}") + logger.info(f"Разблокирован пользователь с ID: {user_id}\nusername:{user_name}") username = BotDB.get_username(user_id) await call.answer(f'Пользователь разблокирован {username}', show_alert=True) diff --git a/helper_bot/handlers/private/__pycache__/main.cpython-312.pyc b/helper_bot/handlers/private/__pycache__/main.cpython-312.pyc index 741a33d..e870551 100644 Binary files a/helper_bot/handlers/private/__pycache__/main.cpython-312.pyc and b/helper_bot/handlers/private/__pycache__/main.cpython-312.pyc differ diff --git a/helper_bot/handlers/private/main.py b/helper_bot/handlers/private/main.py index 46ff613..8735e44 100644 --- a/helper_bot/handlers/private/main.py +++ b/helper_bot/handlers/private/main.py @@ -16,7 +16,7 @@ from helper_bot.middlewares.text_middleware import AlbumMiddleware 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 + process_photo_album, send_media_group_message, check_username_and_full_name from logs.custom_logger import Logger from database.db import BotDB @@ -52,7 +52,16 @@ BotDB = BotDB('database/tg-bot-database') ) async def handle_start_message(message: types.Message, state: FSMContext): try: + user_id = message.from_user.id + full_name = message.from_user.full_name + username = message.from_user.username await message.forward(chat_id=GROUP_FOR_LOGS) + 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}') + sleep(2) await state.set_state("START") logger.info( f"Формирование приветственного сообщения для пользователя. Сообщение: {message.text} " @@ -64,18 +73,15 @@ async def handle_start_message(message: types.Message, state: FSMContext): await message.answer_sticker(random_stick_hello) sleep(0.3) except Exception as e: - logger.error(f"Произошла ошибка handle_start_message. Ошибка:{str(e)}") + logger.error(f"Произошла ошибка handle_start_message при получении стикеров. Ошибка:{str(e)}") await message.bot.send_message(chat_id=IMPORTANT_LOGS, - text=f"Произошла ошибка: {str(e)}\n\nTraceback:\n{traceback.format_exc()}") + text=f"Произошла ошибка при получении стикеров: {str(e)}\n\nTraceback:\n{traceback.format_exc()}") try: - current_state = await state.get_state() - logger.info( - f"Получение данных для приветственного сообщения пользователю. Сообщение: {message.text} Имя автора сообщения: {message.from_user.full_name} State - {current_state}") user_id = message.from_user.id - first_name = message.from_user.first_name full_name = message.from_user.full_name - is_bot = message.from_user.is_bot username = message.from_user.username + first_name = message.from_user.first_name + is_bot = message.from_user.is_bot language_code = message.from_user.language_code current_date = datetime.now() date = current_date.strftime("%Y-%m-%d %H:%M:%S") diff --git a/helper_bot/utils/__pycache__/helper_func.cpython-312.pyc b/helper_bot/utils/__pycache__/helper_func.cpython-312.pyc index 8132270..f546d11 100644 Binary files a/helper_bot/utils/__pycache__/helper_func.cpython-312.pyc and b/helper_bot/utils/__pycache__/helper_func.cpython-312.pyc differ diff --git a/helper_bot/utils/helper_func.py b/helper_bot/utils/helper_func.py index deeacfc..fff1e67 100644 --- a/helper_bot/utils/helper_func.py +++ b/helper_bot/utils/helper_func.py @@ -3,7 +3,6 @@ from datetime import datetime, timedelta from aiogram import types from aiogram.types import InputMediaPhoto -from helper_bot.keyboards import get_reply_keyboard_for_post from database.db import BotDB BotDB = BotDB('database/tg-bot-database') @@ -176,6 +175,11 @@ def delete_user_blacklist(user_id: int): return BotDB.delete_user_blacklist(user_id=user_id) +def check_username_and_full_name(user_id: int, username: str, full_name: str): + username_db, full_name_db = BotDB.get_username_and_full_name(user_id=user_id) + return not username == username_db and full_name == full_name_db + + def unban_notifier(self): # Получение сегодняшней даты в формате DD-MM-YYYY current_date = datetime.now()