在 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
。
我有一个 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
。