исключение из групп
This commit is contained in:
+48
-43
@@ -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("Пожалуйста, укажите ФИО пользователя для кика.")
|
||||
full_name = args.strip()
|
||||
employees_data = get_sheet_data1("Лист1")
|
||||
|
||||
if len(employees_data) < 2:
|
||||
await message.reply("Данные о сотрудниках отсутствуют.")
|
||||
return
|
||||
|
||||
# Поиск ID пользователя по ФИО в Google Таблице
|
||||
try:
|
||||
data = sheet.get_all_values() # Получаем все значения в таблице
|
||||
except Exception as e:
|
||||
await message.answer("Не удалось получить данные из таблицы.")
|
||||
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:
|
||||
# Получаем список ID групп из Лист2
|
||||
chat_ids = get_sheet_data("Лист2")
|
||||
if not chat_ids or not chat_ids[0]:
|
||||
await message.reply("Список групп для удаления не найден.")
|
||||
return
|
||||
|
||||
kicked_from = []
|
||||
for chat_id in chat_ids[0]: # Берем ID групп из первой строки
|
||||
try:
|
||||
await bot.kick_chat_member(chat_id, user_id)
|
||||
except BadRequest as e:
|
||||
errors.append(f"Ошибка в чате {chat_id}: {e}")
|
||||
await bot.kick_chat_member(chat_id, employee_id)
|
||||
kicked_from.append(chat_id)
|
||||
except Exception as e:
|
||||
print(f"Ошибка при исключении из {chat_id}: {e}")
|
||||
|
||||
# Отправляем сообщение админу один раз
|
||||
if errors:
|
||||
await bot.send_message(
|
||||
ADMIN_ID,
|
||||
f"Пользователь с ID {user_id} был исключён из чатов, "
|
||||
f"но произошли ошибки: {'; '.join(errors)}"
|
||||
)
|
||||
if kicked_from:
|
||||
await message.reply(f"Сотрудник {full_name} исключен из {len(kicked_from)} групп.")
|
||||
else:
|
||||
await bot.send_message(ADMIN_ID, f"Пользователь с ID {user_id} был исключён из всех чатов.")
|
||||
|
||||
await message.answer(f"Команда на кик пользователя с ФИО '{full_name}' отправлена во все чаты.")
|
||||
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user