@Zoomf192

Вызывает ошибку callbackquery has no attribute text.Как быть?

Мне нужно,чтобы при вводе определенной карты человеку говорилось,что его средства поступят в ближайшее время а если ввод карты был не тот то выдавало ошибку

@dp.callback_query_handler(text='un_card')
async def start(message):
    db = await register_method.reg(message)

    await bot.delete_message(chat_id=message.from_user.id, message_id=message.message.message_id)

    db[message.from_user.id]['balance'] = float(db[message.from_user.id]['balance']) - float(db[message.from_user.id]['invest'])

    await codecs_method.write('users.json', db)

    await bot.send_message(chat_id=message.from_user.id,
                           text='Введите платежные данные,чтобы вывести средства!',parse_mode= 'markdown')
    if message.text == '333':
        await bot.send_message(chat_id=message.from_user.id,
                               text='Заявка ',)
    else:
        await bot.send_message(chat_id=message.from_user.id,
                               text='Неправильный ввод карты!'
                                    '\nВывод средств разрешен только на ту карту, с которой баланс был пополнен!')


Ошибка: if message.text == '333':
AttributeError: 'CallbackQuery' object has no attribute 'text'
  • Вопрос задан
  • 261 просмотр
Пригласить эксперта
Ответы на вопрос 2
phaggi
@phaggi
лужу, паяю, ЭВМы починяю
Zoomf192, основная проблема в том, что вы не разобрались, как работают и как и зачем устроены хэндлеры, но пытаетесь их использовать «по аналогии».
Так не работает.

Что именно вам надо писать? За вас никто делать работу тут не должен. С этим - на фриланс.

И вообще, боты штука сложная и с налету их «за 30 минут» не сделать, это вас обманули.
spoiler
Подскажу, что хэндлер принимает в качестве параметра функцию. Например:
@bot.callback_query_handler(func=lambda call: True)
def handle_callback(call):
    bot.answer_callback_query(call.id, text='Callback received')

Параметр func с лямбдой - это и есть пример такой функции, передаваемой как параметр хэндлера, означающий, что функция handle_callback, зарегистрированная при помощи обертки-хэндлера, при любом обратном вызове активируется, так как func просто всегда True
Он может быть не явно True, там можно написать какое-то условие, которое при выполнении вернёт True и тогда хэндлер сработает.
Как именно… посмотрите в самом коде telebot, на GitHub есть его код, там есть примеры, в т.ч. примеры callback.
Ответ написан
Комментировать
@Medovochka
Попробуй этот код:

@dp.callback_query_handler(text='un_card')
async def start(callback_query):
    message = callback_query.message
    db = await register_method.reg(message)

    await bot.delete_message(chat_id=message.chat.id, message_id=message.message_id)

    db[message.from_user.id]['balance'] = float(db[message.from_user.id]['balance']) - float(db[message.from_user.id]['invest'])

    await codecs_method.write('users.json', db)

    await bot.send_message(chat_id=message.from_user.id,
                           text='Введите платежные данные, чтобы вывести средства!', parse_mode='markdown')

    if callback_query.data == '333':
        await bot.send_message(chat_id=message.from_user.id,
                               text='Заявка')
    else:
        await bot.send_message(chat_id=message.from_user.id,
                               text='Неправильный ввод карты!'
                                    '\nВывод средств разрешен только на ту карту, с которой баланс был пополнен!')
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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