Задать вопрос
@IvanOk
Начинаю изучать Python

Как пересылать информацию отправленную боту другому пользователю?

Есть бот с клавиатурой в которой несколько сценариев
В зависимости от сценария пользователь выбирает вариант (в примере "завтрак" -- "легкий" -- "вопрос есть" -- "вопрос")
эту информацию должен получить другой пользователь (формат "пользователь 1" написал ........)
Пользователь 2 выбирает вариант ответа на вопрос (набирает это текстом + 3 варианта в виде клавиатуры), этой части пока в коде нет, тк не понимаю как переслать пользователю вторую клавиатуру вместе с данными (и клавиатура будет отличная от основной)
Далее ответ также переносится в диалог бота с пользователем 1
Еще мини вопрос: как получить id диалога с пользователем 2 чтобы пользователь 1 писал именно ему
Код:
import telebot
from telebot import types
import const

bot = telebot.TeleBot(const.API_TOKEN) #токен в отдельном файле, модно просто заменить 

@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
	bot.reply_to(message, "Привет Что хочешь поесть? \n\n Мануал  ", reply_markup=markup_menu )


markup_menu = types.ReplyKeyboardMarkup (resize_keyboard=True, row_width=1)
btn_zavtrak= types.KeyboardButton ('Хочу позавтракать')    #здесь в дальнейшем будут еще варианты, в зависимости от кнопки информация должна пересылаться разным людям (id чата заранее известны  )
markup_menu.add( btn_zavtrak)


@bot.message_handler(func=lambda message: True)
def echo_all(message):
    if  message.text == "Хочу позавтракать":
        bot.reply_to(message, 'Варианты завтраков', reply_markup=markup_zavtrak )
      #  bot.send_message(chat_id="841260346", text="Хочу позавтракать").  #попытка сделать пересыл информации при нажатии на опресненную кнопку определенному человеку   (такой вариант не сработал )

    if message.text == "Легкий":
        bot.reply_to(message, 'Выбран легкий, есть вопросы?', reply_markup=markup_otvet)
       # bot.send_message(chat_id="841260346", text="Легкий").    #id чата заменяем на свой 

    if message.text == "Вопросов нет":
        bot.reply_to(message, 'Ваш запрос принят, обработка займет не более 5 мин')
       # bot.send_message(chat_id="841260346", text="вопросов нет")
    if message.text == "Есть вопрос":
        bot.reply_to(message, 'Задайте ваш вопрос и нажмите завершить', reply_markup=markup_ok)

    if message.text == "Завершить":

        bot.reply_to(message, 'Ваш запрос принят, обработка займет не более 5 мин')
    else:
         
     msg = "Пользователь {} написал \"{}\".".format(message.from_user.username, message.text)
        bot.send_message('841260346', msg)
# в итоге все свел в else но при таком раскладе получается что вся информация независимо от кнопок будет прилетать одному человеку 



markup_zavtrak = types.ReplyKeyboardMarkup (resize_keyboard=True, row_width=3)
btn_legkii_zavtrak = types.KeyboardButton ('Легкий')
markup_zavtrak.add(btn_legkii_zavtrak)


markup_otvet = types.ReplyKeyboardMarkup()
btn_noq = types.KeyboardButton ('Вопросов нет')
btn_q = types.KeyboardButton ('Есть вопрос')
markup_otvet.add(btn_q,btn_noq )


markup_ok = types.ReplyKeyboardMarkup (resize_keyboard=True, row_width=1)
btn_ok= types.KeyboardButton ('Завершить')
markup_ok.add( btn_ok)

bot.polling()
  • Вопрос задан
  • 3992 просмотра
Подписаться 4 Простой 4 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Академия Эдюсон
    Python-разработчик
    9 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Python-разработчик + ИИ
    8 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
@SwitcherN
Начинаю изучать python
Очень много вопросов, которые можно заменить одним - "Сможете написать код за меня?".

Немного помогу, натолкнув на варианты решения. Это не панацея, но я бы решал задачу этими методами.

1. Этот код я бы заменил на такой формат:
bot.reply_to(message, "Привет Что хочешь поесть? \n\n Мануал  ", reply_markup=markup_menu )

на такой:
bor.send_message(message.chat.id, "Привет Что хочешь поесть? \n\n Мануал  ", reply_markup=markup_menu )

Будет выглядеть как просто сообщение, а не ответ с постоянным цитированием предыдущего сообщения.

2. Можно сделать отдельную функцию генерации клавиатуры. Например:
def generate_keyboard (*answer):
    keyboard = types.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=True)
    for item in answer:
        keyboard.add(item)
    return keyboard

Тогда генерация любой клавиатуры с последующим отправлением её пользователю выглядит так:
msg = 'Тут будет твое сообщение.' # Сообщение, которое будем отправлять
keyboard = generate_keyboard('Кнопка 1', 'Кнопка 2', 'Кнопка 3') #Генерируем клавиатуру
bot.send_message(message.chat.id, msg, reply_markup=keyboard) #Отправляем сообщение и клавиатуру


3. Для того, чтобы собрать информацию от пользователя и отправить сотруднику можно использовать словарь. Например, словарь может выглядеть следующим образом:
users_orders = {user_chat_id:{eating:breakfast, question:"Что тут происходит вообще?"}}

И тогда запись информации будет происходить при получении ответа. Пример:
if  message.text == "Хочу позавтракать":
    users_orders[message.chat.id][eating] = breakfast
    keyboard = generate_keyboard('Вариант 1', 'Вариант 2', 'Вариант 3')
    bot.send_message(message.chat.id, 'Выберите завтрак', reply_markup=keyboard )


4. Когда всю информацию получил - отправляем сотруднику ответ на основании сформированного словаря и удалим клавиатуру:
if message.text == "Завершить":
    hide_keyboard = types.ReplyKeyboardRemove()
    bot.send_message(message.chat.id, 'Ваш запрос принят, обработка займет не более 5 мин', reply_markup=hide_keyboard)
    msg = " От клиента {} поступил заказ:\n{}.\nИ вопрос:\n" \
    "{}".format(message.chat.id, users_orders[message.chat.id][eating], users_orders[message.chat.id][question])
    bot.send_message('841260346', msg)


Данные необходимо дополнительно сохранять в БД. Иначе после рестарта вся информация будет удалена.
Ответ написан
Комментировать
photozoom
@photozoom
#  bot.send_message(chat_id="841260346", text="Хочу позавтракать").
# bot.send_message(chat_id="841260346", text="Легкий").    #id чата заменяем на свой 
# bot.send_message(chat_id="841260346", text="вопросов нет")

А если раскомментировать эти строки что происходит? Вы заранее знаете кто пользователь 2?
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