61 lines
2.5 KiB
Python
61 lines
2.5 KiB
Python
from loguru import logger
|
|
import re
|
|
|
|
from aiogram import types, Dispatcher
|
|
from aiogram.dispatcher import FSMContext
|
|
from aiogram.dispatcher.filters import Text
|
|
from asyncpg import BitString
|
|
|
|
|
|
from states.project import ProjectStates
|
|
from services.repositories import Repos, ProjectRepo
|
|
|
|
|
|
async def create_project(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 get_project_fields(message: types.Message, repo: Repos, state: FSMContext):
|
|
# TODO: для тегов и категорий вытаскивать из таблиц индексы,
|
|
# значением для creator должен быть user_id.
|
|
field_patterns = {
|
|
"Название проекта": str,
|
|
"Описание": str,
|
|
"Кол-во участников": int,
|
|
"Статус": BitString,
|
|
}
|
|
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 state.reset_state()
|
|
await repo.get_repo(ProjectRepo).add(*field_values)
|
|
|
|
|
|
def register_projects_handlers(dp: Dispatcher):
|
|
dp.register_message_handler(create_project, Text("Создать проект"))
|
|
dp.register_message_handler(get_project_fields, state=ProjectStates.set_fields)
|