async def echo(msg: types.Message, state: FSMContext): text = msg.text if text == 'Полная': js = new_collection.find({}, { '_id' : 0}) full = db_list(js) for elem in full: full_text = '' for i in elem: full_text += i + '\n' await bot.send_message(msg.from_user.id, full_text) elif text == 'Фио': js = new_collection.find({}, { 'doljname' : 1, 'Fname' : 1, 'Name': 1, 'Oname': 1, '_id' : 0}) full = db_list(js) for elem in full: full_text = [] for i in elem: full_text.append(i) full_text.insert(1, '-') full_text = ' '.join(full_text) await bot.send_message(msg.from_user.id, full_text) elif text == PASSWORD: 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, 'Я не знаю таких слов')
async def echo(msg: types.Message, state: FSMContext): text = msg.text if text == 'Полная': #edit js = new_collection.find({}, { '_id' : 0, 'edited': 0}) full = db_list(js) for elem in full: full_text = '' for i in elem: full_text += str(i) + '\n' await bot.send_message(msg.chat.id, full_text) elif text == 'Фио': #edit js = new_collection.find({}, { 'Phone' : 0, 'Room' : 0, 'Mail': 0, '_id' : 0}) full = db_list(js) str0 = '' for elem in full: full_text = [] for i in elem: full_text.append(str(i)) full_text.insert(1, '-') full_text = ' '.join(full_text) str0 += full_text + '\n\n' await bot.send_message(msg.chat.id, str0) elif text.isdigit(): #worker js = new_collection.find({}, { '_id' : 0, 'edited': 0}) full = db_list(js) code = int(text)-1 full_text = '' for i in range(len(full)): if code == i: for g in full[i]: full_text += str(g) + '\n' await bot.send_message(msg.chat.id, full_text) else: await bot.send_message(msg.chat.id, 'Я не знаю таких слов')
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 #проверка по 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 echo(msg: types.Message, state: FSMContext): text = msg.text if text == 'Полная': js = new_collection.find({}, {'_id': 0}) full = db_list(js) for elem in full: full_text = '' for i in elem: full_text += i + '\n' await bot.send_message(msg.from_user.id, full_text) elif text == 'Фио': js = new_collection.find({}, { 'doljname': 1, 'Fname': 1, 'Name': 1, 'Oname': 1, '_id': 0 }) full = db_list(js) for elem in full: full_text = [] for i in elem: full_text.append(i) full_text.insert(1, '-') full_text = ' '.join(full_text) await bot.send_message(msg.from_user.id, full_text) elif text.isdigit(): js = new_collection.find({}, {'_id': 0}) full = db_list(js) code = int(text) full_text = '' for i in range(len(full)): if code == i: for g in full[i]: full_text += g + '\n' await bot.send_message(msg.from_user.id, full_text) elif text == PASSWORD: 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, 'Я не знаю таких слов')
async def process_callback_kb1btn1(callback_query: types.CallbackQuery): js = new_collection.find({}, { '_id' : 0}) full = db_list(js) code = callback_query.data[-1] if code.isdigit(): code = int(code) full_text = '' for i in range(len(full)): if code == i: for g in full[i]: full_text += g + '\n' await bot.send_message(callback_query.from_user.id, full_text)
async def change_room(msg: types.Message, state: FSMContext): text = msg.text key_list = ['doljname', 'Fname', 'Name', 'Oname', 'Room', 'Phone', 'Mail'] await state.set_state(States.CHANGE) data = await state.get_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)
async def dolj(msg: types.Message, state: FSMContext): dolj = msg.text #получаем текст из сообщения if dolj.isalpha(): change = adm_collection.find({}, {'_id' : 0, 'edited': 0}) full = db_list(change) for i in range(len(full)): if dolj in full[i]: await bot.send_message(msg.chat.id, 'Руководитель с такой должностью уже существует') return await state.set_state(States.ADMIN) #смена состояния на админку await state.update_data(doljname=dolj) #привязка текущей инфы к состоянию await state.set_state(States.FIO) #смена состояния на следующее await bot.send_message(msg.chat.id, 'Введи фамилию, имя и отчество через пробелы') else: await bot.send_message(msg.chat.id, 'Неверный формат')
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)