Как по нажатию inline кнопки получать значение из сообщения?
Вообщем У меня есть кнопка "Ввести токен" После её нажатия юзер должен ввести текст, а я должен этот текст как то получить и присвоить какой нибудь переменной
Вот кодик кнопки
profile_and_instructions=InlineKeyboardMarkup().row(
InlineKeyboardButton(text="Инструкции",callback_data="instru"),#не обращаем внимание
InlineKeyboardButton(text="Мой профиль",callback_data="profile"),# не обращаем внимание
InlineKeyboardButton(text="Ввести токен",callback_data="token")#обращаем!!!!
@dp.callback_query_handler(lambda c: c.data == 'token')
async def instru(callback_query: types.CallbackQuery):
#Хз чё тут писать, можете помочь? :3
Ответы (1 шт):
Создайте группу состояний, чтобы получить текст из сообщения.
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import State, StatesGroup
class FSMToken(StatesGroup):
token = State()
После этого можете обращаться к callback хендлеру, чтобы вызвать это состояние.
@dp.callback_query_handler(text = "Ввести токен", state = FSMToken.token)
async def instru(callback_query: types.CallbackQuery, state:FSMContext):
await callback.message.answer('Введите токен:')
await FSMToken.token.set()
После того как вы вызвали состояние, нужно принять сообщение через message_handler.
@dp.message_handler(state=FSMToken.token)
async def load_token(message: types.Message, state: FSMContext):
data = message.text
После того как вы получили токен можете отправить его куда-то. После этого можете спокойно делать await state.reset_state() или await state.finish(). Только учитывайте, что после них память очистится, так как значение хранится во временной памяти, если его нигде не сохранять.