Esempio n. 1
0
async def cancel_handler(message: types.Message, state: FSMContext):
    current_state = await state.get_state()
    if current_state is None:
        return

    logging.info('Cancelling state %r', current_state)
    await state.finish()
    greet_kb = ReplyKeyboardMarkup(resize_keyboard=True,
                                   one_time_keyboard=True)
    button_menu = KeyboardButton('🌐Главное меню🌐')
    greet_kb.add(button_menu)
    await bot.send_message(message.chat.id,
                           text="Ваш заказ отменен, вернитесь в главное меню",
                           reply_markup=greet_kb)
    def middle_africa():
        keyboard = ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
        cg_button = KeyboardButton(text='Конго🇨🇬')
        ao_button = KeyboardButton(text='Ангола🇦🇴')
        gq_button = KeyboardButton(text='Гвинея🇬🇶')
        st_button = KeyboardButton(text='Сан-Томе и Принсипи🇸🇹')
        td_button = KeyboardButton(text='Чад🇹🇩')
        ga_button = KeyboardButton(text='Габон🇬🇦')
        cf_button = KeyboardButton(text='ЦАР🇨🇫')

        back_africa_button = KeyboardButton(text='🔙Регионы Африки')
        keyboard.add(cg_button, ao_button, gq_button, st_button, td_button,
                     ga_button, cf_button, back_africa_button)
        return keyboard
    def north_africa():
        keyboard = ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
        eg_button = KeyboardButton(text='Египет🇪🇬')
        tn_button = KeyboardButton(text='Тунис🇹🇳')
        dz_button = KeyboardButton(text='Алжир🇩🇿')
        ly_button = KeyboardButton(text='Ливия🇱🇾')
        eh_button = KeyboardButton(text='Западная Сахара🇪🇭')
        ma_button = KeyboardButton(text='Марокко🇲🇦')
        mr_button = KeyboardButton(text='Мавритания🇲🇷')

        back_africa_button = KeyboardButton(text='🔙Регионы Африки')
        keyboard.add(eg_button, tn_button, dz_button, ly_button, eh_button,
                     ma_button, mr_button, back_africa_button)
        return keyboard
Esempio n. 4
0
async def process_tel_number(message: types.Message, state: FSMContext):
    """
    Process tel_number
    """
    async with state.proxy() as data:
        data['tel_number'] = message.text

    db.add_tel_number(message.from_user.id, message.text)
    markup = ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
    for institut in institutes.keys():
        institut_btn = KeyboardButton(institut)
        markup.add(institut_btn)
    await Registration.next()
    await message.reply(MESSAGES['institute'], reply_markup=markup, reply=False)
Esempio n. 5
0
async def start_menu_keyboard():
    markup = ReplyKeyboardMarkup(row_width=2,
                                 resize_keyboard=True,
                                 one_time_keyboard=True)
    menu_button = types.KeyboardButton(
        emoji.emojize(':man_cook:') + ' Рестораны')
    cart_button = types.KeyboardButton(' Корзина')
    orders_button = types.KeyboardButton(' Заказы')
    promos_button = types.KeyboardButton(' Новости')
    settings_button = types.KeyboardButton(' Настройки')
    help_button = types.KeyboardButton(' Помощь')
    markup.add(menu_button, cart_button, orders_button, promos_button,
               settings_button, help_button)
    return markup
Esempio n. 6
0
def back_1():
	n = 0
	markup = ReplyKeyboardMarkup(resize_keyboard=True,row_width=2)
	cotegory = db.get_cotegory()
	if len(cotegory)%2 == 0:
		for i in cotegory:
			item1 = KeyboardButton(str(cotegory[n]))
			n+=1
			if n == len(cotegory):
				break
			item2 = KeyboardButton(str(cotegory[n]))
			if n%2 == 1:
				markup.add(item1, item2)
	else:
		item3 = KeyboardButton(str(cotegory[-1]))
		cotegory.pop(-1)
		for i in cotegory:
			item1 = KeyboardButton(str(cotegory[n]))
			n+=1
			if n == len(cotegory):
				break
			item2 = KeyboardButton(str(cotegory[n]))
			if n%2 == 1:
				markup.add(item1, item2)
		markup.add(item3)
	item3 = KeyboardButton("Назад")
	markup.add(item3)


	return markup
