from loguru import logger import re from aiogram import types from aiogram.dispatcher import FSMContext from asyncpg import BitString 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.set_fields) 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_patterns = { "Название проекта": str, "Описание": str, "Контакты": str, "Кол-во участников": int, "Статус": BitString, "Теги": str, "Категория": str } field_values = [] for pattern, field_type in field_patterns.items(): try: field_values.append( field_type(re.findall(rf"(?<={pattern}: ).*", message.text)[0]) ) except IndexError: pass logger.debug(field_values) await repo.get_repo(ProjectRepo).add( *field_values, user_id=message.from_user.id )