Пересылка сообщений из бота в канал
есть кодик
logging.basicConfig(level=logging.INFO)
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)
@dp.message_handler(commands=['start'])
async def process_start_command(message: types.Message):
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
button1 = types.KeyboardButton(text="Оставить заявку")
button2 = types.KeyboardButton(text="Обратная связь")
keyboard.add(button1, button2)
await message.answer("Выберите действие:", reply_markup=keyboard)
@dp.message_handler(lambda message: message.text == "Оставить заявку")
async def process_request_command(message: types.Message):
await message.answer("Пришлите номер телефона и e-mail")
@dp.message_handler(lambda message: message.text == "Обратная связь")
async def process_feedback_command(message: types.Message):
await bot.send_message(chat_id=ADMIN_CHAT_ID, text=f"Пользователь t.me/{message.from_user.username} запрашивает обратную связь.")
@dp.message_handler()
async def echo_message(msg: types.Message):
await bot.send_message(chat_id=ADMIN_CHAT_ID, text=f"Номер телефона и e-mail: {msg.text}")
await bot.send_message(chat_id=msg.from_user.id, text="Ожидайте уведомление в течение суток")
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
Скрипт был залит на сервер, запущен, вроде бы работает, но есть "но", при отправке абсолютно любого сообщение он отправляет это сообщение в канал, и не важно была ли нажата какая либо кнопка. Мне хотелось бы чтобы он отправлял только одно сообщение из кнопки "оставить заявку", по типу - нажал на кнопку "оставить заявку" мне пришёл(обычному юзеру) ответ "пришлите номер тел .. " я пишу условно что то, и это что то он переслал в необходимый мне канал\чат
Ответы (1 шт):
Автор решения: Medvedev
→ Ссылка
Используйте машину состояний. Больше информации в документации.
Как пример:
class Form(StatesGroup): # настраиваем состояния
name = State()
phone = State()
email = State()
@dp.message_handler(lambda message: message.text == "Оставить заявку")
async def start_form(message: types.Message, state: FSMContext):
await state.set_state(Form.name) # устанавливаем состояние
await bot.send_message(callback_query.from_user.id, "Как вас зовут?")
@dp.message(Form.name) # обрабатывает состояние по name
async def process_surname(message: types.Message, state: FSMContext):
await state.update_data(surname=message.text)
await state.set_state(Form.phone) # устанавливаем следующее состояние
await bot.send_message(message.chat.id, "Какой у вас телефон?")
@dp.message(Form.phone)
async def process_phone(message: types.Message, state: FSMContext):
await state.update_data(phone=message.text)
await state.set_state(Form.email)
await bot.send_message(message.chat.id, "Введите вашу почту:")
@dp.message(Form.email)
async def process_email(message: types.Message, state: FSMContext):
user_data = await state.get_data()
name = user_data.get('name')
phone = user_data.get('phone')
email = message.text
ADMIN_ID = '00000000' # ваш ид чата
await bot.send_message(ADMIN_ID, f"Фамилия: {name}\nТелефон: {phone}\nEmail: {email}")
await state.finish() # завершаем