Esempio n. 7
0
async def process_name(message: types.Message, state: FSMContext):
    async with state.proxy() as data:
        data['name'] = message.text

    await Form.next()
    greet_kb = ReplyKeyboardMarkup(resize_keyboard=True,
                                   one_time_keyboard=True)
    button_cancel = ('/Отменить❌')
    greet_kb.add(button_cancel)
    await bot.send_message(message.chat.id,
                           md.italic(
                               f"2⃣Отлично, {message.from_user.first_name}\n"
                               "Сколько тебе лет?🔞"),
                           reply_markup=greet_kb,
                           parse_mode=ParseMode.MARKDOWN)
Esempio n. 8
0
def generate_reply_keyboard(args: ListOfButtons) -> ReplyKeyboardMarkup:
    keyboard = ReplyKeyboardMarkup(resize_keyboard=True)

    if not args.align:
        for num, button in enumerate(args.text):
            keyboard.add(KeyboardButton(text=str(button)))
    else:
        count = 0
        for row_size in args.align:
            keyboard.row(*[
                KeyboardButton(text=str(text))
                for text in args.text[count:count + row_size]
            ])
            count += row_size
    return keyboard
Esempio n. 9
0
async def cmd_start(message: types.Message):
    await Form.name.set()
    greet_kb = ReplyKeyboardMarkup(resize_keyboard=True,
                                   one_time_keyboard=True)
    button_cancel = ('/Отменить❌')
    greet_kb.add(button_cancel)
    await bot.send_message(
        message.chat.id,
        md.italic(
            "Если вы ознакомились с нашим меню, то для заполнения заявки нужно указать свои данные📝\n"
            "Чтобы мы могли с вами связаться, вводите пожалуйста точную информаци, спасибо😊\n"
            "Если вы ввели не те данные, нажмите Отменить❌\n"
            "1⃣Введите свои инициалы(ФИО)"),
        reply_markup=greet_kb,
        parse_mode=ParseMode.MARKDOWN)
Esempio n. 10
0
async def start_command(message: types.Message):
    mes = message.text.split()
    #mes = message.text
    print(mes)
    if len(mes) == 1:
        button_get_geo = KeyboardButton('Отправить свою локацию 🗺️',
                                        request_location=True)
        greet_geo = ReplyKeyboardMarkup(resize_keyboard=True,
                                        one_time_keyboard=True)
        greet_geo.add(button_get_geo)
        await message.reply("введите город в формате /p город",
                            reply_markup=greet_geo)
    else:
        r = get_weather(mes[1], WEA_KEY)
        await message.reply(r, parse_mode=types.ParseMode.HTML)
Esempio n. 11
0
def currency_keyboard(currency_type: str) -> ReplyKeyboardMarkup:
    """Get keyboard with currencies from whitelists."""
    keyboard = ReplyKeyboardMarkup(row_width=5,
                                   one_time_keyboard=currency_type == "sell")
    keyboard.row(*[KeyboardButton(c) for c in FIAT])
    keyboard.add(*[KeyboardButton(c) for c in CRYPTOCURRENCY])
    cancel_button = KeyboardButton(emojize(":x: ") + i18n("cancel"))
    if currency_type == "sell":
        keyboard.row(
            KeyboardButton(emojize(":fast_reverse_button: ") + i18n("back")),
            cancel_button,
        )
    else:
        keyboard.row(cancel_button)
    return keyboard
    def north_europe():
        keyboard = ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
        dk_button = KeyboardButton(text='Дания🇩🇰')
        is_button = KeyboardButton(text='Исландия🇮🇸')
        lv_button = KeyboardButton(text='Латвия🇱🇻')
        lt_button = KeyboardButton(text='Литва🇱🇹')
        no_button = KeyboardButton(text='Норвегия🇳🇴')
        fi_button = KeyboardButton(text='Финляндия🇫🇮')
        se_button = KeyboardButton(text='Швеция🇸🇪')
        ee_button = KeyboardButton(text='Эстония🇪🇪')

        back_eus_button = KeyboardButton(text='🔙Регионы Европы')
        keyboard.add(dk_button, is_button, lv_button, lt_button, no_button,
                     fi_button, se_button, ee_button, back_eus_button)
        return keyboard
