I
I
Ivan Ok2019-04-14 11:40:17
Python
Ivan Ok, 2019-04-14 11:40:17

How to forward information sent to a bot to another user?

There is a bot with a keyboard in which there are several scenarios
Depending on the scenario, the user selects an option (in the example "breakfast" - "light" - "there is a question" - "question")
, another user should receive this information (format "user 1" wrote
. will be different from the main one)
Further, the answer is also transferred to the bot's dialogue with user 1
Another mini question: how to get the id of the dialogue with user 2 so that user 1 writes to him

Код:
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()

Answer the question

In order to leave comments, you need to log in

2 answer(s)
E
Eugene, 2019-04-15
@SwitcherN

There are a lot of questions that can be replaced with one - "Can you write the code for me?".
I'll help you a little by pointing you in the right direction. This is not a panacea, but I would solve the problem with these methods.
on this one:
It will look like just a message, not a reply with constant quoting of the previous message.

def generate_keyboard (*answer):
    keyboard = types.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=True)
    for item in answer:
        keyboard.add(item)
    return keyboard

Then the generation of any keyboard with its subsequent sending to the user looks like this:
msg = 'Тут будет твое сообщение.' # Сообщение, которое будем отправлять
keyboard = generate_keyboard('Кнопка 1', 'Кнопка 2', 'Кнопка 3') #Генерируем клавиатуру
bot.send_message(message.chat.id, msg, reply_markup=keyboard) #Отправляем сообщение и клавиатуру

And then the recording of information will occur when a response is received. Example:
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 )

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)

The data must be additionally stored in the database. Otherwise, after the restart, all information will be deleted.

P
photozoom, 2019-04-14
@photozoom

#  bot.send_message(chat_id="841260346", text="Хочу позавтракать").
# bot.send_message(chat_id="841260346", text="Легкий").    #id чата заменяем на свой 
# bot.send_message(chat_id="841260346", text="вопросов нет")

What happens if you uncomment these lines? Do you know in advance who user 2 is?

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question