3

Ich baue einige Telegramm Bot auf Python (mit diesem Framework pyTelegramBotAPI). Und ich stieß auf das Problem mit Benutzereingaben. Ich brauche Benutzereingaben (es kann ein beliebiger Text sein) nach der Bot-Nachricht. Zum Beispiel:Speichern Benutzereingaben nach bestimmten Nachricht Telegramm Bot

Bot: - Bitte beschreiben Sie Ihr Problem.

Benutzer: - Unser Computer funktioniert nicht.

Dann muss ich diesen Text "Unser Computer funktioniert nicht" zu einer Variablen speichern und mit dem nächsten Schritt fortfahren. Hier ist mein Code:

#!/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 

ich auf die Idee, mit message_id in Anweisung, aber immer noch nicht umsetzen können. Wie kann ich das lösen? Irgendwelche Ideen? Vielen Dank.

Antwort

2

es ist kein Python oder sogar Programmierung Frage. Es ist mehr wie ein Designproblem. aber wie auch immer. Die Lösung hält Sitzung für Benutzer. zum Beispiel Benutzer senden Sie:

Unser Computer funktioniert nicht.

Zuerst erstellen Sie eine Sitzung für diesen Benutzer (die Identität sollte eine Benutzer-ID sein), dann senden Sie ihm eine ordnungsgemäße Nachricht. Wenn Benutzer die nächste Nachricht senden, sehen Sie zuerst den Benutzerstatus und sehen, ob er/sie eine Sitzung hat oder nicht. Wenn er/sie eine Sitzung hat, fahren Sie mit dem zweiten Schritt fort. Ich entwickle einen solchen Bot und benutze ein Wörterbuch, um Benutzersitzungen zu speichern. aber es macht alles etwas kompliziert.

0

Sie sollten die Daten im Cache oder in der Datenbank speichern.

0

Sie können Forcereply verwenden. Nach Erhalt einer Nachricht mit diesem Objekt zeigen die Telegramm-Clients eine Antwortschnittstelle für den Benutzer an (als ob der Benutzer die Nachricht des Bot ausgewählt und auf "Antworten" geklickt hätte). Dies kann sehr nützlich sein, wenn Sie benutzerfreundliche Schritt-für-Schritt-Schnittstellen erstellen möchten, ohne den Datenschutzmodus zu opfern. https://core.telegram.org/bots/api#forcereply

0

Dies wird Ihnen helfen 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()