@Acetylcarnitine

TypeError: event_list() missing 1 required positional argument: 'call_data" aiogram при использовании CallbackFactory?

@router.callback_query(EventListFactory.filter())
async def event_list(call: CallbackQuery, call_data: EventListFactory):
    cur_num = call_data.cur_num
    if call_data.action == "plus":
        cur_num += 10
    if call_data.action == "minus":
        cur_num -= 10
    ev_list = await ev.fetch_all_events()
    length = len(ev_list)
    await call.message.edit_text (
        text=cp.generate_ev_list_msg(ev_list, cur_num, length), 
        reply_markup=ckb.generate_event_list_slider(cur_num, length)
    )
    await call.answer()

Использую вот такой код с фабрикой колбеков aiogram, может я глупый или что, просто везде в документации делается так же, но при этом у меня вылазит такая ошибка TypeError: event_list() missing 1 required positional argument: 'call_data'.
Ниже приведен код это самой фабрики колбеков:
class EventListFactory(CallbackData, prefix="_ev_list"):
    action: str
    cur_num: int
  • Вопрос задан
  • 62 просмотра
Решения вопроса 1
@maximq
QA Engineer
Переименуйте позиционный аргумент в callback_data
Пример из документации:
class Action(str, Enum):
    ban = "ban"
    kick = "kick"
    warn = "warn"

class AdminAction(CallbackData, prefix="adm"):
    action: Action
    chat_id: int
    user_id: int

...
# Inside handler
builder = InlineKeyboardBuilder()
for action in Action:
    builder.button(
        text=action.value.title(),
        callback_data=AdminAction(action=action, chat_id=chat_id, user_id=user_id),
    )
await bot.send_message(
    chat_id=admins_chat,
    text=f"What do you want to do with {html.quote(name)}",
    reply_markup=builder.as_markup(),
)
...

@router.callback_query(AdminAction.filter(F.action == Action.ban))
async def ban_user(query: CallbackQuery, callback_data: AdminAction, bot: Bot):
    await bot.ban_chat_member(
        chat_id=callback_data.chat_id,
        user_id=callback_data.user_id,
        ...
    )
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы