@Bogdan_01101

Как правильно передать все параметры в функцию. aiogram3?

Я пишу тг бота. Одна из его функций - это возможность составлять заказ который потом будет отправляться исполнителю(определённому пользователю).
Вся проблема в том, что мне нужно вызвать функцию "Tsize_3" в ручную и я в принципе понимаю как это сделать, но у меня проблема с переменной "state". Я не знаю что туда нужно передавать что бы всё заработало.
@mao_rt.callback_query(order.what_to_draw)
async def what_to_drow_2(call: types.CallbackQuery, state: FSMContext):
    
    calltxt = call.data

    await state.update_data(wyat_to_draw=calltxt)
    print(f'what_to_drow_2\n{calltxt}')
    await state.set_state(order.size)

    if not gl_calltxt1 in ['На одежде','На стене','На деревянном изделии']:  # если True
        # тогда проходит на следующий обработчик
        await call.message.answer("Напиши каких размеров вы хотите картину или выберите из стандартных размеров", reply_markup=Rkb3)
    else:  # иначе
        # вызывает функцию
        print(state)
        await Tsize_3(mess = None, tf=False, chat_id=call.inline_message_id)
    await call.answer()


@mao_rt.message(order.size)
async def Tsize_3 (mess: types.Message, state: FSMContext = '<aiogram.fsm.context.FSMContext object at 0x000002B1F2759880>',
                    chat_id: int = None, tf: bool =True):
    if tf:
        await state.update_data(size=mess.text)
        chat_id = mess.from_user.id
    else:
        await state.update_data(size='None')
    await state.set_state(order.wishes)

    await bot.send_message(chat_id=chat_id, text="""Теперь напишите все свои хотелки.
Отправляйте что хотите и сколько хотите. 
Когда законите, напишите /send """, reply_markup=ReplyKeyboardRemove())


Я попробовал передать строку ,но выдаёт ошибку:"AttributeError: 'str' object has no attribute 'update_data'".
  • Вопрос задан
  • 95 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Everything_is_bad
1. потому что не нужно дергать хендлеры руками, они не для этого, разбирайся в их концепции
2.
state: FSMContext = '<aiogram.fsm.context.FSMContext object at 0x000002B1F2759880>'
как ты до этого додумался, ты зачем-то сделал значение по умолчанию строку, про что тебе и написали в ошибке
Ответ написан
Комментировать
Vindicar
@Vindicar
RTFM!
Вся проблема в том, что мне нужно вызвать функцию "Tsize_3" в ручную

В этом и есть проблема, да. Не нужно вызывать обработчики событий вручную. Если тебе нужно повторить одно и то же действие в двух местах - вынеси его в обычную подпрограмму, и уже эту подпрограмму вызывай и в обработчике, и где там тебе ещё нужно.
А лучше, опиши, что ты вообще пытаешься сделать - из кода это не очень понятно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы