Как создать функцию с использованием методов call и message в библиотеке pytelebot?

Всем привет! Можете подсказать, как реализовать функционал, при котором при нажатии на кнопку будет происходить двойное действие? То есть, должно появляться сообщение с просьбой "Заполните заявку", а под ним должна располагаться встроенная кнопка "Вернуться в меню". Пользователь может либо нажать на кнопку и вернуться в меню, либо заполнить анкету и отправить ее. Вот код: <br/> <br/> <pre><code class="python">def send_request(call):
    if call.data == "Вернутся в меню ↩️":
        otvet_knopok(message)
    else:
        if message.from_user.last_name == None:
            message.from_user.last_name = " "
        else:
            pass
        bot.send_message(call.message.chat.id, "Ваша заявка отправлена ✅\nПожалуйста,дождитесь ответа.")
        bot.send_message(call.message.chat.id, "Вы вернулись в главное меню. Выберите действие.",reply_markup=menubutton)
        bot.send_message(owner_id, "❗Заявка на фотосессию:\n{0}\n\n{1}\n{2} {3}\n@{4}".format(message.text, message.chat.id, message.from_user.first_name, message.from_user.last_name, message.from_user.username))</code></pre>
  • 21 ноября 2024 г. 13:13
Ответы на вопрос 1
Для реализации функционала, где при нажатии на кнопку происходит двойное действие, необходимо внести некоторые изменения в ваш код. Вот пример, как это можно сделать с использованием методов `call` и `message` в библиотеке `pytelebot`.

Мы создадим обработчик для нажатия на кнопку, который сначала отправляет сообщение с просьбой "Заполните заявку", и затем добавляет кнопку "Вернуться в меню".

Вот обновленный пример кода:

```python
import telebot
from telebot import types

bot = telebot.TeleBot('YOUR_API_TOKEN')

# Определяем кнопки меню
menubutton = types.ReplyKeyboardMarkup(resize_keyboard=True)
menu_item = types.KeyboardButton("Меню")
menubutton.add(menu_item)

# Обработка нажатия кнопки
@bot.callback_query_handler(func=lambda call: True)
def send_request(call):
    if call.data == "Вернуться в меню ↩️":
        # Возвращаемся в главное меню
        bot.send_message(call.message.chat.id, "Вы вернулись в главное меню. Выберите действие.", reply_markup=menubutton)
    else:
        # Отправляем сообщение с просьбой заполнить заявку
        bot.send_message(call.message.chat.id, "Заполните заявку, пожалуйста.")
        
        # Создаем встроенную кнопку для возврата в меню
        markup = types.InlineKeyboardMarkup()
        back_button = types.InlineKeyboardButton("Вернуться в меню ↩️", callback_data="Вернуться в меню ↩️")
        markup.add(back_button)

        bot.send_message(call.message.chat.id, "Вы можете заполнить анкету или вернуться в меню.", reply_markup=markup)

# Запуск бота
bot.polling(none_stop=True)
```

### Объяснение кода:
1. **Создание кнопки**: Мы создаем встроенную кнопку "Вернуться в меню", которая будет отображаться под сообщением о заполнении заявки.
2. **Обработчик callback_query**: Мы используем `@bot.callback_query_handler`, чтобы обрабатывать нажатия на кнопки. В зависимости от того, какая кнопка была нажата, выполняется соответствующее действие:
   - Если нажата кнопка "Вернуться в меню", отправляется сообщение с указанием, что пользователь вернулся в главное меню.
   - В противном случае отправляется сообщение с просьбой заполнить заявку и сопровождаем его встроенной кнопкой для возврата в меню.
3. **Запуск бота**: В конце запускаем бота с помощью `bot.polling()`.

Таким образом, пользователь получит возможность либо заполнить заявку, либо вернуться в меню, нажав соответствующую кнопку.
Похожие вопросы