Esempio n. 13
0
async def process_gender(message: types.Message, state: FSMContext):
    async with state.proxy() as data:
        data['where_to'] = message.text
        markup = ReplyKeyboardMarkup()
        markup.add(KeyboardButton('Верно'))
        markup.add(KeyboardButton('Не верно'))
        # And send message
        await bot.send_message(message.chat.id, md.text(
            md.text('Вы хотите добраться из: \n', md.bold(data['where_from'])),
            md.text('в:\n', md.bold(data['where_to'])),
            md.text('Верно?'),
            sep='\n'), parse_mode=ParseMode.MARKDOWN, reply_markup=markup)

        # Finish conversation
        data.state = None
Esempio n. 14
0
async def process_begin_command(message: types.Message):
    button_model_1 = InlineKeyboardButton('Classic', callback_data='a')
    button_model_2 = InlineKeyboardButton('Classic B', callback_data='b')
    button_model_3 = InlineKeyboardButton('Deep dark fantasies',
                                          callback_data='c')
    modeling_kb = InlineKeyboardMarkup(resize_keyboard=True).add(
        button_model_1).add(button_model_2).add(button_model_3)
    await message.reply(
        "Итак, пожалуйста выберите модель, с которой будем работать",
        reply_markup=modeling_kb)
    button_start = KeyboardButton('Начать')
    button_cancel = KeyboardButton('Отменить')
    greet_kb = ReplyKeyboardMarkup(resize_keyboard=True,
                                   one_time_keyboard=True)
    greet_kb.add(button_start).add(button_cancel)
async def other(message: types.Message):
    '''Функция срабатывает при нажатии на кнопку всячина'''
    await send_log(message)
    #кнопки для всякой всячины

    button_backup = KeyboardButton('Откат действий◀️')

    button_exit = KeyboardButton('Выйти❌')

    menu_other = ReplyKeyboardMarkup()

    menu_other.add(button_exit, button_backup)
    await message.answer(
        'Тут так же можно выполнить много хитрых и не очень махинаций',
        reply_markup=menu_other)
Esempio n. 16
0
async def enter_sum(message: Message, state: FSMContext):
    try:
        spl = message.text.split(' ')
        sum_value = round(float(spl[0]), 2)
        if sum_value % 1 == 0:
            sum_value = int(sum_value)
        if sum_value > 10**15:
            await message.answer(
                'What kind of inflation is it?\nHope you enter wrong value')
            return None
        comment = ' '.join(spl[1:])
        await state.update_data(com=comment)  # Saving comment
        db_connect()
        choose_cat_kb = ReplyKeyboardMarkup(resize_keyboard=True).add(
            back_to_menu)  # Create keyboard for categories
        data = await state.get_data(
        )  # Get data about which choosen income or expencese
        expence_par = data.get('exin')
        query_get_user_categories = """SELECT category FROM CATEGORIES WHERE ID = (%s) and IN_EX = (%s);"""
        param = [message.from_user.id, expence_par]
        cur.execute(query_get_user_categories, param)
        categories_list = []
        rows = list(cur)
        for category in rows:  # Generating user categories
            categories_list.append(
                category[0]
            )  # Saving categories to filter message when one is choosen
        pairs = len(categories_list) // 2
        ostatok = len(categories_list) % 2
        for i in range(pairs):
            i = (i + 1) * 2
            choose_cat_kb = choose_cat_kb.row(
                KeyboardButton(f'{categories_list[i - 2]}'),
                KeyboardButton(f'{categories_list[i - 1]}'))
        if ostatok == 1:
            choose_cat_kb.add(KeyboardButton(f'{categories_list[-1]}'))
        choose_cat_kb = choose_cat_kb.add(
            KeyboardButton('➕Add category'))  # Add '+add category' button
        await message.answer('Choose category', reply_markup=choose_cat_kb)
        await state.update_data(categories=categories_list
                                )  # Save user categories
        await state.update_data(sum=sum_value)  # Save sum
        await state.update_data(show_sum=sum_value)
        await Inc_exp.next()
        conn.close()
    except ValueError:
        await message.answer('Incorrect value. Try again',
                             reply_markup=back_to_menu_keyboard)
