как получать сообщения из определенного чата в ТГ

у меня есть две функции:

1)

async def get_message(update: Update, context):
    user_message = update.message.text
    user_id = update.effective_user.id
    context.user_data['user_question'] = user_message
    context.user_data['user_id'] = user_id

    answer = back.get_info(user_message)

    if answer == []:
        await context.bot.send_message(chat_id=context.user_data['user_id'], text="Мы перенаправили ваш вопрос оператору, ожидайте ответа")
        await context.bot.send_message(chat_id=admin_id, text=f"Вопрос от пользователя: {context.user_data['user_question']}")
        
        return OPERATOR
    else:
        kb = InlineKeyboardMarkup(keyboard.kb_answer)
        await update.message.reply_text(text=answer[0][0], reply_markup=kb)

        return ANSWER

она принимает вопрос пользователя и проверяет его наличие в БД, в его отсутствие она перенаправляет вопрос оператору, и меня состояние в машине на состояние, запускающие вторую функцию.

2)

async def operator(update: Update, context):
    
    answer = update.message.text
    user_id = context.user_data.get('user_id')
    await context.bot.send_message(chat_id=user_id, text=f"Ответ от оператора: {answer}")

    return ConversationHandler.END

она исправно работает, однако в то время как она должна получать сообщение из чата с админом, а затем пересылать ответ пользователю. Оно получает сообщение из чата с пользователем и пересылает ответ ему же. Ниже прикреплю, машину состояний:

conv_handler = ConversationHandler(
        entry_points=[CallbackQueryHandler(feedback, "start_question")],
        states={
            START: [
                MessageHandler(filters.TEXT & ~filters.COMMAND, get_message),
                CallbackQueryHandler(stop_question, "question_stop")
                ],
            ANSWER: [
                CallbackQueryHandler(correct_answer, "answer_correct"),
                CallbackQueryHandler(uncorrect_answer, "answer_uncorrect")
            ],
            OPERATOR: [
                MessageHandler(filters.TEXT & ~filters.COMMAND, operator)
            ]
        },
        fallbacks=[CommandHandler('cancel', cancel)]
    )

Подскажите почему так происходит и как решить эту проблему. Заранее спасибо


Ответы (1 шт):

Автор решения: Sobolenko.Evgeniy

Код в колбэке operator работает как ожидается. Берет текст сообщения из апдейа разговора (conversation) с пользователем и отправляет его обратно пользователю.

async def operator(update: Update, context):
    
    answer = update.message.text
    user_id = context.user_data.get('user_id')
    await context.bot.send_message(chat_id=user_id, text=f"Ответ от оператора: {answer}")

    return ConversationHandler.END

Если вы хотите отправлять результат какой-то обработки, или из другого чата, то нужно сначала в чате с оператором сохранить ответ в контекст, а потом в чате с пользователем забрать из контекста.

→ Ссылка