как получать сообщения из определенного чата в ТГ
у меня есть две функции:
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 шт):
Код в колбэке 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
Если вы хотите отправлять результат какой-то обработки, или из другого чата, то нужно сначала в чате с оператором сохранить ответ в контекст, а потом в чате с пользователем забрать из контекста.