forked from Muzifs/LGBot
Исправление определения пользователя для сброса нарушений
This commit is contained in:
@@ -6,6 +6,7 @@ from config import LOG_FILE_NAME
|
|||||||
|
|
||||||
class ColoredFormatter(logging.Formatter): # Цветные логи (для терминала)
|
class ColoredFormatter(logging.Formatter): # Цветные логи (для терминала)
|
||||||
LEVEL_COLORS = {
|
LEVEL_COLORS = {
|
||||||
|
logging.DEBUG: '\033[96m', # Голубой для DEBUG
|
||||||
logging.INFO: '\033[92m',
|
logging.INFO: '\033[92m',
|
||||||
logging.WARNING: '\033[93m',
|
logging.WARNING: '\033[93m',
|
||||||
logging.ERROR: '\033[91m',
|
logging.ERROR: '\033[91m',
|
||||||
@@ -13,6 +14,7 @@ class ColoredFormatter(logging.Formatter): # Цветные логи (для т
|
|||||||
}
|
}
|
||||||
|
|
||||||
LEVEL_NAMES = {
|
LEVEL_NAMES = {
|
||||||
|
logging.DEBUG: "D",
|
||||||
logging.INFO: "I",
|
logging.INFO: "I",
|
||||||
logging.WARNING: "W",
|
logging.WARNING: "W",
|
||||||
logging.ERROR: "E",
|
logging.ERROR: "E",
|
||||||
@@ -50,7 +52,7 @@ def setup_logging(): # Инициализирует систему логиро
|
|||||||
|
|
||||||
# Создаем корневой логгер
|
# Создаем корневой логгер
|
||||||
logger = logging.getLogger()
|
logger = logging.getLogger()
|
||||||
logger.setLevel(logging.INFO)
|
logger.setLevel(logging.DEBUG) # Временно DEBUG для отладки
|
||||||
|
|
||||||
# Проверяем, не настроен ли логгер ранее
|
# Проверяем, не настроен ли логгер ранее
|
||||||
if not logger.hasHandlers():
|
if not logger.hasHandlers():
|
||||||
|
@@ -29,32 +29,23 @@ def register_handlers(bot: AsyncTeleBot):
|
|||||||
target_user = None
|
target_user = None
|
||||||
target_user_id = None
|
target_user_id = None
|
||||||
|
|
||||||
# Обработка ответа на сообщение
|
# Парсим команду
|
||||||
if message.reply_to_message:
|
parts = message.text.split(maxsplit=1)
|
||||||
target_user = message.reply_to_message.from_user
|
|
||||||
target_user_id = target_user.id
|
|
||||||
|
|
||||||
# Обработка по username или ID
|
|
||||||
else:
|
|
||||||
parts = message.text.split(maxsplit=1)
|
|
||||||
|
|
||||||
if len(parts) < 2:
|
|
||||||
await send_temp_message(
|
|
||||||
bot,
|
|
||||||
message,
|
|
||||||
COMMAND_MESSAGES['reset_violations_help']
|
|
||||||
)
|
|
||||||
return
|
|
||||||
|
|
||||||
|
# Если есть аргументы в команде (username или ID) - используем их
|
||||||
|
if len(parts) >= 2:
|
||||||
identifier = parts[1].strip()
|
identifier = parts[1].strip()
|
||||||
|
|
||||||
# Попытка получить по username
|
# Попытка получить по username
|
||||||
if identifier.startswith('@'):
|
if identifier.startswith('@'):
|
||||||
username = identifier[1:]
|
username = identifier[1:]
|
||||||
|
logger.info(f"Поиск пользователя по username: {username}")
|
||||||
user_data = db.get_user_by_username(username)
|
user_data = db.get_user_by_username(username)
|
||||||
if user_data:
|
if user_data:
|
||||||
target_user_id = user_data[0]
|
target_user_id = user_data[0]
|
||||||
|
logger.info(f"Найден пользователь в БД: id={user_data[0]}, nickname={user_data[1]}, tag={user_data[2]}")
|
||||||
else:
|
else:
|
||||||
|
logger.warning(f"Пользователь с username {username} не найден в БД")
|
||||||
await send_temp_message(
|
await send_temp_message(
|
||||||
bot,
|
bot,
|
||||||
message,
|
message,
|
||||||
@@ -66,6 +57,7 @@ def register_handlers(bot: AsyncTeleBot):
|
|||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
target_user_id = int(identifier)
|
target_user_id = int(identifier)
|
||||||
|
logger.info(f"Использован ID пользователя: {target_user_id}")
|
||||||
except ValueError:
|
except ValueError:
|
||||||
await send_temp_message(
|
await send_temp_message(
|
||||||
bot,
|
bot,
|
||||||
@@ -74,6 +66,21 @@ def register_handlers(bot: AsyncTeleBot):
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# Если аргументов нет - пробуем использовать reply_to_message
|
||||||
|
elif message.reply_to_message:
|
||||||
|
target_user = message.reply_to_message.from_user
|
||||||
|
target_user_id = target_user.id
|
||||||
|
logger.info(f"Использован пользователь из reply_to_message: id={target_user_id}")
|
||||||
|
|
||||||
|
# Если ни аргументов, ни reply нет - показываем help
|
||||||
|
else:
|
||||||
|
await send_temp_message(
|
||||||
|
bot,
|
||||||
|
message,
|
||||||
|
COMMAND_MESSAGES['reset_violations_help']
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
# Проверяем, что нашли пользователя
|
# Проверяем, что нашли пользователя
|
||||||
if not target_user_id:
|
if not target_user_id:
|
||||||
await send_temp_message(
|
await send_temp_message(
|
||||||
|
17
src/utils.py
17
src/utils.py
@@ -39,12 +39,29 @@ async def check_admin_status(bot: AsyncTeleBot, message: Message, check_restrict
|
|||||||
logger.info(f"Получен статус пользователя {message.from_user.id}: status={admin_status.status}, "
|
logger.info(f"Получен статус пользователя {message.from_user.id}: status={admin_status.status}, "
|
||||||
f"can_restrict={getattr(admin_status, 'can_restrict_members', None)}")
|
f"can_restrict={getattr(admin_status, 'can_restrict_members', None)}")
|
||||||
|
|
||||||
|
# Детальное логирование всех прав (для отладки)
|
||||||
|
logger.debug(f"Детальный статус пользователя {message.from_user.id}: "
|
||||||
|
f"can_be_edited={getattr(admin_status, 'can_be_edited', None)}, "
|
||||||
|
f"can_manage_chat={getattr(admin_status, 'can_manage_chat', None)}, "
|
||||||
|
f"can_delete_messages={getattr(admin_status, 'can_delete_messages', None)}, "
|
||||||
|
f"can_restrict_members={getattr(admin_status, 'can_restrict_members', None)}, "
|
||||||
|
f"can_promote_members={getattr(admin_status, 'can_promote_members', None)}, "
|
||||||
|
f"can_change_info={getattr(admin_status, 'can_change_info', None)}, "
|
||||||
|
f"can_invite_users={getattr(admin_status, 'can_invite_users', None)}, "
|
||||||
|
f"can_post_messages={getattr(admin_status, 'can_post_messages', None)}, "
|
||||||
|
f"can_edit_messages={getattr(admin_status, 'can_edit_messages', None)}, "
|
||||||
|
f"can_pin_messages={getattr(admin_status, 'can_pin_messages', None)}, "
|
||||||
|
f"user={getattr(admin_status, 'user', None)}")
|
||||||
|
|
||||||
# ВАЖНО: В каналах администраторы могут иметь статус 'left', но при этом иметь права администратора
|
# ВАЖНО: В каналах администраторы могут иметь статус 'left', но при этом иметь права администратора
|
||||||
# Проверяем наличие прав администратора через can_* поля
|
# Проверяем наличие прав администратора через can_* поля
|
||||||
is_admin = admin_status.status in ('administrator', 'creator')
|
is_admin = admin_status.status in ('administrator', 'creator')
|
||||||
|
|
||||||
|
logger.debug(f"Начальная проверка: is_admin={is_admin}, status={admin_status.status}")
|
||||||
|
|
||||||
# Для каналов: если статус 'left', но есть админские права - считаем администратором
|
# Для каналов: если статус 'left', но есть админские права - считаем администратором
|
||||||
if admin_status.status == 'left':
|
if admin_status.status == 'left':
|
||||||
|
logger.debug(f"Обнаружен статус 'left', проверяем админские права...")
|
||||||
# Проверяем наличие любых админских прав
|
# Проверяем наличие любых админских прав
|
||||||
has_admin_rights = any([
|
has_admin_rights = any([
|
||||||
getattr(admin_status, 'can_be_edited', False),
|
getattr(admin_status, 'can_be_edited', False),
|
||||||
|
Reference in New Issue
Block a user