This repository has been archived on 2022-10-22. You can view files and clone it, but cannot push or open issues or pull requests.
it-volunteers-for-peace/handlers/projects.py
2022-10-17 14:36:46 +03:00

63 lines
2.4 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
):
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
)
await state.reset_state()
def register_projects_handlers(dp: Dispatcher):
dp.register_message_handler(create_project, Text("Создать проект"))
dp.register_message_handler(get_project_fields, state=ProjectStates.set_fields)