2016-11-21 7 views
-1

setzen Ich habe einen Telegrammbot, der mit verschiedenen Nachrichten abhängig vom Wert funcnex.state reagiert hat.Variablen für neuen Benutzer in Telegrammbot (Python)

Funktion ist mit dieser Klasse Betrieb:

class FuncCreator: 
    def __init__(self, start_state): 
     self.state = start_state 

    def __call__(self): 
     print(self.state) 
     self.state += 1 

funcnex = FuncCreator(0) 

Die Antwortnachricht wie folgt definiert ist:

elif ' Next' in text: 
      if funcnex.state == 0: 
       b2 = u'\U0001F532'+' Next' 
       line1 = linecache.getline('stattxt/sc1-1.txt', 6) 
       line2 = linecache.getline('stattxt/sc1-1.txt', 7) 
       json_keyboard = json.dumps({keym: [[b2]], 'resize_keyboard': True, 'one_time_keyboard': False}) 
       reply(u'\U000025FC'+line1+'\n'+line2)    
       funcnex() 
      elif funcnex.state == 1: 
       b2 = u'\U000027A1'+' Next' 
       line1 = linecache.getline('stattxt/sc1-1.txt', 12) 
       line2 = linecache.getline('stattxt/sc1-1.txt', 13) 
       json_keyboard = json.dumps({keym: [[b2]], 'resize_keyboard': True, 'one_time_keyboard': False}) 
       reply(u'\U0001F532'+line1+'\n'+line2)     
       funcnex() 

Das Problem ist, dass, wenn mehrere Benutzer die Interaktion mit dem Bot, der funcnex.state für die neue Benutzer könnte bereits 1 oder höher sein, wenn ein Benutzer zuvor mit dem Bot interagiert hat.

Die Frage ist - wie kann ich es für jede neue Benutzer zurücksetzen?

Was bedeutet, dass zum Beispiel

Wenn ein Benutzer das Wort Next an den Bot zum ersten Mal sendet, würden sie 1. Antwort erhalten, wenn er das Wort Next für zweites Mal sendet, würde er Antwort 2 erhalten , und so weiter.

Um die Anzahl der Zeiten, die der Benutzer das Wort Next sendet, zu zählen, verwende ich die Funktion, die im Beispiel ist. Wenn es nur einen Benutzer geben würde, würde alles gut funktionieren, aber für den zweiten Benutzer, wenn counter den Wert 0 für den Anfang haben sollte, bekommt er jetzt den Wert des Zählers, den der vorherige Benutzer gewonnen hat.

+0

Warum erstellen Sie keine Instanz pro Benutzer? – jonrsharpe

+0

Vielen Dank für Ihre Antwort! Was meinst du? Wie könnte es aussehen? Sorry für die noob Fragen, das ist mein Studentenprojekt. –

+0

Von 'FuncCreator', der Sache, die das Zählen macht. Erstellen Sie für jeden neuen Benutzer einen neuen Eintrag. – jonrsharpe

Antwort

0

Hier ist eine einfache Lösung für diese Situation - werfen Sie einen Blick auf InlineKeyboardMarkup. Es ist eleganter für Sie statt Variablen usw. Setzen Sie einfach callback_data für InlineKeyboardButton, fangen Sie es nach dem Benutzer klicken, etwas tun und am Ende callback_data ändern.
Zum Beispiel sendet Bot Nachricht an den Benutzer mit Inline-Taste dort Text "Weiter" und Rückrufdaten ist 0. Nach dem Klicken des Benutzers müssen Sie fangen CallbackQuery in Ihrem Update Ergebnisse. Wenn es gleich 0 ist, tu etwas dafür. Dann brauchen Sie Nachricht ändern mit Inline-Taste - verwenden Sie Updating messages. Bearbeiten Sie die Nachricht, und legen Sie für den Inline-Button den neuen Wert callback_data fest.

+0

Danke, ich habe darüber nachgedacht. Ich werde es versuchen! –

+0

Es hat gut für mich funktioniert, danke! –

+0

@Alex du bist willkommen – anatol

Verwandte Themen