async def class_information(msg, school_id, class_name):
    bos = cur.execute('''SELECT u.name
                    FROM classes c
                    LEFT JOIN users u ON c.bos = u.user_id WHERE c.school = ? and c.name = ?''',
                      [school_id, class_name]).fetchone()[0]
    bos = 'Нету' if bos is None else bos
    panel = ReplyKeyboardMarkup(resize_keyboard=True)
    button = KeyboardButton(text='Добавить кл. рук.')
    if bos != 'Нету':
        button = KeyboardButton(text='Убрать кл. рук.')
    panel.add(button,
              KeyboardButton(text='Удалить класс'))
    panel.add(KeyboardButton(text='Выйти'), KeyboardButton(text='Переименовать'))
    await msg.answer(text='Классный руководитль: '
                          f'\n{bos}',
                     reply_markup=panel)
Esempio n. 18
0
async def process_name(message: types.Message, state: FSMContext):
    """
    Process user name
    """
    async with state.proxy() as data:
        data['name'] = message.text

    db.create_user(message.from_user.id, message.text)
    markup = ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
    for institut in institutes.keys():
        institut_btn = KeyboardButton(institut)
        markup.add(institut_btn)
    await Welcome.next()
    await message.reply(MESSAGES['institute'],
                        reply_markup=markup,
                        reply=False)
Esempio n. 19
0
async def process_sail_model(message: Message, state: FSMContext):

    async with state.proxy() as data:
        data['sail'] = message.text

    await Tuning.next()
    ReplyKeyboardRemove()
    if message.text == 'Zaoli':
        markup = ReplyKeyboardMarkup(resize_keyboard=True, selective=True)
        markup.add("R12", "R14", "R15", "R16")
    else:
        markup = ReplyKeyboardMarkup(resize_keyboard=True, selective=True)
        markup.add("N9-L5", "N9-L5(H)", "N10-L5(H)", "N10-L5", "N12-L9(B)",
                   "N13-L16", "N13-L12", "N14-L18")

    await message.reply("Какая у вас модель паруса?", reply_markup=markup)
Esempio n. 20
0
def get_main_menu() -> ReplyKeyboardMarkup:
    kb = ReplyKeyboardMarkup(resize_keyboard=True)
    kb.add(buttons.mm_zmanim.value, buttons.mm_shabbat.value,
           buttons.mm_holidays.value)
    kb.add(buttons.mm_rh.value, buttons.mm_daf_yomi.value,
           buttons.mm_fasts.value)
    kb.add(buttons.mm_zmanim_by_date.value, buttons.mm_converter.value)
    kb.add(buttons.hm_report.value, buttons.mm_settings.value)
    return kb
Esempio n. 21
0
async def process_gender(message: types.Message, state: FSMContext):
    async with state.proxy() as data:
        chat_id = message.chat.id
        data['date'] = message.text
        markup = ReplyKeyboardRemove()
    await bot.send_message(
        chat_id,
        md.text(
            md.text('Ваша заявка:', md.bold(message.from_user.first_name)),
            md.text('Ваши инициалы:', md.bold(data['name'])),
            md.text('Возраст:', md.bold(data['age'])),
            md.text('Город:', md.bold(data['city'])),
            md.text('Ваш телефон', md.bold(data['phone'])),
            md.text('Ваш заказ:', md.bold(data['service'])),
            md.text('Крепость кальяна:', md.bold(data['strength'])),
            md.text('Дата:', md.bold(data['date'])),
            sep='\n',
        ),
        reply_markup=markup,
        parse_mode=ParseMode.MARKDOWN,
    )
    await bot.send_message(
        config.chat_id,
        md.text(
            md.text('Заявка от:', md.bold(message.from_user.first_name)),
            md.text('Инициалы:', md.bold(data['name'])),
            md.text('Возраст:', md.bold(data['age'])),
            md.text('Город:', md.bold(data['city'])),
            md.text('Телефон:', md.bold(data['phone'])),
            md.text('Заказ клиента:', md.bold(data['service'])),
            md.text('Крепость кальяна:', md.bold(data['strength'])),
            md.text('Дата:', md.bold(data['date'])),
            sep='\n',
        ),
        reply_markup=markup,
        parse_mode=ParseMode.MARKDOWN,
    )
    greet_kb = ReplyKeyboardMarkup(resize_keyboard=True,
                                   one_time_keyboard=True)
    button_menu = KeyboardButton('🌐Главное меню🌐')
    greet_kb.add(button_menu)
    await bot.send_message(
        message.chat.id,
        text=
        "Ваша заявка📝 уже пришла к нам, в ближайшее время мы с вами свяжемся😊",
        reply_markup=greet_kb)
    await state.finish()
