from loguru import logger import re from aiogram import types from aiogram.dispatcher import FSMContext from states.project import ProjectStates from services.repositories import Repos, ProjectRepo async def ask_for_project_fields(message: types.Message, state: FSMContext): await state.set_state(ProjectStates.create) await message.reply( "Название проекта: Превращение песиков в котиков\n\n" "Описание: Наши цели прямы и понятны! Мы хотим написать " "алгоритм конвертации песиков в котиков.\n\n" "Контакты: @создатель\n\n" "Кол-во участников: 2 " "(пожалуйста напишите число участников не раскрывая личные данные)\n\n" "Статус: 1 (1 - проект ищет людей, 2 - в работе, " "3 - проект завершен, 0 - отменен)\n\n" "Теги: #python\n\n" "Категория: написание алгоритма" ) await message.reply( "Пожалуйста отправьте анкету вашего проекта по шаблону " "из сообщения выше (скопируйте сообщение и замените данные)" ) async def create_project( message: types.Message, repo: Repos, state: FSMContext ): await state.reset_state() field_types = { "Название проекта": str, "Описание": str, "Контакты": str, "Кол-во участников": int, "Статус": int, "Теги": str, "Категория": str } field_values = {name: None for name in field_types} for name, data_type in field_types.items(): try: field_values[name] = data_type( re.findall(rf"(?<={name}: ).*", message.text)[0] ) except IndexError: pass logger.debug(field_values) await repo.get_repo(ProjectRepo).add( *field_values.values(), user_id=message.from_user.id )