Есть бот, у которого одна из функций это вычисление пропорций в смесях. Идея такая - одна и та же ассинхронная функция принимает как команду /proportions так и callback "another_proportion" (коллбек срабатывает с кнопки в ответе если пользователю после получения ответа нужно посчитать ещё одну пропорцию)
@admin_router.callback_query(F.data == 'another_proportion')
@admin_router.message(Command('proportions'))
@check_is_admin
async def proportions(
message: Message,
state: FSMContext,
callback: CallbackQuery = None,
keep_last_msg: bool = False
):
"""
Handles the 'proportions' command. Receive a str value from admin and
triggers the calculate_proportion function.
:param callback:
:param state:
:param keep_last_msg:
:param message:
:return: None
"""
if callback:
message = callback.message
if not keep_last_msg:
await message.delete()
await sleep(DEL_TIME)
await state.set_state(ProportionStates.waiting_for_proportion_input)
sent_message = await message.answer(
text='Введите через пробел: '
'\nПропорции компонентов '
'<b>A</b> и <b>B</b>, '
'и общую массу - <b>C</b>'
)
await record_message_id_to_db(sent_message)
Попробовал много вариантов - пока что не подошло ничего. Код сверху сыпится на моменте:
await message.delete()
AttributeError: 'CallbackQuery' object has no attribute 'delete'
Плюс у меня прописан декоратор:
def check_is_admin(function):
"""
A decorator that checks whether the user is an admin.
:param function: The function to be decorated.
:return: The decorated function.
"""
@wraps(function)
async def wrapper(message: Message, *args, **kwargs):
await record_message_id_to_db(message)
if message.chat.id in ADMIN_IDS:
return await function(message, *args, **kwargs)
else:
await chepuha(message)
return wrapper
Но с ним можно разобраться позже. Если кто-то уже реализовывал подобное - расскажите пожалуйста как.