add new func for ban
This commit is contained in:
@@ -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 из базы данных.
|
||||
|
||||
@@ -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"<b>Выбран пользователь:\nid:</b> {user_id}\n<b>username:</b> {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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user