Предполагаю что функцию def register_handlers_common нужно вызвать :)явилось верным.
async def cmd_start(message: types.Message, state=FSMContext):
keyboard = types.ReplyKeyboardMarkup(resize_keyboard = True)
buttons = ["Поехали"]
keyboard.add(*buttons)
await message.answer("")
await message.answer_photo(photo=logo_forsage)
await message.answer(
f"Привет {message.from_user.full_name}! Я чат-бот такси Форсаж." +
" Присоединяйтесь к нашей команде профессиональных водителей для работы в сфере междугородних перевозок.\n" +
" Нажимая на кнопку ниже , Вы даете свое согласие на обработку персональных данных." +
" После заполнения анкеты и одобрения администратора Вам придет ссылка на нашу рабочую группу.", reply_markup=keyboard
)
def register_handlers_common(dp: Dispatcher):
dp.register_message_handler(cmd_start, commands=["start"], state='*')
register_handlers_common(dp)
try:
@dp.message_handler(state=Qnnaire.driveexp)
async def taxi_exp(message: types.Message, state: FSMContext):
try:
if re.match(r"^[0-9]+$", message.text):
try:
async with state.proxy() as data:
data['driveexp'] = message.text
except Exception as e1:
print(e1)
try:
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
except Exception as e2:
print(e2)
try:
buttons = ["Конечно", "Еще нет"]
except Exception as e3:
print(e3)
try:
keyboard.add(*buttons)
except Exception as e4:
print(e4)
try:
await message.answer(" У Вас есть опыт работы в такси?\nДля отмены нажмите (/cancel)", reply_markup=keyboard)
except Exception as e5:
print(e5)
else:
try:
return await message.reply("Сказал же написать цифрами, попробуйте еще раз \nДля отмены нажмите (/cancel)")
except Exception as e6:
print(e6)
except Exception as IF:
print(IF)
except Exception as E:
print(E)
logging.basicConfig(level = logging.INFO)
TOKEN = "мой токен"
bot = Bot(token = TOKEN)
dp = Dispatcher(bot, storage = MemoryStorage())
# Данные, которые нужно запомнить
class Qnnaire(StatesGroup):
citizen = State()
drlicense = State()
driveexp = State()
taxiexp = State()
fio = State()
phone = State()
ctzen = State()
license_tries = 0
# handlers
# Начало
@dp.message_handler(commands='start')
async def cmd_start(message: types.Message):
keyboard = types.ReplyKeyboardMarkup(resize_keyboard = True, row_width = 1)
buttons = ["Поехали"]
keyboard.add(*buttons)
await message.answer("")
await message.answer(f"Привет {message.from_user.full_name}! Я чат-бот такси Форсаж. Присоединяйтесь к нашей команде профессиональных водителей для работы в сфере междугородних перевозок.\n Нажимая на кнопку ПОЕХАЛИ , Вы даете свое согласие на обработку персональных данных. После заполнения анкеты и одобрения администратора Вам придет ссылка на нашу рабочую группу.", reply_markup=keyboard)
# Гражданство
@dp.message_handler(Text(equals=["Поехали", "Начать заново"]))
async def citizen(message: types.Message):
keyboard = types.ReplyKeyboardMarkup(resize_keyboard = True, row_width = 2)
buttons = ["Да", "Нет"]
keyboard.add(*buttons)
await message.answer(" У Вас есть гражданство РФ?", reply_markup=keyboard)
# Лицензия водителя
@dp.message_handler(Text(equals=["Да", "Нет"]))
async def driver_license(message: types.Message, state: FSMContext):
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
buttons = ["Да ✅", "Нет ⛔"]
keyboard.add(*buttons)
async with state.proxy() as data:
data['citizen'] = message.text
await message.answer(" У Вас есть водительские права (удостоверение) РФ?\nДля отмены нажмите (/cancel)", reply_markup=keyboard)
# Если нет Лицензии
@dp.message_handler(Text(equals=["Нет ⛔"]))
async def cancel_handler(message: types.Message):
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=1)
buttons = ["Начать заново"]
keyboard.add(*buttons)
await message.answer("", reply_markup=keyboard)
await message.answer("К сожалению мы не сможем с Вами сотрудничать, т.к. у Вас нет водительских прав российского образца.")
await message.answer("Либо если Вы случайно промахнулись - просто нажмите на кнопку снизу, чтобы заново приступить к заполнению анкеты ")
# Стаж вождения
@dp.message_handler(Text(equals=["Да ✅"]))
async def drive_exp(message: types.Message, state: FSMContext):
async with state.proxy() as data:
data['drlicense'] = message.text
await message.answer("Сколько лет стажа Вашего вождения? Укажите цифрами...\nДля отмены нажмите (/cancel)", reply_markup=types.ReplyKeyboardRemove())
# Проверка стажа и вывод опыт в такси
@dp.message_handler(state = Qnnaire.driveexp)
async def taxi_exp(message: types.Message, state: FSMContext):
if re.match(r"^[0-9]+$", message.text):
async with state.proxy() as data:
data['driveexp'] = message.text
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
buttons = ["Конечно", "Еще нет"]
keyboard.add(*buttons)
await message.answer(" У Вас есть опыт работы в такси?\nДля отмены нажмите (/cancel)", reply_markup=keyboard)
else:
return await message.reply("Сказал же написать цифрами, попробуйте еще раз \nДля отмены нажмите (/cancel)")
# log
logging.basicConfig(level = logging.INFO)
TOKEN = "bot_token"
bot = Bot(token = TOKEN)
dp = Dispatcher(bot, storage = MemoryStorage())
# Данные, которые нужно запомнить
class Qnnaire(StatesGroup):
citizen = State()
drlicense = State()
driveexp = State()
taxiexp = State()
fio = State()
phone = State()
ctzen = State()
# handlers
# Начало
@dp.message_handler(Text(equals = ["/start"]))
async def cmd_start(message: types.Message):
keyboard = types.ReplyKeyboardMarkup(resize_keyboard = True, row_width = 1)
buttons = ["Поехали"]
keyboard.add(*buttons)
await message.answer("")
await message.answer(f"Привет {message.from_user.full_name}! Я чат-бот такси Форсаж. Присоединяйтесь к нашей команде профессиональных водителей для работы в сфере междугородних перевозок.\n Нажимая на кнопку ПОЕХАЛИ , Вы даете свое согласие на обработку персональных данных. После заполнения анкеты и одобрения администратора Вам придет ссылка на нашу рабочую группу.", reply_markup=keyboard)
# Гражданство
@dp.message_handler(Text(equals=["Поехали", "Начать заново"]))
async def citizen(message: types.Message):
keyboard = types.ReplyKeyboardMarkup(resize_keyboard = True, row_width = 2)
buttons = ["Да", "Нет"]
keyboard.add(*buttons)
await message.answer(" У Вас есть гражданство РФ?", reply_markup=keyboard)
# Лицензия водителя
@dp.message_handler(Text(equals=["Да", "Нет"]))
async def driver_license(message: types.Message, state: FSMContext):
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
buttons = ["Да ✅", "Нет ⛔"]
keyboard.add(*buttons)
async with state.proxy() as data:
data['citizen'] = message.text
await message.answer(" У Вас есть водительские права (удостоверение) РФ?", reply_markup=keyboard)
# Если нет Лицензии
@dp.message_handler(Text(equals=["Нет ⛔"]))
async def no_drive_license(message: types.Message):
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=1)
buttons = ["Начать заново"]
keyboard.add(*buttons)
await message.answer("", reply_markup=keyboard)
await message.answer("К сожалению мы не сможем с Вами сотрудничать, т.к. у Вас нет водительских прав российского образца.")
await message.answer("Либо если Вы случайно промахнулись - просто нажмите на кнопку снизу, чтобы заново приступить к заполнению анкеты ")
# Стаж вождения
@dp.message_handler(Text(equals=["Да ✅"]))
async def drive_exp(message: types.Message, state: FSMContext):
async with state.proxy() as data:
data['drlicense'] = message.text
await message.answer("Сколько лет стажа Вашего вождения? Укажите цифрами...", reply_markup=types.ReplyKeyboardRemove())
# Проверка на правильность написания стажа
@dp.message_handler(lambda message: not message.text.isdigit(), state = Qnnaire.driveexp)
async def drive_exp_invalid(message: types.Message):
return await message.reply("Сказал же написать цифрами, попробуйте еще раз ")
# Стаж написан правильно
# Опыт в такси
@dp.message_handler(lambda message: message.text.isdigit(), state = Qnnaire.driveexp)
async def taxi_exp(message: types.Message, state: FSMContext):
async with state.proxy() as data:
data['driveexp'] = message.text
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
buttons = ["Конечно", "Еще нет"]
keyboard.add(*buttons)
await message.answer(" У Вас есть опыт работы в такси?", reply_markup=keyboard)
if __name__ == "__main__":
executor.start_polling(dp, skip_updates=True)