async def admin_chose_user(message: types.Message, state: FSMContext): async with state.proxy() as data: user_id = '' for char in message.text: if char.isnumeric(): user_id += char else: break if user_id: user_id = int(user_id) else: await bot.send_message(message.chat.id, 'Неправильный id пользователя') return if int(user_id) not in users_db.get_ids('users'): await bot.send_message(message.chat.id, 'Неправильный id пользователя') return data['user_id'] = int(user_id) user = users_db.get_record_by_id('users', data['user_id']) text = f'id: {user["id"]}\n' \ f'username: {user["user_name"]}\n' \ f'level: {user["level"]}\n' \ f'post: {user["post"]}' await Message.answer_user.set() await bot.send_message(message.chat.id, text, reply_markup=keyboards.adminsroom_user_main)
async def start(message: types.Message, state: FSMContext): user_id = message.chat.id if user_id in ADMIN_IDS: keyboard = keyboards.main_admin else: keyboard = keyboards.main_user await state.finish() if user_id not in users_db.get_ids('users'): if user_id in ADMIN_IDS: users_db.add_record('users', user_id, message.from_user.username, 'admin', 100) else: if message.from_user.username: users_db.add_record('users', user_id, message.from_user.username, 'user', 1) else: users_db.add_record('users', user_id, f'User_{user_id}', 'user', 1) print(users_db.get_record_by_id('users', user_id)) await bot.send_message(user_id, 'Стартуем', reply_markup=keyboard) else: await bot.send_message(user_id, 'Вы уже есть в БД', reply_markup=keyboard)
def adminsroom_user_chose() -> ReplyKeyboardMarkup: keyboard = ReplyKeyboardMarkup(resize_keyboard=True) for user_id in users_db.get_ids('users'): user = users_db.get_record_by_id('users', user_id) button = f'{user_id}: {user["user_name"]}' keyboard.row(button) keyboard.row('Отмена') return keyboard
async def admin_user_handler(message: types.Message, state: FSMContext): async with state.proxy() as data: if message.text.lower() == 'повысить': user_id = data['user_id'] users_db.update_column('users', user_id, 'level', users_db.get_record_by_id('users', user_id)['level'] + 1) await bot.send_message(message.chat.id, f'Уровень повышен ' f'({users_db.get_record_by_id("users", user_id)["level"]})') await bot.send_message(data['user_id'], f'Ваш уровень повышен ' f'({users_db.get_record_by_id("users", user_id)["level"]})') elif message.text.lower() == 'понизить': user_id = data['user_id'] users_db.update_column('users', user_id, 'level', users_db.get_record_by_id("users", user_id)['level'] - 1) await bot.send_message(message.chat.id, f'Уровень понижен ' f'({users_db.get_record_by_id("users", user_id)["level"]})') await bot.send_message(data['user_id'], f'Ваш уровень понижен ' f'({users_db.get_record_by_id("users", user_id)["level"]})') elif message.text.lower() == 'написать сообщение': await Message.message_user.set() await bot.send_message(message.chat.id, 'Введи своё сообщение:', reply_markup=keyboards.cancel)
async def lessons_chose(message: types.Message, state: FSMContext): async with state.proxy() as data: lesson_id = '' for char in message.text: if char.isnumeric(): lesson_id += char else: break if lesson_id: lesson_id = int(lesson_id) else: await bot.send_message(message.chat.id, 'Неправильный номер урока.' ' Введите корректный номер или выберите из клавиатуры') return if int(lesson_id) not in lessons_db.get_ids(data['group']): await bot.send_message(message.chat.id, 'Неправильный номер урока.' ' Введите корректный номер или выберите из клавиатуры') return data['lesson'] = lessons_db.get_record_by_id(data['group'], lesson_id) lesson = data['lesson'] if lesson['level'] > users_db.get_record_by_id('users', message.chat.id)['level']: await bot.send_message(message.chat.id, 'У вас слишком низкий уровень. Чтобы получить уровень выше, ' 'Вы должны пройти тест в предыдущем уроке, если вы его прошли, но еще ' 'не получили уровень, обратитесь к преподавателю.\n' f'Ваш уровень: ' f'{users_db.get_record_by_id("users", message.chat.id)["level"]}\n' f'Требуется уровень: {lesson["level"]}') return if 'Практическая' in lesson['theme']: text = lesson['text'] text = text.split('\n') user_id = message.chat.id user_var = user_id % len(text) await bot.send_message(message.chat.id, f'Урок №{lesson_id}:\n\nТема: {lesson["theme"]} \n\n{text[user_var]}') else: await bot.send_message(message.chat.id, f'Урок №{lesson_id}:\n\nТема: {lesson["theme"]} \n\n{lesson["text"]}') await bot.send_message(message.chat.id, 'https://wombat.org.ua/AByteOfPython/AByteofPythonRussian-2.02.pdf') paths = lesson["materials"] paths = paths.split('\n') for path in paths: await bot.send_message(message.chat.id, path) await bot.send_message(message.chat.id, 'Удачи в изучении. Снизу кнопки для сдачи теста,' ' помощи от преподавателя или, если вы не хотите, то отмена', reply_markup=keyboards.lessons_lesson) await Lessons.next()
async def admin_handler(message: types.Message, state: FSMContext): async with state.proxy() as data: if message.text.lower() == 'сообщения': await Message.question.set() await bot.send_message(message.chat.id, 'Выберите сообщение', reply_markup=keyboards.adminsroom_message_chose()) elif message.text.lower() == 'пользователь': await Message.user.set() await bot.send_message(message.chat.id, 'Введите id пользователя', reply_markup=keyboards.adminsroom_user_chose()) elif message.text.lower() == 'все пользователи': with open('users.txt', 'w') as users_file: users_file.write(f'{"id":^11}|{"username":^20}|{"post":^6}|{"level":^6}\n') users_file.write('-' * (12 + 21 + 7 + 6) + '\n') for user_id in users_db.get_ids('users'): user = users_db.get_record_by_id('users', user_id) users_file.write(f'{user["id"]:<11}|{user["user_name"]:^20}|{user["post"]:6}|{user["level"]:<6}\n') with open('users.txt', 'r') as users_file: await bot.send_document(message.chat.id, users_file)
async def profile(message: types.Message): user = users_db.get_record_by_id('users', message.chat.id) text = f'Имя: {user["user_name"]}\n' \ f'id: {user["id"]}\n' \ f'Уровень: {user["level"]}\n' await bot.send_message(message.chat.id, text, reply_markup=keyboards.profile_main())