-1

我有一个 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开始的价值,现在他得到了前一个用户获得的计数器的值。

4

1 回答 1

0

对于这种情况,这是一个简单的解决方案 - 看看InlineKeyboardMarkup。它对你来说更优雅,而不是变量等。只需设置callback_dataInlineKeyboardButton 在用户点击后捕捉它,做一些事情并callback_data在最后进行更改。
例如,机器人使用内联按钮向用户发送消息,其中文本“Next”并且回调数据为 0。用户单击后,您需要在更新结果中捕获CallbackQuery 。如果它等于 0 - 为此做点什么。然后您需要使用内联按钮更改消息 - 使用更新消息。编辑消息并为内联按钮设置新值。callback_data

于 2016-11-23T06:24:51.087 回答