async def admin(msg: types.Message, state: FSMContext): text = msg.text user_id = msg.from_user.id dolj = '' if text == 'Создать': #создание нового документа: DOLJ, FIO, ADRESS, PHONE, EMAIL if dolj == '': await state.set_state(States.DOLJ) await bot.send_message(msg.chat.id, "Введи должность:") return elif text == 'Изменить': #изменение существующего документа: CHANGE, CHANGE_ROOM board_4 = create_reply_keyboard() await state.set_state(States.CHANGE) full_text = num_list() await bot.send_message(msg.chat.id, full_text) await bot.send_message(msg.chat.id, "Это весь список, кого будем редактировать?", reply_markup=board_4) elif text == 'Удалить': #удаление документа из коллекции: DELETE board_4 = create_reply_keyboard() await state.set_state(States.DELETE) full_text = num_list() await bot.send_message(msg.chat.id, full_text) await bot.send_message(msg.chat.id, "Это весь список, кого будем удалять?", reply_markup=board_4) elif text == 'Сохранить': #обновление коллекции, сброс состояния save_adm(user_id) await state.finish() await bot.send_message(msg.chat.id, "Воистину админь") elif text == 'Запуск парсера': parser() else: await bot.send_message( msg.chat.id, "Сохраните изменения, внесенные в режиме админа")
async def process_worker_command(msg: types.Message, state: FSMContext): board_4 = create_reply_keyboard() full_text = num_list() await bot.send_message(msg.chat.id, full_text) await bot.send_message(msg.chat.id, "Вот все руководство, выбирай", reply_markup=board_4)
async def delete(msg: types.Message, state: FSMContext): text = msg.text board_4 = create_reply_keyboard() if text.isdigit(): code = int(text) - 1 #проверка по id delete = adm_collection.find({}, {'_id': 0}).skip(code).limit(1) full = db_list(delete) user_id = msg.from_user.id if len(full[0]) > 7: if full[0][7] != str(user_id): await bot.send_message( msg.from_user.id, 'Редактирование сейчас недоступно, выберите другого человека', reply_markup=board_4) return else: new_doc = {'admin_id': f'{user_id}'} adm_collection.update_one({'doljname': full[0][0]}, {"$set": new_doc}) adm_collection.remove({'doljname': full[0][0]}) await state.set_state(States.ADMIN) await bot.send_message( msg.from_user.id, "Если это все, что ты хотел - жми 'Сохранить', ну или выбирай, что будем делать", reply_markup=board_3)
async def admin(msg: types.Message, state: FSMContext): text = msg.text user_id = msg.from_user.id dolj = '' if text == 'Создать': if dolj == '': await state.set_state(States.DOLJ) await bot.send_message(msg.from_user.id, "Введи должность:" ) return elif text == 'Изменить': board_4 = create_reply_keyboard() await state.set_state(States.CHANGE) js = adm_collection.find({}, {'doljname' : 1, '_id' : 0}) full = db_list(js) g = 1 full_text = '' for elem in full: for i in elem: full_text += f'{g}' + '. ' + i + '\n' g += 1 await bot.send_message(msg.from_user.id, full_text) await bot.send_message(msg.from_user.id, "Это весь список, кого будем редактировать?", reply_markup=board_4) elif text == 'Удалить': board_4 = create_reply_keyboard() await state.set_state(States.DELETE) js = adm_collection.find({}, {'doljname' : 1, '_id' : 0}) full = db_list(js) g = 1 full_text = '' for elem in full: for i in elem: full_text += f'{g}' + '. ' + i + '\n' g += 1 await bot.send_message(msg.from_user.id, full_text) await bot.send_message(msg.from_user.id, "Это весь список, кого будем удалять?", reply_markup=board_4) elif text == 'Сохранить': new_collection.remove({}) docs = adm_collection.find({},{'_id' : 0}) full = [] for doc in docs: if 'admin_id' in doc: if doc['admin_id'] == str(user_id): adm_collection.update_one({'doljname' : doc['doljname']}, {"$unset": {'admin_id' : 1}}) doc.pop('admin_id') full.append(doc) new_collection.insert_many(full) await bot.send_message(msg.from_user.id, "Все изменения сохранены", reply_markup=ReplyKeyboardRemove())
async def change(msg: types.Message, state: FSMContext): text = msg.text board_4 = create_reply_keyboard() key_list = ['doljname', 'Fname', 'Name', 'Oname', 'Room', 'Phone', 'Mail'] if text.isdigit(): #получает номер выбранного руководителя code = int(text)-1 change = adm_collection.find({}, {'_id' : 0, 'edited': 0}).skip(code).limit(1) full = db_list(change) user_id = msg.from_user.id if len(full) < 1: #проверка на существования такого номера в коллекции full_text = num_list() await bot.send_message(msg.chat.id, full_text) await bot.send_message(msg.chat.id, "Выбери кого редактироать клавиатуре!", reply_markup=board_4) return elif str(user_id) in full[0]: #проверка admin_id, не допускает параллельного редактирования await bot.send_message(msg.chat.id, 'Редактирование сейчас недоступно, выберите другого человека', reply_markup=board_4) return else: new_doc = {'admin_id' : f'{user_id}'} adm_collection.update_one({'doljname' : full[0][0]}, {"$set": new_doc}) await state.update_data(code=text) full_text = '' for elem in full: if 'admin_id' in elem: elem.pop('admin_id') for value in elem: full_text += str(value) + '\n' await bot.send_message(msg.chat.id, full_text) await bot.send_message(msg.chat.id, "Что будем менять?", reply_markup=board_2) elif text == 'Назад': #возврат в режим админа await state.set_state(States.ADMIN) await bot.send_message(msg.chat.id, "Если это все, что ты хотел - жми 'Сохранить', " "ну или выбирай, что будем делать", reply_markup=board_3) else: #принимает параметр изменения и новые значения butt_list = ['Должность', 'Фамилия', 'Имя', 'Отчество', 'Кабинет', 'Телефон', 'Email'] for i in range(len(butt_list)): if text == butt_list[i]:#запоминаем параметр изменения data = await state.get_data() if 'code' in data: await state.update_data(text=i) if i == 4: await state.set_state(States.CHANGE_ROOM) await bot.send_message(msg.chat.id, "Введи новое значение") return else: await bot.send_message(msg.chat.id, "Сначала выбери кого будем изменять", reply_markup=board_4) data = await state.get_data() if 'text' in data: #проверка на параметр изменения&внесение изменений code = int(data['code']) #номер руководителя в коллекции num = int(data['text']) #параметр изменения change = adm_collection.find({}, {'_id' : 0, 'edited': 0}).skip(code-1).limit(1) full = db_list(change) new_doc = {f'{key_list[num]}' : text, 'edited': '1'} adm_collection.update_one({'doljname' : full[0][0]}, {"$set": new_doc}) await state.set_state(States.ADMIN) await bot.send_message(msg.chat.id, "Если это все, что ты хотел - жми 'Сохранить', ну или выбирай, что будем делать", reply_markup=board_3) else: await bot.send_message(msg.chat.id, "Выбери, что будем менять на клавиатуре, либо напиши 'Назад', вернуться", reply_markup=board_2)
async def change(msg: types.Message, state: FSMContext): text = msg.text board_4 = create_reply_keyboard() key_list = ['doljname', 'Fname', 'Name', 'Oname', 'Room', 'Phone', 'Mail'] if text.isdigit(): code = int(text)-1 change = adm_collection.find({}, {'_id' : 0}).skip(code).limit(1) full = db_list(change) user_id = msg.from_user.id if len(full[0]) > 7: if full[0][7] != str(user_id): await bot.send_message(msg.from_user.id, 'Редактирование сейчас недоступно, выберите другого человека', reply_markup=board_4) return else: new_doc = {'admin_id' : f'{user_id}'} adm_collection.update_one({'doljname' : full[0][0]}, {"$set": new_doc}) await state.update_data(code=text) full_text = '' for elem in full: if 'admin_id' in elem: elem.pop('admin_id') for value in elem: full_text += str(value) + '\n' await bot.send_message(msg.from_user.id, full_text) await bot.send_message(msg.from_user.id, "Что будем менять?", reply_markup=board_5) elif text == 'Назад': await state.set_state(States.ADMIN) await bot.send_message(msg.from_user.id, "Если это все, что ты хотел - жми 'Сохранить', " "ну или выбирай, что будем делать", reply_markup=board_3) else: butt_list = ['Должность', 'Фамилия', 'Имя', 'Отчество', 'Кабинет', 'Телефон', 'Email'] key_list = ['doljname', 'Fname', 'Name', 'Oname', 'Room', 'Phone' 'Mail'] for i in range(len(butt_list)): if text == butt_list[i]: data = await state.get_data() if 'code' in data: await state.update_data(text=i) await bot.send_message(msg.from_user.id, "Введи новое значение") return else: await bot.send_message(msg.from_user.id, "Сначала выбери кого будем изменять", reply_markup=board_4) data = await state.get_data() if 'text' in data: code = int(data['code']) num = int(data['text']) change = adm_collection.find({}, {'_id' : 0}).skip(code-1).limit(1) full = db_list(change) new_doc = {f'{key_list[num]}' : text} adm_collection.update_one({'doljname' : full[0][0]}, {"$set": new_doc}) await state.set_state(States.ADMIN) await bot.send_message(msg.from_user.id, "Если это все, что ты хотел - жми 'Сохранить', ну или выбирай, что будем делать", reply_markup=board_3) else: await bot.send_message(msg.from_user.id, "Выбери, что будем менять на клавиатуре, либо напиши 'Назад', вернуться", reply_markup=board_5)
async def delete(msg: types.Message, state: FSMContext): text = msg.text board_4 = create_reply_keyboard() if text.isdigit(): code = int(text) - 1 delete = adm_collection.find({}, { '_id': 0, 'edited': 0 }).skip(code).limit(1) full = db_list(delete) user_id = msg.from_user.id if len(full) < 1: #проверка на существования такого номера в коллекции full_text = num_list() await bot.send_message(msg.chat.id, full_text) await bot.send_message(msg.chat.id, "Выбери кого удалить клавиатуре!", reply_markup=board_4) return elif len(full[0]) > 7: #проверка admin_id if full[0][7] != str(user_id): await bot.send_message( msg.chat.id, 'Редактирование сейчас недоступно, выберите другого человека', reply_markup=board_4) return else: new_doc = {'admin_id': f'{user_id}'} old_doc = { 'doljname': full[0][0], 'Fname': full[0][1], 'Name': full[0][2], 'Oname': full[0][3], 'Room': full[0][4], 'Phone': full[0][5], 'Mail': full[0][6] } adm_collection.update_one(old_doc, {"$set": new_doc}) adm_collection.remove(old_doc) #удаление документа await state.set_state(States.ADMIN) await bot.send_message( msg.chat.id, "Если это все, что ты хотел - жми 'Сохранить', ну или выбирай, что будем делать", reply_markup=board_3)