Platitude

Untitled

May 5th, 2020
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.54 KB | None | 0 0
  1. import logging, configuration
  2. from configuration import *
  3. from aiogram.dispatcher import FSMContext
  4. from aiogram.dispatcher.filters import Text
  5. from aiogram.dispatcher.filters.state import State, StatesGroup
  6. from aiogram.types import ReplyKeyboardRemove, \
  7.     ReplyKeyboardMarkup, KeyboardButton, \
  8.     InlineKeyboardMarkup, InlineKeyboardButton
  9. from aiogram import Bot, Dispatcher, executor, md, types
  10. from aiogram.contrib.fsm_storage.memory import MemoryStorage
  11.  
  12. logging.basicConfig(level=logging.INFO)
  13.  
  14. API_TOKEN = configuration.API_TOKEN
  15.  
  16. bot = Bot(token=API_TOKEN)
  17.  
  18. storage = MemoryStorage()
  19. dp = Dispatcher(bot, storage=storage)
  20.  
  21. def main_menu(message):
  22.     keyboard = types.InlineKeyboardMarkup(True)
  23.     row = [types.InlineKeyboardButton(text="Регистрация", callback_data="registration")]
  24.     keyboard.row(*row)
  25.     row = [types.InlineKeyboardButton(text="Авторизация", callback_data="auth")]
  26.     keyboard.row(*row)
  27.     row = [types.InlineKeyboardButton(text="Перейти на сайт", callback_data=" ", url=" ")]
  28.     keyboard.row(*row)
  29.     return keyboard
  30.  
  31. inline_btn_1 = InlineKeyboardButton('Первая кнопка!', callback_data='button1')
  32. inline_kb1 = InlineKeyboardMarkup().add(inline_btn_1)
  33.  
  34.  
  35. @dp.message_handler(state='*', commands=["start"])
  36. @dp.message_handler(Text(equals=['начать'], ignore_case=True), state='*')
  37. async def send_welcome(message):
  38.         await message.answer("МЕНЮ", reply_markup=main_menu)
  39.  
  40. @dp.message_handler(state='*', commands='cancel')
  41. @dp.message_handler(Text(equals='отмена', ignore_case=True), state='*')
  42. async def cancel_handler(message: types.Message, state: FSMContext):
  43.     current_state = await state.get_state()  # получаем состояние на котором находимся
  44.     if current_state is None:
  45.         return
  46.     await state.finish()
  47.     await bot.send_message(message.chat.id, 'Отмена регистрации.')
  48.  
  49.  
  50. ###################################### регистрация #####################################################
  51. class Form_registration(StatesGroup):
  52.     name = State()
  53.     password = State()
  54.     email = State()
  55.     category = State()
  56.  
  57.  
  58. @dp.callback_query_handler(lambda c: c.data == 'registration')
  59. async def send_name(callback_query, message):
  60.     await Form_registration.name.set()
  61.     await message.answer("Укажите логин: ", reply_markup=types.ReplyKeyboardRemove())
  62.  
  63.  
  64. @dp.message_handler(state=Form_registration.name)
  65. async def send_password(message: types.Message, state: FSMContext):
  66.     async with state.proxy() as data:
  67.         data['name'] = message.text
  68.     await Form_registration.next()
  69.     await message.answer("Укажите пароль: ")
  70.  
  71.  
  72. @dp.message_handler(lambda message: message.text, state=Form_registration.password)
  73. async def send_emai(message: types.Message, state: FSMContext):
  74.     await Form_registration.next()
  75.     await state.update_data(password=message.text)
  76.     await message.answer("Укажите email: ")
  77.  
  78.  
  79. @dp.message_handler(
  80.     lambda message: ('@' not in message.text) or (('.com' not in message.text) and ('.ru' not in message.text)),
  81.     state=Form_registration.email)
  82. async def check_email(message: types.Message):
  83.     return await message.reply("Некорректно введен email.\nУкажите email: ")
  84.  
  85.  
  86. @dp.message_handler(lambda message: message.text, state=Form_registration.email)
  87. async def send_group(message: types.Message, state: FSMContext):
  88.     await Form_registration.next()
  89.     await state.update_data(email=message.text)
  90.  
  91.     markup = types.ReplyKeyboardMarkup(resize_keyboard=True, selective=True)
  92.     markup.add("ИС-16", "ИС-17", "ИС-18")
  93.     markup.add("ИС-19", "ИЭ-17", "ИЭ-17")
  94.     await message.answer("Укажите вашу группу: ", reply_markup=markup)
  95.  
  96.  
  97. @dp.message_handler(lambda message: message.text not in ["ИС-16", "ИС-17", "ИС-18", "ИС-19", "ИЭ-17", "ИЭ-17"],
  98.                     state=Form_registration.category)
  99. async def process_gender_invalid(message: types.Message):
  100.     return await message.reply("Неверно указана группа, пожалуйства выберите группу")
  101.  
  102.  
  103. @dp.message_handler(state=Form_registration.category)
  104. async def process_gender(message: types.Message, state: FSMContext):
  105.     async with state.proxy() as data:
  106.         data['category'] = message.text
  107.         print(data['name'], data['email'])
  108.     await state.finish()
  109.  
  110.  
  111. if __name__ == '__main__':
  112.     executor.start_polling(dp, skip_updates=True)
Add Comment
Please, Sign In to add comment