Ну во первых:
kb = InlineKeyboardMarkup()
kb.add('Маг', 'Воин', 'Вор')
Вы тут создаете инлайн клавиатуру, но пихаете в нее простой текст, хотя для этого у вас есть -
InlineKeyboardButton
, ему вы задаете текст, и callback_data, которую потом с помощью декоратора
@dp.callback_query_handler
обрабатываете Все что вам хочется
Т.е в вашем примере это будет выглядеть как то так:
class States(StatesGroup):
characterAge = State()
characterBranch = State()
#special - работа с бд
@dp.message_handler(state=States.characterAge, content_types=ContentTypes.TEXT)
async def characterAge(message: types.Message, state: FSMContext):
try:
int(message.text)
special.add_new_character_age(message.text, message.from_user.username)
await state.update_data(message=message.text.title())
buttons = [InlineKeyboardButton('Маг', callback_data='branch:mag'),
InlineKeyboardButton('Маг', callback_data='branch:voin'),
InlineKeyboardButton('Маг', callback_data='branch:vor'),]
kb = InlineKeyboardMarkup()
kb.add(buttons)
await message.answer(text='Выберите одну из трех ветвей развития вашего персонажа(Влияет на диалоги)', reply_markup=kb)
await States.characterBranch.set()
except IndentationError:
await message.reply('Существа не могут жить с отрицательным возрастом')
return
except NameError as err:
print(err)
await message.reply('Возраст не может состоять из букв')
return
@dp.callback_query_handler(Text(startswith='branch:'), state=States.characterBranch)
async def characterBranch(callback_query: types.CallbackQuery, state: FSMContext):
branch_dict = {'mag': 'маг',
'voin': 'воин',
'vor': 'вор'}
branch = callback_query.data.removeprefix('branch:')
await state.update_data(characterBranch=branch_dict[branch])
if branch == 'mag':
special.add_new_character_branch('1', callback_query.from_user.username)
elif branch == 'voin':
special.add_new_character_branch('2', callback_query.from_user.username)
elif branch == 'vor':
special.add_new_character_branch('3', callback_query.from_user.username)
await message.answer()
await state.finish()