Esempio n. 22
0
async def process_strength(message: types.Message, state: FSMContext):
    async with state.proxy() as data:
        data['strength'] = message.text

    await Form.next()
    greet_kb = ReplyKeyboardMarkup(resize_keyboard=True,
                                   row_width=1,
                                   one_time_keyboard=True)
    button_cancel = ('/Отменить❌')
    button_not = ('Нет')
    greet_kb.add(button_cancel, button_not)
    await bot.send_message(
        message.chat.id,
        md.text(md.italic("7⃣Вы хотели бы забронировать стол?⌚\n"),
                "Если да то напишите дату, например 14.06.20 в 14:00"),
        reply_markup=greet_kb,
        parse_mode=ParseMode.MARKDOWN)
Esempio n. 23
0
async def semsum(message: Message, state: FSMContext):
    try:
        spl = message.text.split(' ')
        number = round(float(spl[0]), 2)
        if number > 10**15:
            await message.answer(
                'What kind of inflation is it? \nHope you enter wrong value')
            return None
        comment = ' '.join(spl[1:])
        await state.update_data(com=comment)  # Saving comment
        await Semsum.Kateg1.set()  # Set fsm into first state
        await state.update_data(
            sum=number
        )  # Saving expencese as parameter to filter categories by it
        choose_cat_kb = ReplyKeyboardMarkup(resize_keyboard=True).add(
            back_to_menu)  # Create keyboard for categories
        query_get_user_categories = """SELECT category FROM CATEGORIES WHERE ID = (%s) and IN_EX = (%s);"""
        expence_par = 'expencese'
        param = [message.from_user.id, expence_par]
        db_connect()
        cur.execute(query_get_user_categories, param)
        categories_list = []
        rows = list(cur)
        conn.close()
        for category in rows:  # Generating user categories
            choose_cat_kb = choose_cat_kb.add(KeyboardButton(
                f'{category[0]}'))  # Add buttons to ReplyKeyboardMarkup
            categories_list.append(
                category[0]
            )  # Saving categories to filter message when one is choosen
        pairs = len(categories_list) // 2
        ostatok = len(categories_list) % 2
        for i in range(pairs):
            i = (i + 1) * 2
            choose_cat_kb = choose_cat_kb.row(
                KeyboardButton(f'{categories_list[i - 2]}'),
                KeyboardButton(f'{categories_list[i - 1]}'))
        if ostatok == 1:
            choose_cat_kb.add(KeyboardButton(f'{categories_list[-1]}'))
        choose_cat_kb = choose_cat_kb.add(
            KeyboardButton('➕Add category'))  # Add 'add category' button
        await state.update_data(categories=categories_list
                                )  # Save user categories
        await message.answer('Choose category', reply_markup=choose_cat_kb)
    except ValueError:
        await message.answer('Invalid sum value')
Esempio n. 24
0
async def cancel_handler(message: types.Message, state: FSMContext):
    """
    Allow user to cancel any action
    """
    current_state = await state.get_state()
    if current_state is None:
        return

    logging.info('Cancelling state %r', current_state)
    # Cancel state and inform user about it
    await state.finish()
    # And remove keyboard (just in case)
    button_start = KeyboardButton('Начать')
    button_cancel = KeyboardButton('Отменить')
    greet_kb = ReplyKeyboardMarkup(resize_keyboard=True)
    greet_kb.add(button_start).add(button_cancel)
    await message.reply('Отменено', reply_markup=greet_kb)
Esempio n. 25
0
async def process_service(message: types.Message, state: FSMContext):
    async with state.proxy() as data:
        data['service'] = message.text

    await Form.next()
    greet_kb = ReplyKeyboardMarkup(resize_keyboard=True,
                                   row_width=3,
                                   one_time_keyboard=True)
    button_soft = KeyboardButton('Мягкий')
    button_medium = KeyboardButton('Средний')
    button_hard = KeyboardButton('Жеский')
    button_cancel = KeyboardButton('/Отменить❌')
    greet_kb.add(button_soft, button_medium, button_hard, button_cancel)
    await bot.send_message(message.chat.id,
                           text="6⃣Какой крепости кальян вы бы хотели?💨",
                           reply_markup=greet_kb,
                           parse_mode=ParseMode.MARKDOWN)
