Как сделать одноразовую кнопку в телеграм боте?
Мне нужно чтобы кнопка keyboard была одноразовой и реагировала на повторный запрос текстом по типу.."Попытка исчерпана". Подскажите, как можно это реализовать ? Заранее спасибо за ответ.
Ответы (1 шт):
Автор решения: oleksandrigo
→ Ссылка
Ну если нужна просто одноразовая клавиатура, которая пропадает после нажатия то просто
markup = ReplyKeyboardMarkup(one_time_keyboard = True)
markup.add(...)
Ну а если вы не хотите чтобы она пропадала, то придется слегка помучаться, так как по факту вам нужно где-то хранить факт нажатия на кнопку. Это либо FSM, либо БД, либо ну просто текстовый файлик. Последний вариант для айограма не очень так что покажу на примере FSM.
from aiogram import Bot, Dispatcher, executor, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
from data import config
bot = Bot(token=config.BOT_TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
@dp.message_handler(text="Кнопка 1")
async def button_1(message: types.Message, state: FSMContext):
async with state.proxy() as data:
if data.get("button_1") is True:
await message.answer("Кнопка 1 нажата")
return
# Первое нажатие кнопки
data["button_1"] = True
@dp.message_handler(commands=['start'])
async def send_welcome(message: types.Message):
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
markup.add("Кнопка 1")
await message.answer("Start", reply_markup=markup)
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)