在Telegram bot(python)中为新用户重置变量

时间:2016-11-21 19:37:48

标签: python telegram-bot python-telegram-bot

我有一个Telegram机器人,它根据funcnex.state的值来响应不同的消息。

该功能正在使用此类:

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

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

funcnex = FuncCreator(0)

答案消息的定义如下:

 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()

问题在于,如果多个用户与机器人交互,则新用户的funcnex.state可能已经1或更高,如果某个用户以前与机器人进行过互动。

问题是 - 如何为每个用户重置它?

意思是,例如,

如果一个用户第一次向机器人发送单词Next,他们会收到答案1.当他第二次发送单词Next时,他会收到答案2,所以上。

要计算用户发送单词Next的次数,我使用的是示例中的函数。如果只有一个用户,一切正常,但对于第二个用户,counter开头应该有值0,现在他获得前一个用户获得的计数器值。

1 个答案:

答案 0 :(得分:0)

这是针对这种情况的简单解决方案 - 请查看InlineKeyboardMarkup。它更适合您而不是变量等。只需为InlineKeyboardButton设置callback_data,在用户点击后抓住它,执行某些操作并在结尾处更改callback_data。 例如,bot使用内联按钮向用户发送消息,其中包含文本"下一步"并且回调数据为0.用户点击后,您需要在CallbackQuery结果中捕获Update。如果它等于0 - 为此做点什么。然后,您需要使用内联按钮更改消息 - 使用Updating messages。编辑消息并为内联按钮设置新值callback_data