add new func for ban
This commit is contained in:
@@ -239,6 +239,68 @@ class BotDB:
|
|||||||
finally:
|
finally:
|
||||||
self.close()
|
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):
|
def get_all_user_id(self):
|
||||||
"""
|
"""
|
||||||
Возвращает список всех user_id из базы данных.
|
Возвращает список всех user_id из базы данных.
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from aiogram.fsm.context import FSMContext
|
|||||||
|
|
||||||
from helper_bot.filters.main import ChatTypeFilter
|
from helper_bot.filters.main import ChatTypeFilter
|
||||||
from helper_bot.keyboards.keyboards import get_reply_keyboard_admin, create_keyboard_with_pagination, \
|
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.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 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
|
from logs.custom_logger import logger
|
||||||
@@ -60,6 +60,48 @@ async def get_last_users(message: types.Message):
|
|||||||
reply_markup=keyboard)
|
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(
|
@admin_router.message(
|
||||||
ChatTypeFilter(chat_type=["private"]),
|
ChatTypeFilter(chat_type=["private"]),
|
||||||
StateFilter("ADMIN"),
|
StateFilter("ADMIN"),
|
||||||
@@ -114,12 +156,12 @@ async def ban_user_step_3(message: types.Message, state: FSMContext):
|
|||||||
|
|
||||||
@admin_router.message(
|
@admin_router.message(
|
||||||
ChatTypeFilter(chat_type=["private"]),
|
ChatTypeFilter(chat_type=["private"]),
|
||||||
StateFilter("BAN_FINAL")
|
StateFilter("BAN_FINAL"),
|
||||||
|
F.text == 'Подтвердить'
|
||||||
)
|
)
|
||||||
async def approve_ban(message: types.Message, state: FSMContext):
|
async def approve_ban(message: types.Message, state: FSMContext):
|
||||||
user_data = await state.get_data()
|
user_data = await state.get_data()
|
||||||
logger.info(f"Переход на финальный шаг бана пользователя. Словарь с данными для бана: {user_data})")
|
logger.info(f"Переход на финальный шаг бана пользователя. Словарь с данными для бана: {user_data})")
|
||||||
if message.text == 'Подтвердить':
|
|
||||||
exists = BotDB.check_user_in_blacklist(user_data['user_id'])
|
exists = BotDB.check_user_in_blacklist(user_data['user_id'])
|
||||||
if exists:
|
if exists:
|
||||||
await message.reply(f"Пользователь уже был заблокирован ранее.")
|
await message.reply(f"Пользователь уже был заблокирован ранее.")
|
||||||
|
|||||||
@@ -104,6 +104,10 @@ async def handle_start_message(message: types.Message, state: FSMContext):
|
|||||||
)
|
)
|
||||||
async def suggest_post(message: types.Message, state: FSMContext):
|
async def suggest_post(message: types.Message, state: FSMContext):
|
||||||
try:
|
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 message.forward(chat_id=GROUP_FOR_LOGS)
|
||||||
await state.set_state("SUGGEST")
|
await state.set_state("SUGGEST")
|
||||||
current_state = await state.get_state()
|
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):
|
async def end_message(message: types.Message, state: FSMContext):
|
||||||
try:
|
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 message.forward(chat_id=GROUP_FOR_LOGS)
|
||||||
logger.info(
|
logger.info(
|
||||||
f"Вызов функции end_message. Пользователь: {message.from_user.id} Имя автора сообщения: {message.from_user.full_name}")
|
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):
|
async def connect_with_admin(message: types.Message, state: FSMContext):
|
||||||
logger.info(
|
logger.info(
|
||||||
f"Вызов функции connect_with_admin. Пользователь: {message.from_user.id} Имя автора сообщения: {message.from_user.full_name}")
|
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')
|
admin_message = messages.get_message(get_first_name(message), 'CONNECT_WITH_ADMIN')
|
||||||
await message.answer(admin_message, parse_mode="html")
|
await message.answer(admin_message, parse_mode="html")
|
||||||
await message.forward(chat_id=GROUP_FOR_LOGS)
|
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"]),
|
ChatTypeFilter(chat_type=["private"]),
|
||||||
)
|
)
|
||||||
async def resend_message_in_group_for_message(message: types.Message, state: FSMContext):
|
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(
|
logger.info(
|
||||||
f"Попытка пересылки сообщения в связь с админами. Сообщение: {message.text} Имя автора сообщения: {message.from_user.full_name} Идентификатор сообщения: {message.message_id})")
|
f"Попытка пересылки сообщения в связь с админами. Сообщение: {message.text} Имя автора сообщения: {message.from_user.full_name} Идентификатор сообщения: {message.message_id})")
|
||||||
await message.forward(chat_id=GROUP_FOR_MESSAGE)
|
await message.forward(chat_id=GROUP_FOR_MESSAGE)
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ def get_reply_keyboard_leave_chat():
|
|||||||
def get_reply_keyboard_admin():
|
def get_reply_keyboard_admin():
|
||||||
builder = ReplyKeyboardBuilder()
|
builder = ReplyKeyboardBuilder()
|
||||||
builder.add(types.KeyboardButton(text="Бан (Список)"))
|
builder.add(types.KeyboardButton(text="Бан (Список)"))
|
||||||
|
builder.add(types.KeyboardButton(text="Бан по нику"))
|
||||||
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)
|
markup = builder.as_markup(resize_keyboard=True, one_time_keyboard=True)
|
||||||
@@ -88,6 +89,9 @@ def create_keyboard_for_ban_reason():
|
|||||||
builder = ReplyKeyboardBuilder()
|
builder = ReplyKeyboardBuilder()
|
||||||
builder.add(types.KeyboardButton(text="Спам"))
|
builder.add(types.KeyboardButton(text="Спам"))
|
||||||
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)
|
markup = builder.as_markup(resize_keyboard=True, one_time_keyboard=True)
|
||||||
return markup
|
return markup
|
||||||
|
|
||||||
@@ -97,7 +101,8 @@ def create_keyboard_for_ban_days():
|
|||||||
builder.add(types.KeyboardButton(text="1"))
|
builder.add(types.KeyboardButton(text="1"))
|
||||||
builder.add(types.KeyboardButton(text="7"))
|
builder.add(types.KeyboardButton(text="7"))
|
||||||
builder.add(types.KeyboardButton(text="30"))
|
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)
|
markup = builder.as_markup(resize_keyboard=True, one_time_keyboard=True)
|
||||||
return markup
|
return markup
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ class StateUser(StatesGroup):
|
|||||||
ADMIN = State()
|
ADMIN = State()
|
||||||
CHAT = State()
|
CHAT = State()
|
||||||
PRE_CHAT = State()
|
PRE_CHAT = State()
|
||||||
|
PRE_BAN = State()
|
||||||
BAN_2 = State()
|
BAN_2 = State()
|
||||||
BAN_3 = State()
|
BAN_3 = State()
|
||||||
BAN_4 = State()
|
BAN_4 = State()
|
||||||
|
|||||||
Reference in New Issue
Block a user