diff --git a/probnik_Bot_for_HR.py b/probnik_Bot_for_HR.py index 55dedb5..4021c34 100644 --- a/probnik_Bot_for_HR.py +++ b/probnik_Bot_for_HR.py @@ -49,7 +49,6 @@ SPREADSHEET_ID = '1j12H6NCZec9MEWQypPbzhETNtn58fnin1HBRkkr3a1w' SHEET_NAME_GROUPS = 'Лист2' SHEET_NAME_EMPLOYEES = 'Лист1' RANGE_NAME = 'Лист1!A1:O' # Диапазон данных в таблице -CHAT_IDS = [-1002306913175, -1002266505101] # Замените на ID чатов, где бот администратор # Логирование logging.basicConfig(level=logging.INFO) @@ -97,9 +96,21 @@ SPREADSHEET_NAME = "Корпоративные группы Клиники в Т def load_changes(): - """Считываем данные из файла changes.json.""" - with open(CHANGES_FILE, "r", encoding="utf-8") as f: - return json.load(f) + file_path = r"C:\Users\ilyac\PycharmProjects\Bot_for_clinic\sheets_backup\changes.json" # Укажите ваш путь к JSON-файлу + if not os.path.exists(file_path): + raise FileNotFoundError(f"Файл {file_path} не найден.") + + with open(file_path, 'r', encoding='utf-8') as f: + content = f.read().strip() # Читаем и удаляем лишние пробелы + if not content: + raise ValueError(f"Файл {file_path} пуст.") + + try: + return json.loads(content) # Используем json.loads для строки + except json.JSONDecodeError as e: + raise ValueError(f"Ошибка декодирования JSON в файле {file_path}: {e}") + + def get_sheet_data2(sheet_name): @@ -601,54 +612,48 @@ gc = gspread.service_account(filename=SERVICE_ACCOUNT_FILE) sheet = gc.open_by_key(SPREADSHEET_ID).sheet1 # Открываем первую таблицу -@dp.message_handler(commands=['kick'], chat_type=types.ChatType.PRIVATE) -async def kick_user(message: types.Message): - if message.from_user.id != ADMIN_ID: - await message.answer("Эта команда доступна только администратору бота.") +@dp.message_handler(commands=['kick']) +async def kick_employee(message: types.Message): + args = message.get_args() + if not args: + await message.reply("Введите ФИО сотрудника после команды /kick.") return - # Получаем ФИО из сообщения - full_name = message.get_args().strip() - if not full_name: - await message.answer("Пожалуйста, укажите ФИО пользователя для кика.") - return + full_name = args.strip() + employees_data = get_sheet_data1("Лист1") - # Поиск ID пользователя по ФИО в Google Таблице - try: - data = sheet.get_all_values() # Получаем все значения в таблице - except Exception as e: - await message.answer("Не удалось получить данные из таблицы.") + if len(employees_data) < 2: + await message.reply("Данные о сотрудниках отсутствуют.") return - user_id = None - for row in data: - if row and row[0] == full_name: # ФИО в первом столбце - user_id = row[13] # ID в 14-м столбце (индекс 13) + employee_id = None + for row in employees_data[1:]: # Пропускаем заголовок + if len(row) >= 14 and row[0].strip().lower() == full_name.lower(): + employee_id = row[13] break - if user_id is None: - await message.answer(f"Пользователь с ФИО '{full_name}' не найден в таблице.") + if not employee_id: + await message.reply("Сотрудник не найден в базе.") return - errors = [] # Список для хранения ошибок - for chat_id in CHAT_IDS: - try: - await bot.kick_chat_member(chat_id, user_id) - except BadRequest as e: - errors.append(f"Ошибка в чате {chat_id}: {e}") - - # Отправляем сообщение админу один раз - if errors: - await bot.send_message( - ADMIN_ID, - f"Пользователь с ID {user_id} был исключён из чатов, " - f"но произошли ошибки: {'; '.join(errors)}" - ) - else: - await bot.send_message(ADMIN_ID, f"Пользователь с ID {user_id} был исключён из всех чатов.") + # Получаем список ID групп из Лист2 + chat_ids = get_sheet_data("Лист2") + if not chat_ids or not chat_ids[0]: + await message.reply("Список групп для удаления не найден.") + return - await message.answer(f"Команда на кик пользователя с ФИО '{full_name}' отправлена во все чаты.") + kicked_from = [] + for chat_id in chat_ids[0]: # Берем ID групп из первой строки + try: + await bot.kick_chat_member(chat_id, employee_id) + kicked_from.append(chat_id) + except Exception as e: + print(f"Ошибка при исключении из {chat_id}: {e}") + if kicked_from: + await message.reply(f"Сотрудник {full_name} исключен из {len(kicked_from)} групп.") + else: + await message.reply("Не удалось исключить сотрудника.") def get_registration_button(): keyboard = ReplyKeyboardMarkup(resize_keyboard=True) @@ -669,7 +674,7 @@ def get_consent_keyboard(): # Получение данных из Google Таблицы def get_sheet_data(sheet_name): - range_name = f"{sheet_name}!B1:C3" # Диапазон для строки с chat_id и группами + range_name = f"{sheet_name}!B1:AE3" # Диапазон для строки с chat_id и группами result = service.spreadsheets().values().get( spreadsheetId=SPREADSHEET_ID, range=range_name @@ -679,7 +684,7 @@ def get_sheet_data(sheet_name): # Получение данных из Google Таблицы def get_sheet_data1(sheet_name): - range_name = f"{sheet_name}!A1:P100" # Диапазон для строки с chat_id и группами + range_name = f"{sheet_name}!A1:Q200" # Диапазон для строки с chat_id и группами result = service.spreadsheets().values().get( spreadsheetId=SPREADSHEET_ID, range=range_name