async def enter_phone_number(msg, state, language): if not msg.text.startswith("+") or not msg.text.strip("+").isnumeric(): return await msg.reply(context[language].invalid_input) async with state.proxy() as data: name = data['name'] age = data['age'] phone_number = int(msg.text.strip("+")) await state.finish() user = User() user.id = msg.from_user.id user.name = name user.age = age user.phone_number = phone_number user.username = msg.from_user.username db.session.add(user) try: db.session.commit() return await msg.reply(context[language].user_registered, reply_markup=ReplyKeyboardRemove()) except Exception as err: print(f"Database commit error: {err}") db.session.rollback() db.session.remove() return await msg.reply(context[language].error_occurred, reply_markup=ReplyKeyboardRemove())
async def process_choose_old_deadline(message: Message, state: FSMContext): user_data = await state.get_data() if message.text not in Database.show(subject=user_data['subject'], task=user_data['task']): await message.reply('Выберите дедлайн, используя клавиатуру ниже') return deadline = message.text[-10:] await state.update_data(deadline=deadline) user_data = await state.get_data() query = Query(subject=user_data['subject'], task=user_data['task'], deadline='.'.join(reversed(user_data['deadline'].split('.')))) if user_data['type'] == QueryTypes.DEL: Database.delete(query) await message.answer(f'Дедлайн {user_data["task"]} ' f'по предмету {user_data["subject"]} ' f'от {user_data["deadline"]} был удален', reply_markup=ReplyKeyboardRemove()) await state.finish() else: # QueryTypes.UPD await message.answer('Введите дату дедлайна в формате ДД.ММ.ГГГГ', reply_markup=ReplyKeyboardRemove()) await StateMachine.waiting_for_new_date.set()
async def get_news(message: types.Message): await message.answer("Работаю, подождите...") all_posts = await get_gazzetta_rss_links() user_id = message.from_user.id sent_msgs = db.get_sent_messages(user_id) posts = [ post for post in all_posts if "gazzetta" in post and "video" not in post and post not in sent_msgs ] for post in posts: rawtext, translation = await get_gazzetta_news(post) if translation: await message.answer(post) if len(translation) <= 3500: await message.answer(translation, reply_markup=ReplyKeyboardRemove()) else: fivek = "" for sentence in sent_tokenize(text=translation, language="russian"): if len(fivek + sentence) < 3500: fivek += sentence else: await message.answer(fivek) fivek = sentence await message.answer(fivek, reply_markup=ReplyKeyboardRemove()) if post not in db.gazzetta_posts_links(): db.add_gazzetta_post(post, rawtext, translation) db.add_to_sent_messages(user_id, post) await message.answer("Нет больше постов", reply_markup=ReplyKeyboardRemove())
async def handle_action_choise(message: types.Message, state: FSMContext): logging.info("Handling action choice...") if message.text == "Delete": try: Session = sessionmaker(bind=engine) session = Session() id_ = await state.get_data() id_ = id_["id_"] task_to_delete = session.query(Task).filter(Task.id_ == id_).one() session.delete(task_to_delete) session.commit() if session.query(Task).filter(Task.id_ == id_).count() == 0: await message.answer("Задача успешно удалена!", reply_markup=ReplyKeyboardRemove()) except Exception as e: await message.answer(str(e)) return elif message.text == "Update": keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True) keyboard.row("Date", "Text", "Priority") await message.answer("Выберите, что вы хотите обновить:", reply_markup=keyboard) await ManageTasks.on_update.set() elif message.text == "Cancel": await message.answer("Выхожу из интерфейса.", reply_markup=ReplyKeyboardRemove()) await state.finish() return else: await message.answer("Пожалуйста, выберите действие из списка ниже")
async def partner_choice(m: Message, repo: Repo, state: FSMContext): if m.text == "👌 Все правильно": partner_data = await state.get_data() await repo.add_partner(userid=partner_data['admin_id'], city=partner_data['city'].lower()) await state.finish() try: await m.bot.send_message(chat_id=partner_data['admin_id'], text=f""" Здравствуйте, Вы назначены <b>администратором города {partner_data['city'].title()}!</b> Используйте команду /start для обновления данных.""") await m.answer(text=f"""Вы добавили партнера! Подключенный город - <b>{partner_data['city'].title()}</b>. Администратором назначен ID <b>{partner_data['admin_id']}</b>.""", reply_markup=ReplyKeyboardRemove()) except exceptions.ChatNotFound: text = f"""<b>Вы добавили партнера, но мы не смогли уведомить его об этом!</b>\n Отправьте партнеру <a href="https://t.me/dostavka30rus_bot">ссылку на бота</a> и попросите активировать его""" await m.answer(text=text, reply_markup=ReplyKeyboardRemove()) await manage_bot(m, repo) partner_data = await repo.get_partner(city=partner_data['city']) await m.answer(text=await generate_partner_data_message( partner_data=partner_data, m=m)) await manage_bot(m, repo) elif m.text == "🔄 Заполнить заново": await state.finish() await m.answer(text="🏙️ Введите название города-партнера:", reply_markup=return_to_menu) await NewPartner.first() elif m.text == "🏠 Вернуться в меню": await manage_bot(m, repo)
async def process_filter_type(message: Message, state: FSMContext): async with state.proxy() as data: data['filter_type'] = message.text if data['filter_type'] in ['Январь-Март', 'Апрель-Июнь', 'Июль-Сентябрь', 'Октябрь-Декабрь', 'Весь год']: responses = date_response(data) if responses: if len(responses) < 6: for r in responses: await message.reply(text_answer(r), parse_mode='HTML', reply=False, reply_markup=ReplyKeyboardRemove()) else: pdf_table(responses) # f = os.path.abspath(os.curdir) + '/event_table.pdf' await message.answer('В выбранный период слишком много соревнований. ' 'Вам будет отправлен pdf файл', reply_markup=ReplyKeyboardRemove()) await bot.send_document(message.from_user.id, document=InputFile('event_table.pdf')) else: await message.reply('В выбранный период нет соревнований', reply_markup=ReplyKeyboardRemove()) else: responses = name_response(data) if responses: if len(responses) < 6: for r in responses: await message.reply(text_answer(r), parse_mode='HTML', reply=False, reply_markup=ReplyKeyboardRemove()) else: pdf_table(responses) await message.answer('По выбранному имени слишком много соревнований. ' 'Вам будет отправлен pdf файл.', reply_markup=ReplyKeyboardRemove()) await bot.send_document(message.from_user.id, document=InputFile('event_table.pdf')) else: await message.reply('По введённому названию ничего не найдено', reply_markup=ReplyKeyboardRemove()) await state.finish()
async def process_update(message: types.Message, state: FSMContext): logging.info("Processing update value choice...") if message.text == "Date": await ManageTasks.on_update_date.set() await message.answer("Введите новое значение, ", reply_markup=ReplyKeyboardRemove()) elif message.text == "Text": await ManageTasks.on_update_text.set() await message.answer("Введите новое значение", reply_markup=ReplyKeyboardRemove()) elif message.text == "Priority": await ManageTasks.on_update_priority.set() keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True) keyboard.add("Зеленый") keyboard.add("Желтый") keyboard.add("Красный") keyboard.add("Cancel") await message.answer("Выберите новое значение", reply_markup=keyboard) elif message.text == "Cancel": await message.answer("Выхожу из интерфейса.", reply_markup=ReplyKeyboardRemove()) await state.finish() return
async def reg_6(message: Message, state: FSMContext): answer = message.text if (answer == "Подтвердить"): full_data = await state.get_data() print(full_data) if full_data.get("name").isalpha() and full_data.get( "surname").isalpha(): name = full_data.get("name") surname = full_data.get("surname") num_group = full_data.get("group") gradebook = full_data.get("gradebook") age = full_data.get("age") user_id = message.from_user.id try: db.add_new_student(user_id, name, surname, gradebook, num_group, age) await message.answer("Регистрация прошла успешно!☺", reply_markup=ReplyKeyboardRemove()) except: await message.answer("Вы уже зарегистрированны в системе", reply_markup=ReplyKeyboardRemove()) else: await message.answer("Вы ввели неверные данные", reply_markup=ReplyKeyboardRemove()) elif (answer == "Изменить данные"): await message.answer("Введите ваше имя:", reply_markup=ReplyKeyboardRemove()) await RegistrationStudent.name.set() return await state.finish()
async def add_task_final(message: types.Message, state: FSMContext): print(message.text) if message.text == "Cancel": await message.answer("Выхожу из интерфейса добавления задачи.", reply_markup=ReplyKeyboardRemove()) await state.finish() return elif message.text == "Зеленый": priority = 0 elif message.text == "Желтый": priority = 1 elif message.text == "Красный": priority = 2 else: await message.answer("Что-то пошло не так, попробуйте еще раз.") #await message.answer("Выберите дату/время или нажмите на Cancel,\nесли хотите прекратить выполнение задачи;\nНажмите на Default, чтобы добавить задачу без времени.", reply_markup=keyboard) user_data = await state.get_data() new_task = Task(task=user_data["task"], date=user_data["date"], priority=priority) Session = sessionmaker(bind=engine) session = Session() session.add(new_task) session.commit() await message.answer(new_task, reply_markup=ReplyKeyboardRemove()) await state.finish()
async def get_answer(message: Message): # ответа главного меню await message.answer(f"Выбрано: {message.text}") # reply_markup=ReplyKeyboardRemove() if message.text == 'Кодировать сообщение': await Morse.code_english_to_morse.set() # Устанавливается новое состояние для кодирования await message.answer('Введи сообщение на английском, которое необходимо закодировать в Азбуку Морзе:', reply_markup=ReplyKeyboardRemove()) # Убирается главное меню для ввода и преобразования elif message.text == 'Декодировать сообщение': await Morse.code_morse_to_english.set() # Устанавливается новое состояния для декодирования await message.answer('Введи сообщение на Азбуке Морзе, которое необходимо декодировать в простое английское ' 'сообщение:', reply_markup=ReplyKeyboardRemove()) # Убирается главное меню для ввода и преобразования
async def get_money(message: types.Message, state: FSMContext): money = message.text data = await state.get_data() await state.update_data(money=money) if data.get("language") == constants.Uz: await message.answer( f"Qo\'shimcha ma\'lumotingiz bormi?", reply_markup=ReplyKeyboardRemove()) else: await message.answer( f"У вас есть дополнительная информация?", reply_markup=ReplyKeyboardRemove()) await States.next()
async def restart(message: types.Message, state: FSMContext): """Restart""" allowed_users = await db.select_all_user_id() if message.from_user.id in allowed_users: await state.finish() await db.change_status(message.from_user.id, False) await message.answer("Перезагружен", reply_markup=menu) else: try: ch1 = await bot.get_chat_member(chat_id=GROUP, user_id=message.from_user.id) print(ch1.status) ch = await bot.get_chat_member(chat_id=CHANNEL, user_id=message.from_user.id) print(ch.status) if ch1.status == ch.status == 'member': try: await db.add_user(user_id=message.from_user.id, name=message.from_user.full_name, status=False, filter=None, ads_id_1=None, ads_id_2=None, ads_id_3=None, ads_id_4=None, ads_id_5=None) await message.answer(f'Привет, {message.from_user.full_name}! ' f'Если Вам нужна помощь, нажмите на клавиатуре кнопку Помощь/Инструкция или ' f'введите команду /help', reply_markup=menu) except: print("Что-то пошло не так") elif ch1.status == ch.status == 'left': await message.answer(f'Для того, чтобы пользоваться ботом' f' Вам нужно подписаться на нашу группу и новостной канал\n{GROUP}\n{CHANNEL}\n', reply_markup=ReplyKeyboardRemove()) await message.answer(f'Если вы уже подписались нажмите', reply_markup=check_subscriptionsewq) elif ch1.status == 'left' and ch.status == 'member': await message.answer(f'Для того, чтобы пользоваться ботом' f' Вам нужно подписаться на нашу группу\n{GROUP}\n', reply_markup=ReplyKeyboardRemove()) await message.answer(text=f'Если вы уже подписались нажмите', reply_markup=check_subscriptionsewq) elif ch1.status == 'member' and ch.status == 'left': await message.answer(f'Для того, чтобы пользоваться ботом' f' Вам нужно подписаться на наш новостной канал\n{CHANNEL}\n', reply_markup=ReplyKeyboardRemove()) await message.answer(text=f'Если вы уже подписались нажмите', reply_markup=check_subscriptionsewq) except: await message.answer(f'Для того, чтобы пользоваться ботом' f' Вам нужно подписаться на нашу группу и новостной канал\n{GROUP}\n{CHANNEL}\n', reply_markup=ReplyKeyboardRemove()) await message.answer(text=f'Если вы уже подписались нажмите', reply_markup=check_subscriptionsewq)
async def start_quiz(message: types.Message): if db.get_current_question(user_id=message.from_user.id) > 30: text = MESSAGES['you are finished'] markup = ReplyKeyboardRemove() else: await Quiz.Task1.set() db.increment_current_question(message.from_user.id, 0) text = questions[1]['Question'] markup = ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True) for choice in questions[1]['Choices']: choice_btn = KeyboardButton(choice) markup.add(choice_btn) await message.reply(text, reply_markup=markup, reply=False)
async def check_subscriptions(call: types.CallbackQuery): """Проверяем подписку""" await call.message.edit_reply_markup() try: ch1 = await bot.get_chat_member(chat_id=GROUP, user_id=call.from_user.id) print(ch1.status) ch = await bot.get_chat_member(chat_id=CHANNEL, user_id=call.from_user.id) print(ch.status) if ch1.status == ch.status == 'member': try: await db.add_user(user_id=call.from_user.id, name=call.from_user.full_name, status=False, filter=None, ads_id_1=None, ads_id_2=None, ads_id_3=None, ads_id_4=None, ads_id_5=None) await call.message.answer(f'Привет, {call.from_user.full_name}! ' f'Если Вам нужна помощь, нажмите на клавиатуре кнопку Помощь/Инструкция или ' f'введите команду /help', reply_markup=menu) except: print("Что-то пошло не так") elif ch1.status == ch.status == 'left': await call.message.edit_reply_markup() await call.message.answer(f'Для того, чтобы пользоваться ботом' f' Вам нужно подписаться на нашу группу и новостной канал\n{GROUP}\n{CHANNEL}\n', reply_markup=ReplyKeyboardRemove()) await call.message.answer(text=f'Если вы уже подписались нажмите', reply_markup=check_subscriptionsewq) elif ch1.status == 'left' and ch.status == 'member': await call.message.edit_reply_markup() await call.message.answer(f'Для того, чтобы пользоваться ботом' f' Вам нужно подписаться на нашу группу\n{GROUP}\n', reply_markup=ReplyKeyboardRemove()) await call.message.answer(text=f'Если вы уже подписались нажмите', reply_markup=check_subscriptionsewq) elif ch1.status == 'member' and ch.status == 'left': await call.message.edit_reply_markup() await call.message.answer(f'Для того, чтобы пользоваться ботом' f' Вам нужно подписаться на наш новостной канал\n{CHANNEL}\n', reply_markup=ReplyKeyboardRemove()) await call.message.answer(text=f'Если вы уже подписались нажмите', reply_markup=check_subscriptionsewq) except: await call.message.edit_reply_markup() await call.message.answer(f'Для того, чтобы пользоваться ботом' f' Вам нужно подписаться на нашу группу и новостной канал\n{GROUP}\n{CHANNEL}\n', reply_markup=ReplyKeyboardRemove()) await call.message.answer(text=f'Если вы уже подписались нажмите', reply_markup=check_subscriptionsewq)
async def answer_q2(message: types.Message, state: FSMContext): answer = message.text data = await state.get_data() answer1 = data.get("answer1") if answer == 'Да': try: cid = get_cid_by_name(answer1) leave_course(message.from_user.id, cid) await message.answer('Вы покинули курс {}!'.format(answer1), reply_markup=ReplyKeyboardRemove()) except: await message.answer('Что-то пошло не так....', reply_markup=ReplyKeyboardRemove()) await state.finish()
async def checkout(query: types.CallbackQuery, state: FSMContext, *args, **kwargs): user_data = await state.get_data() cart = user_data.get('cart', []) if not cart: await query.message.reply(replies.CART_IS_EMPTY, reply=False, reply_markup=ReplyKeyboardRemove()) await query.answer() return await query.message.reply(replies.ASK_FOR_ADDRESS, reply=False, reply_markup=ReplyKeyboardRemove()) await states.CheckoutStates.waiting_for_address.set() await query.answer()
async def process_choice_time(msg: Message, state: FSMContext): """ Пользователю предлагается выбрать время в которое он будет получать уведомления о том что нужно составить список дел на день """ if msg.text.lower() == 'да': await state.update_data(subscription_status=1) await msg.answer(Daily_message.start_time.value, reply_markup=ReplyKeyboardRemove()) await Daily.start_time.set() elif msg.text.lower() == 'отмена': await state.finish() await msg.answer(Daily_message.action_canceled.value, reply_markup=ReplyKeyboardRemove()) else: await msg.answer(Daily_message.push_btn_below.value) return
async def get_book(message: types.Message): if message.text == '😂': await message.answer('Так счастлив, что аж проливает слезы радости. ' 'Имеет приступ смеха и не может сдержать себя.', reply_markup=ReplyKeyboardRemove()) elif message.text == '😎': await message.answer('Я король мира! Мистер крутой смайлик в солнцезащитных очках. ' 'Полностью уверен в себе и расслаблен. Все абсолютно легко и круто.', reply_markup=ReplyKeyboardRemove()) else: await message.answer('«Грибное» облако. Иногда у вас бывают дни, когда вы понимаете, ' 'что никогда ранее не осознавали. Вы осознаете те моменты, ' 'которые заставляют задуматься и помогают дать ответ на вопрос' ' "почему я никогда этого не замечал?"', reply_markup=ReplyKeyboardRemove())
async def choose_tasks_action(query: types.CallbackQuery, state: FSMContext): #print("TEXT", query.data) try: id_ = int(query.data) Session = sessionmaker(bind=engine) session = Session() response = session.query(Task).filter(Task.id_ == id_).all() if len(response) > 0: keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True) keyboard.row("Delete", "Update") keyboard.add("Cancel") await state.update_data(id_=id_) await bot.send_message( query["from"]["id"], f"Выбрана задача ({id_}). Выберите действие", reply_markup=keyboard) await ManageTasks.waiting_for_action_choice.set() else: await bot.send_message( query["from"]["id"], "Неправильно выбрано действие, выхожу из интерфейса", reply_markup=ReplyKeyboardRemove()) await state.finish() return except Exception as e: logging.warning("SNAFU") logging.warning(str(e)) return
async def get_teachers_subjects(message: Message, state: FSMContext): data = await state.get_data() first_name = data.get('first_name') last_name = data.get('last_name') school = data.get('school') group = data.get('group') teacher_subjects = data.get('teacher_subjects') pargroup = data.get('pargroup') username = data.get('username') if message.text.upper() == 'ДА': await db.add_teachers(id=message.from_user.id, username=username, first_name=first_name, last_name=last_name, school=school, groups=group, subject=teacher_subjects, pargroup=int(pargroup)) await bot.send_photo( chat_id=message.from_user.id, photo='https://i.ibb.co/KGHt21B/photo-2020-08-22-00-20-52.jpg', caption='Вы успешно внесены в базу данных!\n\n' 'Если у вас не появились кнопки снизу, то нажмите на ' 'эту кнопку возле ввода текста', reply_markup=Teachers_buttons) await state.finish() elif message.text.upper() == 'НЕТ': await message.answer('Введите вашу <b><u>фамилию и имя</u></b>', reply_markup=ReplyKeyboardRemove()) await TeacherRegister.user_name.set() else: await message.answer('<b>Вы не ответили на вопрос!</b>', reply_markup=yes_or_no)
async def process_update_priority(message: types.Message, state: FSMContext): logging.info("Processing task priority update...") if message.text == "Зеленый": Session = sessionmaker(bind=engine) session = Session() id_ = await state.get_data() id_ = id_["id_"] session.query(Task).filter(Task.id_ == id_).update( {Task.priority: 0}, synchronize_session=False) session.commit() elif message.text == "Желтый": Session = sessionmaker(bind=engine) session = Session() id_ = await state.get_data() id_ = id_["id_"] session.query(Task).filter(Task.id_ == id_).update( {Task.priority: 1}, synchronize_session=False) elif message.text == "Красный": Session = sessionmaker(bind=engine) session = Session() id_ = await state.get_data() id_ = id_["id_"] session.query(Task).filter(Task.id_ == id_).update( {Task.priority: 2}, synchronize_session=False) session.commit() elif message.text == "Cancel": await message.answer("Выхожу из интерфейса.", reply_markup=ReplyKeyboardRemove()) await state.finish() return
async def address(message: types.Message, state: FSMContext): # Достаем переменные data = await state.get_data() phone = data.get("phone") address = data.get("address") tariff = message.text user_abon = message.from_user.username await message.answer("Дякуємо!", reply_markup=ReplyKeyboardRemove()) await message.answer( f"Ви ввели\n" f"телефон: {phone}\n" f"Адресу: {address}\n" f"Тариф: {tariff}\n" f"Очікуйте дзвінка оператора для визначення часу підключення\n" f" і щодо додаткових послуг") text = f"Підключка @{user_abon} \nТелефон: {phone} Адрес: {address} Тариф: {tariff}" for admin in ADMINS: try: await bot.send_message( admin, f"Підключка @{user_abon} \n" f"Телефон: {phone} Адрес: {address} Тариф: {tariff}\n") await sleep(0.3) except Exception: pass await state.finish()
async def AdminGroupReset(query: types.CallbackQuery, state: FSMContext): await query.message.answer("De registratie van een nieuwe groep is geannuleerd", reply_markup=ReplyKeyboardRemove(), disable_notification=True) await state.finish() await query.answer() await query.delete() await query.message.delete()
async def edit_diesel_profile(call: CallbackQuery): await call.answer(cache_time=60) await call.message.edit_reply_markup() await call.message.answer( text='Введите ваши данные Diesel Elcat kg\n\nВведите username...', reply_markup=ReplyKeyboardRemove()) await Login_info.first()
async def bot_start(message: types.Message): await message.answer(f"Привет, {message.from_user.full_name}!", reply_markup=ReplyKeyboardRemove()) if not db.select_user(user_id=message.from_user.id): await message.answer("Добавляем тебя в БД...") db.add_user(message.from_user.id) await message.answer("Готов к работе!", reply_markup=add_feed)
async def read_set_name(msg: Message, state: FSMContext): user = msg.from_user set_name = msg.text if len(set_name) > 50: await msg.answer("Название набора не должно первышать 50 символов 🥴\n" "Попробуй ввести его ещё раз:") return await state.update_data(set_name=set_name) photo_id: str = await redis_commands.get_photo_id(user.id) await msg.bot.send_chat_action(user.id, "upload_photo") img_file = BytesIO() await (await msg.bot.get_file(photo_id)).download(destination=img_file) drawn_img = await get_drawn_img(img_file) crop_range_str = await redis_commands.get_last_crop_range_str(user.id) await msg.answer_photo( drawn_img, caption="Введи диапозон высот по которому обрежется часть " "картинки с английским словом и с переводом.\n\n" "Диапозон: верхняя граница слова, граница между словом и переводом, " "нижняя граница слова.\n\n" "<i>Пример ввода: 300 470 1150</i>", reply_markup=keyboards.default.get_text_menu(crop_range_str) if crop_range_str else ReplyKeyboardRemove()) await AddingSet.config_sizes.set() logging.info(f"@{user.username}-{user.id} read set name {set_name}")
async def process_quality(message: Message, state: FSMContext): quality = message.text async with state.proxy() as data: data['quality'] = quality await PersonalTuning.next() await message.reply('Напишите короткое описание завала.', reply_markup=ReplyKeyboardRemove())
async def choose_date_from_state(message: Message, state: FSMContext): await ReportsStates.choose_date_from_state.set() await state.update_data(message=message) await message.answer("Выберите начало периода:", reply_markup=ReplyKeyboardRemove()) await message.answer("_", reply_markup=create_calendar())
async def enroll_event(obj: types.base.TelegramObject): callback = False callback_query = None if isinstance(obj, types.CallbackQuery): callback = True callback_query = obj message = obj.message uid = callback_query.from_user.id elif isinstance(obj, types.Message): message = obj uid = message.from_user.id else: return state = dp.current_state(user=uid) with session_scope() as session: if callback: event_id = await user_notify_context.get(user=uid, key=message.message_id) else: event_q = session.query(Event) \ .filter(Event.title == message.text) if event_q.count() == 0: return event: Event = event_q.all()[0] event_id = event.id await state.set_data({'event_id': event_id}) user_q = session.query(User) \ .filter(User.uid == uid) user: User = user_q.all()[0] enrolled_q = session.query(Enrollment) \ .join(User) \ .filter(User.uid == uid) \ .filter(Enrollment.event_id == event_id) if enrolled_q.count() == 0: # create enrollment enrollment = Enrollment(user_id=user.id, event_id=event_id, complete=False) \ .insert_me(session) logging.info(f'enrollment created: {enrollment}') else: enrollment = enrolled_q.all()[0] # build message if enrollment.complete: m_text = MESSAGES['registration_exists'] remove_keyboard = None else: m_text = MESSAGES['invoice_prompt'] remove_keyboard = ReplyKeyboardRemove() await state.set_state(UserStates.all()[3]) await message.reply(m_text, parse_mode=ParseMode.MARKDOWN, reply=False, reply_markup=remove_keyboard) if callback: await bot.answer_callback_query(callback_query.id)
async def get_contact(message: types.Message): answer = message.contact await message.answer( f'Ваш телефонный номер: {answer.phone_number}', reply_markup=ReplyKeyboardRemove() # убирает инлайн ) await message.answer("А сейчас введите сумму которую вы хотите получить.")