diff --git a/database/db.py b/database/db.py
index 5924137..8378e75 100644
--- a/database/db.py
+++ b/database/db.py
@@ -239,6 +239,68 @@ class BotDB:
finally:
self.close()
+ def get_user_id_by_username(self, username: str):
+ """
+ Возвращает user_id пользователя из базы данных по его user_name в Telegram.
+
+ Args:
+ username (str): Username пользователя.
+
+ Returns:
+ user_id (int): Идентификатор пользователя в Telegram.
+ None: Если пользователь не найден.
+
+ Raises:
+ sqlite3.Error: Если произошла ошибка при выполнении запроса.
+ """
+ try:
+ self.connect()
+ self.cursor.execute("SELECT user_id FROM our_users WHERE username = ?", (username,))
+ result = self.cursor.fetchone()
+ if result:
+ user_id = result[0]
+ self.logger.info(f"User_id пользователя найден: username={username}, user_id={user_id}")
+ return user_id
+ else:
+ self.logger.info(f"Пользователь с username={username} не найден в базе данных.")
+ return None
+ except sqlite3.Error as error:
+ self.logger.error(f"Ошибка при получении username из базы данных: {error}")
+ raise
+ finally:
+ self.close()
+
+ def get_full_name_by_id(self, user_id: str):
+ """
+ Возвращает full_name пользователя из базы данных по его username в Telegram.
+
+ Args:
+ user_id (int): Идентификатор пользователя в Telegram.
+
+ Returns:
+ full_name (str): Username пользователя.
+ None: Если пользователь не найден.
+
+ Raises:
+ sqlite3.Error: Если произошла ошибка при выполнении запроса.
+ """
+ try:
+ self.connect()
+ self.cursor.execute("SELECT full_name FROM our_users WHERE user_id = ?", (user_id,))
+ result = self.cursor.fetchone()
+ if result:
+ full_name = result[0]
+ self.logger.info(f"Username пользователя найден: user_id={user_id}, full_name={full_name}")
+ return full_name
+ else:
+ self.logger.info(f"Пользователь с user_id={user_id} не найден в базе данных.")
+ return None
+ except sqlite3.Error as error:
+ self.logger.error(f"Ошибка при получении username из базы данных: {error}")
+ raise
+ finally:
+ self.close()
+
def get_all_user_id(self):
"""
Возвращает список всех user_id из базы данных.
diff --git a/helper_bot/handlers/admin/admin_handlers.py b/helper_bot/handlers/admin/admin_handlers.py
index e83e545..3f64ed7 100644
--- a/helper_bot/handlers/admin/admin_handlers.py
+++ b/helper_bot/handlers/admin/admin_handlers.py
@@ -6,7 +6,7 @@ from aiogram.fsm.context import FSMContext
from helper_bot.filters.main import ChatTypeFilter
from helper_bot.keyboards.keyboards import get_reply_keyboard_admin, create_keyboard_with_pagination, \
- create_keyboard_for_ban_days, create_keyboard_for_approve_ban
+ create_keyboard_for_ban_days, create_keyboard_for_approve_ban, create_keyboard_for_ban_reason
from helper_bot.utils.base_dependency_factory import BaseDependencyFactory
from helper_bot.utils.helper_func import check_access, add_days_to_date, get_banned_users_buttons, get_banned_users_list
from logs.custom_logger import logger
@@ -60,6 +60,48 @@ async def get_last_users(message: types.Message):
reply_markup=keyboard)
+@admin_router.message(
+ ChatTypeFilter(chat_type=["private"]),
+ StateFilter("ADMIN"),
+ F.text == 'Бан по нику'
+)
+async def ban_by_nickname(message: types.Message, state: FSMContext):
+ await message.answer('Пришли мне username блокируемого пользователя')
+ await state.set_state('PRE_BAN')
+
+
+@admin_router.message(
+ ChatTypeFilter(chat_type=["private"]),
+ F.text == 'Отменить'
+)
+async def decline_ban(message: types.Message, state: FSMContext):
+ await state.set_data({})
+ await state.set_state("ADMIN")
+ logger.info(f"Отмена процедуры блокировки")
+ markup = get_reply_keyboard_admin()
+ await message.answer('Вернулись в меню', reply_markup=markup)
+
+
+@admin_router.message(
+ ChatTypeFilter(chat_type=["private"]),
+ StateFilter("PRE_BAN")
+)
+async def ban_by_nickname_step_2(message: types.Message, state: FSMContext):
+ logger.info(
+ f"Функция ban_by_nickname_2. Получен никнейм пользователя: {message.text}")
+ user_name = message.text
+ user_id = BotDB.get_user_id_by_username(user_name)
+ await state.update_data(user_id=user_id, user_name=user_name, message_for_user=None,
+ date_to_unban=None)
+ full_name = BotDB.get_full_name_by_id(user_id)
+ markup = create_keyboard_for_ban_reason()
+ await message.answer(
+ text=f"Выбран пользователь:\nid: {user_id}\nusername: {user_name}\n"
+ f"Имя:{full_name}\nВыбери причину бана из списка или напиши ее в чат",
+ reply_markup=markup)
+ await state.set_state('BAN_2')
+
+
@admin_router.message(
ChatTypeFilter(chat_type=["private"]),
StateFilter("ADMIN"),
@@ -114,24 +156,24 @@ async def ban_user_step_3(message: types.Message, state: FSMContext):
@admin_router.message(
ChatTypeFilter(chat_type=["private"]),
- StateFilter("BAN_FINAL")
+ StateFilter("BAN_FINAL"),
+ F.text == 'Подтвердить'
)
async def approve_ban(message: types.Message, state: FSMContext):
user_data = await state.get_data()
logger.info(f"Переход на финальный шаг бана пользователя. Словарь с данными для бана: {user_data})")
- if message.text == 'Подтвердить':
- exists = BotDB.check_user_in_blacklist(user_data['user_id'])
- if exists:
- await message.reply(f"Пользователь уже был заблокирован ранее.")
- logger.info(f"Пользователь: {user_data['user_id']} был заблокирован ранее)")
- await state.set_state('ADMIN')
- else:
- BotDB.set_user_blacklist(user_data['user_id'],
- user_data['user_name'],
- user_data['message_for_user'],
- user_data['date_to_unban'])
- await message.reply(f"Пользователь {user_data['user_name']} успешно заблокирован.")
- logger.info(f"Пользователь: {user_data['user_id']} успешно заблокирован)")
- await state.set_state('ADMIN')
+ exists = BotDB.check_user_in_blacklist(user_data['user_id'])
+ if exists:
+ await message.reply(f"Пользователь уже был заблокирован ранее.")
+ logger.info(f"Пользователь: {user_data['user_id']} был заблокирован ранее)")
+ await state.set_state('ADMIN')
+ else:
+ BotDB.set_user_blacklist(user_data['user_id'],
+ user_data['user_name'],
+ user_data['message_for_user'],
+ user_data['date_to_unban'])
+ await message.reply(f"Пользователь {user_data['user_name']} успешно заблокирован.")
+ logger.info(f"Пользователь: {user_data['user_id']} успешно заблокирован)")
+ await state.set_state('ADMIN')
markup = get_reply_keyboard_admin()
await message.answer('Вернулись в меню', reply_markup=markup)
diff --git a/helper_bot/handlers/private/private_handlers.py b/helper_bot/handlers/private/private_handlers.py
index fd70cad..43bc111 100644
--- a/helper_bot/handlers/private/private_handlers.py
+++ b/helper_bot/handlers/private/private_handlers.py
@@ -104,6 +104,10 @@ async def handle_start_message(message: types.Message, state: FSMContext):
)
async def suggest_post(message: types.Message, state: FSMContext):
try:
+ user_id = message.from_user.id
+ current_date = datetime.now()
+ date = current_date.strftime("%Y-%m-%d %H:%M:%S")
+ BotDB.update_date_for_user(date, user_id)
await message.forward(chat_id=GROUP_FOR_LOGS)
await state.set_state("SUGGEST")
current_state = await state.get_state()
@@ -130,6 +134,10 @@ async def suggest_post(message: types.Message, state: FSMContext):
)
async def end_message(message: types.Message, state: FSMContext):
try:
+ user_id = message.from_user.id
+ current_date = datetime.now()
+ date = current_date.strftime("%Y-%m-%d %H:%M:%S")
+ BotDB.update_date_for_user(date, user_id)
await message.forward(chat_id=GROUP_FOR_LOGS)
logger.info(
f"Вызов функции end_message. Пользователь: {message.from_user.id} Имя автора сообщения: {message.from_user.full_name}")
@@ -355,6 +363,10 @@ async def stickers(message: types.Message, state: FSMContext):
async def connect_with_admin(message: types.Message, state: FSMContext):
logger.info(
f"Вызов функции connect_with_admin. Пользователь: {message.from_user.id} Имя автора сообщения: {message.from_user.full_name}")
+ user_id = message.from_user.id
+ current_date = datetime.now()
+ date = current_date.strftime("%Y-%m-%d %H:%M:%S")
+ BotDB.update_date_for_user(date, user_id)
admin_message = messages.get_message(get_first_name(message), 'CONNECT_WITH_ADMIN')
await message.answer(admin_message, parse_mode="html")
await message.forward(chat_id=GROUP_FOR_LOGS)
@@ -370,6 +382,10 @@ async def connect_with_admin(message: types.Message, state: FSMContext):
ChatTypeFilter(chat_type=["private"]),
)
async def resend_message_in_group_for_message(message: types.Message, state: FSMContext):
+ user_id = message.from_user.id
+ current_date = datetime.now()
+ date = current_date.strftime("%Y-%m-%d %H:%M:%S")
+ BotDB.update_date_for_user(date, user_id)
logger.info(
f"Попытка пересылки сообщения в связь с админами. Сообщение: {message.text} Имя автора сообщения: {message.from_user.full_name} Идентификатор сообщения: {message.message_id})")
await message.forward(chat_id=GROUP_FOR_MESSAGE)
diff --git a/helper_bot/keyboards/keyboards.py b/helper_bot/keyboards/keyboards.py
index d2318eb..42a19a2 100644
--- a/helper_bot/keyboards/keyboards.py
+++ b/helper_bot/keyboards/keyboards.py
@@ -35,6 +35,7 @@ def get_reply_keyboard_leave_chat():
def get_reply_keyboard_admin():
builder = ReplyKeyboardBuilder()
builder.add(types.KeyboardButton(text="Бан (Список)"))
+ builder.add(types.KeyboardButton(text="Бан по нику"))
builder.add(types.KeyboardButton(text="Разбан (список)"))
builder.add(types.KeyboardButton(text="Вернуться в бота"))
markup = builder.as_markup(resize_keyboard=True, one_time_keyboard=True)
@@ -88,6 +89,9 @@ def create_keyboard_for_ban_reason():
builder = ReplyKeyboardBuilder()
builder.add(types.KeyboardButton(text="Спам"))
builder.add(types.KeyboardButton(text="Заебал стикерами"))
+ builder.row(types.KeyboardButton(text="Реклама здесь: @kerrad1 "))
+ builder.row(types.KeyboardButton(text="Тема с лагерями: https://vk.com/topic-75343895_50049913"))
+ builder.row(types.KeyboardButton(text="Отменить"))
markup = builder.as_markup(resize_keyboard=True, one_time_keyboard=True)
return markup
@@ -97,7 +101,8 @@ def create_keyboard_for_ban_days():
builder.add(types.KeyboardButton(text="1"))
builder.add(types.KeyboardButton(text="7"))
builder.add(types.KeyboardButton(text="30"))
- builder.add(types.KeyboardButton(text="Навсегда"))
+ builder.row(types.KeyboardButton(text="Навсегда"))
+ builder.row(types.KeyboardButton(text="Отменить"))
markup = builder.as_markup(resize_keyboard=True, one_time_keyboard=True)
return markup
diff --git a/helper_bot/utils/state.py b/helper_bot/utils/state.py
index 6d4e320..92f1fda 100644
--- a/helper_bot/utils/state.py
+++ b/helper_bot/utils/state.py
@@ -7,6 +7,7 @@ class StateUser(StatesGroup):
ADMIN = State()
CHAT = State()
PRE_CHAT = State()
+ PRE_BAN = State()
BAN_2 = State()
BAN_3 = State()
BAN_4 = State()