Задать вопрос
@Br12

Как сделать, чтобы telegram бот принимал текст юзера только 1 раз?

@dp.callback_query_handler(text_contains='action_1')
async def process_callback_button(call):
    await bot.send_message(call.message.chat.id, 'Напишите подробно о вашей вакансии. Можно с изображениями.')
    @dp.message_handler(content_types=['text'])
    async def start_command(message: types.Message):       
        text = message.chat.id
        await message.answer(
        'Вы точно хотите отправить сообщение?',
        reply_markup=InlineKeyboardMarkup().add(
            InlineKeyboardButton('Назад', callback_data='back'),
            InlineKeyboardButton('Отправить', callback_data='forward'),one_time_keyboard=True
            )
        )

Написал код для бота так, чтобы бот принимал текст юзера и после него появлялись две кнопки с выбором. Проблема в том, что даже после их появления, юзер ещё может писать текст и две кнопки имеют свойство появляться. А нужно, чтобы только 1 раз принимался текст и появлялись кнопки.
  • Вопрос задан
  • 98 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
jabir_sabitov
@jabir_sabitov
Для таких задач лучше использовать базу данных, в которой будет хранится информация о том, что сообщение было отправлено.

@dp.callback_query_handler(text_contains='action_1')
async def process_callback_button(call):
    await bot.send_message(call.message.chat.id, 'Напишите подробно о вашей вакансии. Можно с изображениями.')


    @dp.message_handler(content_types=['text'])
    async def start_command(message: types.Message, message_has_been_sent: list = []):

     if not message_has_been_sent:
        text = message.chat.id
        await message.answer(
        'Вы точно хотите отправить сообщение?',
        reply_markup=InlineKeyboardMarkup().add(
            InlineKeyboardButton('Назад', callback_data='back'),
            InlineKeyboardButton('Отправить', callback_data='forward'),one_time_keyboard=True
            )
        )
        message_has_been_sent.append(1)


Данный пример, грубо говоря, для «поиграться». Когда вы перезапустите код – потеряется информация о том, что сообщение уже было отправлено. Также, переменная со списком не очищается и висит в памяти, что может привести к полному исчерпанию памяти с течением времени.

Изучите работу с asyncpg и будет вам счастье.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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