Esempio n. 26
0
async def start(message: types.Message):
    #кнопки для волшебного входа
    button_start = KeyboardButton(
        'Здравствуйте, это чат-бот, который связывает людей, которым нужна помощь и людей, которые могут попомь!'
    )

    magic_start = ReplyKeyboardMarkup(one_time_keyboard=True)

    magic_start.add(button_start)
    await message.answer(
        'Привет👋\n\nЭто Your Bunny Wrote бот и я советую перечитать названия🤠\nА ещё я советую задержаться у нас подольше, у нас тут много интересного\n\nYour Bunny Wrote - место для знакомств : \n - скейтеров🛹\n - хипстеров🦹‍♀️ \n и инопланетян👽',
        reply_markup=magic_start)
    await message.answer_sticker('CAADAgADZgkAAnlc4gmfCor5YbYYRAI')
    if (not db.user_exists(message.from_user.id)):
        #если юзера нет в базе добавляем его
        db.add_user(message.from_user.username, message.from_user.id,
                    message.from_user.full_name)
Esempio n. 27
0
def get_revising_kb_2(all_words, correct_word):  #for 2/4 revizing quiz
    words = all_words.copy()

    kb_options = [correct_word]
    words.remove(correct_word)

    random.shuffle(words)

    kb_options.append(words[0])
    kb_options.append(words[1])

    random.shuffle(kb_options)

    revising_kb = ReplyKeyboardMarkup(resize_keyboard=True)
    for word in kb_options:
        revising_kb.add(KeyboardButton(word.eng_word))
    return revising_kb
Esempio n. 28
0
async def set_name_for_round(message: Message):
    """
    Ставит название раунда и предлагает выбрать время между вопросами

    Parameters
    ----------
    message : types.Message
        Текст сообщения
    """
    set_current_round(message.text)
    quiz = get_quiz()
    quiz.add_round(message.text)
    set_quiz(quiz)
    keyboard = ReplyKeyboardMarkup(resize_keyboard=True)
    keyboard.add('15 сек.', '30 сек.', '1 мин.', '5 мин.', '10 мин.', 'Отмена')
    await CreateQuiz.waiting_for_time_between_questions.set()
    await message.reply('Какой промежуток будет между вопросами?', reply_markup=keyboard)
    def south_asia():
        keyboard = ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
        in_button = KeyboardButton(text='Индия🇮🇳')
        pk_button = KeyboardButton(text='Пакистан🇵🇰')
        bd_button = KeyboardButton(text='Бангладеш🇧🇩')
        ir_button = KeyboardButton(text='Иран🇮🇷')
        af_button = KeyboardButton(text='Афганистан🇦🇫')
        mv_button = KeyboardButton(text='Мальдивы🇲🇻')
        bt_button = KeyboardButton(text='Бутан🇧🇹')
        np_button = KeyboardButton(text='Непал🇳🇵')
        lk_button = KeyboardButton(text='Шри-Ланка🇱🇰')

        back_asia_button = KeyboardButton(text='🔙Регионы Азии')
        keyboard.add(in_button, pk_button, bd_button, ir_button, af_button,
                     mv_button, bt_button, np_button, lk_button,
                     back_asia_button)
        return keyboard
Esempio n. 30
0
 async def execute(cls, m: Message, state: FSMContext = None, **kwargs):
     if len(m.text) > 50:
         await m.answer('Имя должно быть меньше пятидесяти символов')
         return
     for entity in m.entities:
         if entity.type in ['mention', 'text_mention']:
             await m.answer('Имя не может содержать теги')
             return
     async with state.proxy() as dt:
         dt['name'] = m.html_text
     kb = ReplyKeyboardMarkup()
     male = KeyboardButton('Мужской')
     female = KeyboardButton('Женский')
     transgender = KeyboardButton('Трансгендер')
     kb.add(male, female, transgender)
     await m.answer('Какого ты пола?', reply_markup=kb)
     await CreatePlayerForm.next()