3

나는이 프레임 워크 pyTelegramBotAPI을 사용하여 파이썬에서 일부 전보 봇을 구축 중입니다. 그리고 사용자 입력으로 문제가 발생했습니다. 특정 봇의 메시지 이후에 사용자 입력을 저장해야합니다 (텍스트가 될 수 있음). 예 :특정 메시지 전보 로봇 후 사용자 입력 저장

봇 : - 문제를 설명해주세요.

사용자 : - 컴퓨터가 작동하지 않습니다.

그러면이 텍스트를 "일부 컴퓨터에서는 작동하지 않습니다"라는 텍스트를 저장하고 다음 단계로 이동해야합니다. 내가 문에 MESSAGE_ID를 사용하여 함께 생각을 가지고

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import telebot 
import constants 
from telebot import types 

bot = telebot.TeleBot(constants.token) 

@bot.message_handler(commands=['start']) 
def handle_start(message): 
    keyboard = types.InlineKeyboardMarkup() 
    callback_button = types.InlineKeyboardButton(text="Help me!", callback_data="start") 
    keyboard.add(callback_button) 
    bot.send_message(message.chat.id, "Welcome I am helper bot!", reply_markup=keyboard) 



@bot.inline_handler(lambda query: len(query.query) > 0) 
def query_text(query): 
    kb = types.InlineKeyboardMarkup() 
    kb.add(types.InlineKeyboardButton(text="Help me!", callback_data="start")) 
    results = [] 
    single_msg = types.InlineQueryResultArticle(
     id="1", title="Press me", 
     input_message_content=types.InputTextMessageContent(message_text="Welcome I am helper bot!"), 
     reply_markup=kb 
    ) 
    results.append(single_msg) 
    bot.answer_inline_query(query.id, results) 

@bot.callback_query_handler(func=lambda call: True) 
def callback_inline(call): 
    if call.message: 
     if call.data == "start": 
      bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="Please describe your problem.") 
      #here I need wait for user text response, save it and go to the next step 

,하지만 여전히 그것을 구현할 수 없습니다 : 여기 내 코드입니다. 어떻게 해결할 수 있을까요? 어떤 아이디어? 고맙습니다.

답변

2

아니 파이썬 또는 심지어 프로그래밍 관련 질문. 그것의 문제를 디자인하는 것보다 더. 그러나 어쨌든. 솔루션은 사용자를 위해 세션을 유지하고 있습니다. 예를 들어 사용자가 다음을 전송합니다.

Google 컴퓨터가 작동하지 않습니다.

처음에는이 사용자에 대한 세션을 만들고 (ID는 사용자 ID 여야 함) 그/그녀에게 적절한 메시지를 보냅니다. 사용자가 처음에 다음 메시지를 보낼 때 사용자 상태를보고 세션이 있는지 여부를 확인합니다. 그/그녀가 세션을 가지고 있다면 두 번째 단계를 계속하십시오. 나는 이처럼 봇을 개발하고 사용자 세션을 저장하기 위해 사전을 사용했다. 그러나 그것은 모든 일을 조금 복잡하게 만듭니다.

0

캐시 또는 데이터베이스에 데이터를 저장해야합니다.

0

Forcereply를 사용할 수 있습니다. 이 개체를 사용하여 메시지를 받으면 전보 클라이언트는 사용자에게 회신 인터페이스를 표시합니다 (사용자가 봇의 메시지를 선택하고 '회신'을 탭한 것처럼 행동). 이는 개인 정보 보호 모드를 희생하지 않고도 사용자 친화적 인 단계별 인터페이스를 만들려는 경우 매우 유용 할 수 있습니다. https://core.telegram.org/bots/api#forcereply

0

이렇게하면 https://github.com/eternnoir/pyTelegramBotAPI/blob/master/examples/step_example.py

import telebot 
import constants 
from telebot import types 

bot = telebot.TeleBot(constants.token) 

@bot.message_handler(commands=['start']) 
def start(message): 
    sent = bot.send_message(message.chat.id, 'Please describe your problem.') 
    bot.register_next_step_handler(sent, hello) 

def hello(message): 
    open('problem.txt', 'w').write(message.chat.id + ' | ' + message.text + '||') 
    bot.send_message(message.chat.id, 'Thank you!') 
    bot.send_message(ADMIN_ID, message.chat.id + ' | ' + message.text) 

bot.polling() 
도움이 될 것입니다