Почему date не используется? python
Вот код:
from aiogram import types
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import State, StatesGroup
from misc import dp
from aiogram.contrib.fsm_storage.memory import MemoryStorage
total = 0
date = 0
kb_date_credit = ['3', '14', '30']
class CreditQuestion(StatesGroup):
waiting_user_name = State()
waiting_old_size = State()
waiting_date_size = State()
waiting_total_size = State()
@dp.message_handler(commands=["bank"], state="*")
async def bank_step_1(message: types.Message):
await message.answer('Ты в банке "acyncio", тут можно взять микро кредит под 300% ой, под маленькие проценты')
await message.answer('Как вас зовут?')
await CreditQuestion.waiting_user_name.set()
@dp.message_handler(state=CreditQuestion.waiting_user_name, content_types=types.ContentTypes.TEXT)
async def bank_step_2(message: types.Message, state: FSMContext):
await state.update_data(name=message.text.lower())
await message.answer('Введите ваш возраст:')
await CreditQuestion.waiting_old_size.set()
@dp.message_handler(state=CreditQuestion.waiting_old_size, content_types=types.ContentTypes.TEXT)
async def bank_step_3(message: types.Message, state: FSMContext):
if int(message.text) < 18:
await message.answer('18+! Возвращаем обратно!')
state.finish()
else:
await state.update_data(old=message.text.lower())
await message.answer('Следующий шаг!')
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
for name in kb_date_credit:
keyboard.add(name)
await message.answer('Насколько дней взять кредит?', reply_markup=keyboard)
await CreditQuestion.waiting_date_size.set()
@dp.message_handler(state=CreditQuestion.waiting_date_size, content_types=types.ContentTypes.TEXT)
async def bank_step_4(message: types.Message, state: FSMContext):
if message.text not in kb_date_credit:
await message.answer('Используету клавиатуру!')
else:
if message.text == '3':
date = 3
elif message.text == '14':
date = 14
elif message.text == '30':
date = 3
await message.answer('Следующий шаг', reply_markup=types.ReplyKeyboardRemove())
await message.answer('Введите сумму пополнения, только цифры')
await CreditQuestion.waiting_total_size.set()
@dp.message_handler(state=CreditQuestion.waiting_total_size, content_types=types.ContentTypes.TEXT)
async def bank_step_5(message: types.Message, state: FSMContext):
try:
user_data = await state.get_data()
int(message.text) == total
await message.answer('Все данные сохранены!')
await message.answer(f'Ваше имя: {user_data["name"]}, ваш возвраст: {user_data["old"]}, через {date} дней, вы получите {total * (date * 1.2)}')
except:
await message.answer('Обязательно цифру')
return
Именно здесь ошибка:
@dp.message_handler(state=CreditQuestion.waiting_date_size, content_types=types.ContentTypes.TEXT)
async def bank_step_4(message: types.Message, state: FSMContext):
if message.text not in kb_date_credit:
await message.answer('Используету клавиатуру!')
else:
if message.text == '3':
date = 3
elif message.text == '14':
date = 14
elif message.text == '30':
date = 3
await message.answer('Следующий шаг', reply_markup=types.ReplyKeyboardRemove())
await message.answer('Введите сумму пополнения, только цифры')
await CreditQuestion.waiting_total_size.set()
Почему то date не видит в
await message.answer(f'Ваше имя: {user_data["name"]}, ваш возвраст: {user_data["old"]}, через {date} дней, вы получите {total * (date * 1.2)}')
и выдает: Ваше имя: никита, ваш возвраст: 18, через 0 дней
Ответы (1 шт):
Автор решения: Serg Bocharov
→ Ссылка
Раз вы храните данные в state.data, то и используйте его:
@dp.message_handler(state=CreditQuestion.waiting_date_size, content_types=types.ContentTypes.TEXT)
async def bank_step_4(message: types.Message, state: FSMContext):
if message.text not in kb_date_credit:
await message.answer('Используйте клавиатуру!')
else:
if message.text == '3':
date = 3
elif message.text == '14':
date = 14
elif message.text == '30':
date = 3
# Сохраняем значение
await state.update_data(date=date)
await message.answer('Следующий шаг', reply_markup=types.ReplyKeyboardRemove())
await message.answer('Введите сумму пополнения, только цифры')
await CreditQuestion.waiting_total_size.set()
@dp.message_handler(state=CreditQuestion.waiting_total_size, content_types=types.ContentTypes.TEXT)
async def bank_step_5(message: types.Message, state: FSMContext):
try:
user_data = await state.get_data()
int(message.text) == total
await message.answer('Все данные сохранены!')
# Вставляем правильное значение
await message.answer(f'Ваше имя: {user_data["name"]}, ваш возраст: {user_data["old"]}, через {user_data["date"]} дней, вы получите {total * (user_data["date"] * 1.2)}')
except:
await message.answer('Обязательно цифру')
return