@PythonGen

Как сделать чтобы при нажатии Inline кнопки выдавало пользователю ответ?

Есть бот который собирает информацию о пользователи, после выдаёт кнопку - отправить, при её нажатии отправляется вся заполненая информация в админ-чат, и выдаётся 2 Inline кнопки - Принять, Отклонить
Ошибка в том что, бот не понимает кому конкретно выдать сообщение.
При нажатии принять, должно выдавать - спасибо, ваша заявка обработана
При нажатии Отклонить, должно выдавать - спасибо, но, ваша заявка была отклонена.
Желательно с примером на библиотеке telebot.
Спасибо
  • Вопрос задан
  • 568 просмотров
Пригласить эксперта
Ответы на вопрос 1
@agent_2203
Для этого нужно посылать кал-бек информацию, допустим изначально знаем кому мы будем отвечать, то бишь айди пользователя, а после принимаем и в зависимости от нажатой кнопки понимаем кому отправлять сообщение

user_id = 123456 # айди пользователя кому будем отправлять
chat_id = -123456 # айди чата куда будем писать

# отправляем сообщение в чат
message_markup = InlineKeyboardMarkup()
message_markup.row_width = 1
message_markup.add(
     InlineKeyboardButton(
          "Принять",
           callback_data="success_" + str(user_id)
     ),
     InlineKeyboardButton(
          "Отклонить",
           callback_data="unsuccess_" + str(user_id)
     ))
bot.send_message(
    chat_id=chat_id,
    text="Новая заявка",
    reply_markup=message_markup,
    parse_mode="Html"
)

# принимаем кал-бек информацию от кнопки 
def clb_handler(x):
    bot.answer_callback_query(x.id)
    if x.message.chat.id == x.from_user.id:
        cb_data = x.data.split("_")
        if len(cb_data) == 2:
               user_id = cb_data[1]
               msg = "спасибо, ваша заявка обработана" if cb_data[0] == "success" else "спасибо, но, ваша заявка была отклонена."
               bot.send_message(
                       chat_id=user_id,
                       text=msg,
                       parse_mode="Html"
                )

# запускаем бота
def start_polling():
    while True:
        try:
            # ставим что прослушивать ответы на кнопки будет функция clb_handler() 
            @bot.callback_query_handler(func=lambda call: True)
            def callback_query(x):
                clb_handler(x)

            bot.polling(
                    none_stop=True,
                    interval=0,
                    timeout=60
            )
        except Exception as e:
            print(e)
            time.sleep(5)

tb = threading.Thread(
    target = start_polling,
    args = ()
)
tb.start()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы