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