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