This commit is contained in:
KatykhinAA
2024-07-15 22:28:36 +03:00
parent 1a0344d0e8
commit f7f6fa5482
7 changed files with 79 additions and 11 deletions

View File

@@ -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()

View File

@@ -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)

View File

@@ -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")

View File

@@ -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()