chore: Code refactoring and improvements

This commit is contained in:
ITQ
2024-03-22 00:16:12 +03:00
parent b32add6d07
commit 013d04261b
10 changed files with 82 additions and 151 deletions
+17 -81
View File
@@ -8,11 +8,15 @@ from aiogram.fsm.context import FSMContext
from aiogram.types import CallbackQuery, Message, ReplyKeyboardRemove
from app import messages, session
from app.filters.user_filter import Registered, RegisteredCallback
from app.keyboards.builders import profile
from app.filters.user import Registered, RegisteredCallback
from app.keyboards.builders import sex_keyboard
from app.keyboards.profile import get
from app.models.user import User
from app.utils.states import delete_message_from_state, UserAltering
from app.states.user import UserAltering
from app.utils.states import (
delete_message_from_state,
handle_validation_error,
)
router = Router(name="profile_callback")
@@ -47,7 +51,7 @@ async def profile_change_callback(
elif column == "sex":
message = await callback.message.answer(
f"{messages.INPUT_SEX}\n{messages.CANCEL_CHANGE}",
reply_markup=profile(["Male", "Female"]),
reply_markup=sex_keyboard(["Male", "Female"]),
)
elif column == "location":
message = await callback.message.answer(
@@ -93,17 +97,7 @@ async def profile_change_entered(message: Message, state: FSMContext) -> None:
value=value,
)
except AssertionError as e:
await message.delete()
await delete_message_from_state(
state,
message.chat.id,
message.bot,
)
error_message = await message.answer(str(e))
await state.update_data(
previous_message_id=error_message.message_id,
)
await handle_validation_error(message, state, e)
return
@@ -112,17 +106,7 @@ async def profile_change_entered(message: Message, state: FSMContext) -> None:
try:
validated_age = User().validate_age(key="age", value=value)
except AssertionError as e:
await message.delete()
await delete_message_from_state(
state,
message.chat.id,
message.bot,
)
error_message = await message.answer(str(e))
await state.update_data(
previous_message_id=error_message.message_id,
)
await handle_validation_error(message, state, e)
return
@@ -139,17 +123,7 @@ async def profile_change_entered(message: Message, state: FSMContext) -> None:
try:
validated_bio = User().validate_bio(key="bio", value=value)
except AssertionError as e:
await message.delete()
await delete_message_from_state(
state,
message.chat.id,
message.bot,
)
error_message = await message.answer(str(e))
await state.update_data(
previous_message_id=error_message.message_id,
)
await handle_validation_error(message, state, e)
return
@@ -160,17 +134,7 @@ async def profile_change_entered(message: Message, state: FSMContext) -> None:
try:
validated_sex = User().validate_sex(key="sex", value=value)
except AssertionError as e:
await message.delete()
await delete_message_from_state(
state,
message.chat.id,
message.bot,
)
error_message = await message.answer(str(e))
await state.update_data(
previous_message_id=error_message.message_id,
)
await handle_validation_error(message, state, e)
return
@@ -179,18 +143,10 @@ async def profile_change_entered(message: Message, state: FSMContext) -> None:
location = value.split(", ")
if len(location) != 2:
await message.delete()
await delete_message_from_state(
await handle_validation_error(
message,
state,
message.chat.id,
message.bot,
)
error_message = await message.answer(
messages.VALIDATION_ERROR_MESSAGE,
)
await state.update_data(
previous_message_id=error_message.message_id,
messages.VALIDATION_ERROR,
)
return
@@ -203,17 +159,7 @@ async def profile_change_entered(message: Message, state: FSMContext) -> None:
value=country,
)
except AssertionError as e:
await message.delete()
await delete_message_from_state(
state,
message.chat.id,
message.bot,
)
error_message = await message.answer(str(e))
await state.update_data(
previous_message_id=error_message.message_id,
)
await handle_validation_error(message, state, e)
return
@@ -223,17 +169,7 @@ async def profile_change_entered(message: Message, state: FSMContext) -> None:
country=validated_country,
)
except AssertionError as e:
await message.delete()
await delete_message_from_state(
state,
message.chat.id,
message.bot,
)
error_message = await message.answer(str(e))
await state.update_data(
previous_message_id=error_message.message_id,
)
await handle_validation_error(message, state, e)
return
+1 -1
View File
@@ -5,7 +5,7 @@ from aiogram.filters import Command
from aiogram.types import Message
from app import messages
from app.filters.user_filter import Registered
from app.filters.user import Registered
router = Router(name="help_command")
+1 -1
View File
@@ -5,7 +5,7 @@ from aiogram.filters import Command
from aiogram.types import Message
from app import messages
from app.filters.user_filter import Registered
from app.filters.user import Registered
from app.keyboards.profile import get
from app.models.user import User
+18 -44
View File
@@ -6,9 +6,13 @@ from aiogram.fsm.context import FSMContext
from aiogram.types import Message, ReplyKeyboardRemove
from app import messages, session
from app.keyboards.builders import profile
from app.keyboards.builders import sex_keyboard
from app.models.user import User
from app.utils.states import delete_message_from_state, RegistrationForm
from app.states.user import RegistrationForm
from app.utils.states import (
delete_message_from_state,
handle_validation_error,
)
router = Router(name="start_command")
@@ -51,11 +55,7 @@ async def username_handler(message: Message, state: FSMContext) -> None:
value=username,
)
except AssertionError as e:
await message.delete()
await delete_message_from_state(state, message.chat.id, message.bot)
error_message = await message.answer(str(e))
await state.update_data(previous_message_id=error_message.message_id)
await handle_validation_error(message, state, e)
return
@@ -83,11 +83,7 @@ async def age_handler(message: Message, state: FSMContext) -> None:
try:
validated_age = User().validate_age(key="age", value=age)
except AssertionError as e:
await message.delete()
await delete_message_from_state(state, message.chat.id, message.bot)
error_message = await message.answer(str(e))
await state.update_data(previous_message_id=error_message.message_id)
await handle_validation_error(message, state, e)
return
@@ -101,7 +97,7 @@ async def age_handler(message: Message, state: FSMContext) -> None:
)
await message.answer(
messages.INPUT_SEX,
reply_markup=profile(["Male", "Female"]),
reply_markup=sex_keyboard(["Male", "Female"]),
)
@@ -115,11 +111,7 @@ async def sex_handler(message: Message, state: FSMContext) -> None:
try:
validated_sex = User().validate_sex(key="sex", value=sex)
except AssertionError as e:
await message.delete()
await delete_message_from_state(state, message.chat.id, message.bot)
error_message = await message.answer(str(e))
await state.update_data(previous_message_id=error_message.message_id)
await handle_validation_error(message, state, e)
return
@@ -154,17 +146,7 @@ async def bio_handler(message: Message, state: FSMContext) -> None:
try:
validated_bio = User().validate_bio(key="bio", value=bio)
except AssertionError as e:
await message.delete()
await delete_message_from_state(
state,
message.chat.id,
message.bot,
)
error_message = await message.answer(str(e))
await state.update_data(
previous_message_id=error_message.message_id,
)
await handle_validation_error(message, state, e)
return
@@ -187,11 +169,11 @@ async def location_handler(message: Message, state: FSMContext) -> None:
location = message.text.strip().split(", ")
if len(location) != 2:
await message.delete()
await delete_message_from_state(state, message.chat.id, message.bot)
error_message = await message.answer(messages.VALIDATION_ERROR_MESSAGE)
await state.update_data(previous_message_id=error_message.message_id)
await handle_validation_error(
message,
state,
messages.VALIDATION_ERROR,
)
return
@@ -203,11 +185,7 @@ async def location_handler(message: Message, state: FSMContext) -> None:
value=country,
)
except AssertionError as e:
await message.delete()
await delete_message_from_state(state, message.chat.id, message.bot)
error_message = await message.answer(str(e))
await state.update_data(previous_message_id=error_message.message_id)
await handle_validation_error(message, state, e)
return
@@ -217,11 +195,7 @@ async def location_handler(message: Message, state: FSMContext) -> None:
country=validated_country,
)
except AssertionError as e:
await message.delete()
await delete_message_from_state(state, message.chat.id, message.bot)
error_message = await message.answer(str(e))
await state.update_data(previous_message_id=error_message.message_id)
await handle_validation_error(message, state, e)
return
+2 -2
View File
@@ -1,9 +1,9 @@
__all__ = ("profile",)
__all__ = ("sex_keyboard",)
from aiogram.utils.keyboard import ReplyKeyboardBuilder
def profile(text: str | list):
def sex_keyboard(text: str | list):
builder = ReplyKeyboardBuilder()
if isinstance(text, str):
+1 -1
View File
@@ -14,7 +14,7 @@ INPUT_BIO = "Enter your bio (enter /skip if you want to skip this step):\n<i>Max
INPUT_BIO_SKIPPED = "Sure. You can always fill it later."
INPUT_LOCATION = "Enter your location in this format:\n<i>Format: country, city</i>\n<i>Example: Russia, Moscow</i>"
INPUT_CALLBACK = "All right, your <b>{key}</b> is set to: <b>{value}</b>"
VALIDATION_ERROR_MESSAGE = "Invalid input. Please try again."
VALIDATION_ERROR = "Invalid input. Please try again."
CANCEL_CHANGE = "<i>Enter /cancel to cancel change.</i>"
PROFILE = (
+1 -1
View File
@@ -29,7 +29,7 @@ class User(Base):
def validate_username(self, key, value):
regex_pattern = re.compile(r"^[a-zA-Z0-9_]{5,20}$")
assert len(value) <= 32, "Username must be 20 characters or fewer."
assert len(value) <= 32, "Username must be 32 characters or fewer."
assert len(value) >= 5, "Username must be at least 5 characters."
assert (
re.match(regex_pattern, value) is not None
+21
View File
@@ -0,0 +1,21 @@
__all__ = ("RegistrationForm", "UserAltering")
from aiogram.fsm.state import State, StatesGroup
class RegistrationForm(StatesGroup):
previous_message_id = State()
username = State()
age = State()
bio = State()
sex = State()
location = State()
class UserAltering(StatesGroup):
column = State()
value = State()
message_id = State()
input_message_id = State()
previous_message_id = State()
successfully = State()
+20 -20
View File
@@ -1,27 +1,9 @@
__all__ = ("RegistrationForm",)
__all__ = ("delete_message_from_state", "handle_validation_error")
from aiogram import Bot
from aiogram.exceptions import TelegramBadRequest
from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup
class RegistrationForm(StatesGroup):
previous_message_id = State()
username = State()
age = State()
bio = State()
sex = State()
location = State()
class UserAltering(StatesGroup):
column = State()
value = State()
message_id = State()
input_message_id = State()
previous_message_id = State()
successfully = State()
from aiogram.types import Message
async def delete_message_from_state(
@@ -63,3 +45,21 @@ async def delete_message_from_state(
pass
await state.update_data(input_message_id=None)
async def handle_validation_error(
message: Message,
state: FSMContext,
e: AssertionError | str,
) -> None:
await message.delete()
await delete_message_from_state(
state,
message.chat.id,
message.bot,
)
error_message = await message.answer(str(e))
await state.update_data(
previous_message_id=error_message.message_id,
)