Пользователь должен ввести email дважды, чтобы получить следующее сообщение от бота
Я пишу бота на aiogram, и у меня возникла проблема. Пользователь должен ввести номер дважды, чтобы получить следующее сообщение от бота. Вот пример: Bot, [24.06.2023 20:54] Write email
Рамиль, [24.06.2023 20:54] @
Рамиль, [24.06.2023 20:54] @
Bot, [24.06.2023 20:54] Choose action:
Вот код
@dp.message_handler(state=Form.email)
async def process_phone(message: types.Message, state: FSMContext):
email=message.text
if email.startswith("@"):
await Form.next()
else:
await message.answer("Write email pls")
Что не так?
Вот весь код
from aiogram import Bot, Dispatcher, executor, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters import Command
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
import re
from states import Form
bot = Bot(token='TOKEN')
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
@dp.message_handler(Command('start'))
async def start(message: types.Message, state: FSMContext):
await message.answer("Привет, я чат-бот Wonder Women - самого доброго и созидательного комьюнити Центральной Азии:)\n\nЗдесь ты можешь купить билет на WWTalks, который состоится 10 декабря.\nНо сначала давай познакомимся поближе:\n\nНапиши, пожалуйста, своё имя")
await Form.surname.set()
@dp.message_handler(state=Form.surname)
async def process_name(message: types.Message, state: FSMContext):
await state.update_data(surname=message.text)
await message.answer("Напиши, пожалуйста, свою фамилию")
await Form.phone_number.set()
@dp.message_handler(state=Form.phone_number)
async def process_surname(message: types.Message, state: FSMContext):
phone_number = message.text
phone_number_pattern = r'^\+7\d{1}$'
if not re.match(phone_number_pattern, phone_number):
await message.answer("Напиши, пожалуйста, свой номер телефона по формату +7----------")
else:
await Form.email.set()
@dp.message_handler(state=Form.email)
async def process_phone(message: types.Message, state: FSMContext):
email=message.text
if email.startswith("@"):
await Form.next()
else:
await message.answer("Напиши, пожалуйста, email (важно, т.к. электронный адрес должен совпадать с тем, что ты укажешь при оплате")
@dp.message_handler(state=Form.buy_or_more)
async def process_email(message: types.Message, state: FSMContext):
keyboard = InlineKeyboardMarkup()
buy_button = InlineKeyboardButton('Купить билет', callback_data='buy')
more_button = InlineKeyboardButton('Подробнее о встрече 10 декабря', callback_data='more')
keyboard.add(buy_button)
keyboard.add(more_button)
await message.answer("Выберите действие:", reply_markup=keyboard)
await Form.next()
@dp.callback_query_handler(lambda c: c.data == 'buy', state=Form.buy)
async def process_callback_buy(callback_query: types.CallbackQuery, state: FSMContext):
await bot.answer_callback_query(callback_query.id)
buy_ticket_text = "Вы можете купить билет по ссылке: [Ссылка на покупку билета]" # Замените ссылкой на покупку билета
await bot.send_message(callback_query.from_user.id, buy_ticket_text)
await bot.send_message(callback_query.from_user.id, "Если вы купили, отправьте скриншот")
await Form.next()
@dp.message_handler(content_types=['photo'], state=Form.screen)
async def process_screenshot(message: types.Message, state: FSMContext):
# Process the screenshot
await bot.send_message(message.from_user.id, "Спасибо. Мне нужно немного времени, чтобы обработать запрос. "
"Электронный билет придет на почту в ближайшее время.")
await bot.send_message(message.from_user.id, "Напишите от 1 до 3х вопросов, которые интересуют вас по теме WWTalks. "
"Самые интересные мы обсудим на нашей встрече.")
await Form.next()
@dp.message_handler(state=Form.questions)
async def process_questions(message: types.Message, state: FSMContext):
# Process the questions
await bot.send_message(message.from_user.id, "Спасибо за участие в формировании актуальных вопросов для . "
"Ждем вас на нашей встрече!\n\nКоманда")
@dp.callback_query_handler(lambda c: c.data == 'more', state=Form.more)
async def process_callback_buy(callback_query: types.CallbackQuery, state: FSMContext):
await bot.answer_callback_query(callback_query.id)
details_text = "Тема: 'Карьера'\n"
await bot.send_message(callback_query.from_user.id, details_text)
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
@dp.message_handler(state=Form.email)
async def process_phone(message: types.Message):
email = message.text
if email.startswith("@"):
keyboard = InlineKeyboardMarkup()
buy_button = InlineKeyboardButton('Купить билет', callback_data='buy')
more_button = InlineKeyboardButton('Подробнее о встрече 10 декабря', callback_data='more')
keyboard.add(buy_button)
keyboard.add(more_button)
await message.answer("Выберите действие:", reply_markup=keyboard) # <- сообщение и клавиатура перенесена сюда
await Form.buy_or_more.set()
else:
await message.answer("Напиши, пожалуйста, email (важно, т.к. электронный адрес должен совпадать с тем, что ты укажешь при оплате")
@dp.callback_query_handler(lambda c: c.data == 'buy')
async def process_callback_buy(callback_query: types.CallbackQuery):
await bot.answer_callback_query(callback_query.id)
buy_ticket_text = "Вы можете купить билет по ссылке: [Ссылка на покупку билета]"
await bot.send_message(callback_query.from_user.id, buy_ticket_text)
await bot.send_message(callback_query.from_user.id, "Если вы купили, отправьте скриншот")
await Form.screen.set()
@dp.message_handler(content_types=['photo'], state=Form.screen)
async def process_screenshot(message: types.Message, state: FSMContext):
# Process the screenshot
await bot.send_message(message.from_user.id, "Спасибо. Мне нужно немного времени, чтобы обработать запрос. "
"Электронный билет придет на почту в ближайшее время.")
await bot.send_message(message.from_user.id, "Напишите от 1 до 3х вопросов, которые интересуют вас по теме WWTalks. "
"Самые интересные мы обсудим на нашей встрече.")
await Form.next()
@dp.message_handler(state=Form.questions)
async def process_questions(message: types.Message, state: FSMContext):
# Process the questions
await bot.send_message(message.from_user.id, "Спасибо за участие в формировании актуальных вопросов для WWTalks. "
"Ждем вас на нашей встрече!\n\nКоманда Wonder Women")
await Form.buy_or_more.set()
@dp.callback_query_handler(lambda c: c.data == 'more')
async def process_callback_buy(callback_query: types.CallbackQuery):
await bot.answer_callback_query(callback_query.id)
details_text = "Тема: 'Карьера'\n"
await bot.send_message(callback_query.from_user.id, details_text)
Еще почему то не работают inline кнопки.
Источник: Stack Overflow на русском