在 Telegram 机器人中为新用户重置变量 (python)

Reseting variables for new user in Telegram bot (python)

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

函数正在使用此 class:

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

这里有一个针对这种情况的简单解决方案 - 查看 InlineKeyboardMarkup. It's more elegantly for you instead variables etc. Just set callback_data for InlineKeyboardButton,在用户点击后捕获它,做一些事情并在最后更改 callback_data
例如,bot 向用户发送带有内联按钮的消息,其中文本 "Next",回调数据为 0。用户单击后,您需要捕获 CallbackQuery in your Update results. If it equal 0 - do something for this. Then you need change message with inline button - use Updating messages。编辑消息并为内联按钮设置新值 callback_data