Как передать переменную из register_next_step_handler в callback_query_handler?
Имеется код собранный из двух частей пользователя @Violet, но не хватает навыков объединить. Суть кода в том, что пользователь задает изначально по команде /name - имя. При повторном вызове команды через callback_query_handler появляется две кнопки, которые ведут к редактированию имеющегося имени по запросу Да/Нет:
@bot.message_handler(commands=['name'])
def welcome2(message):
mesg = bot.send_message(message.chat.id,'Задайте имя')
bot.register_next_step_handler(mesg,name)
def name(message, f=None):
if f == 'inline':
argument = 'text for example'
return argument
else:
if db.get_nickname(message.from_user.id) == 'name':
db.update_nickname(message.from_user.id, message.text)
bot.send_message(message.chat.id, "Привет, " + str(db.get_nickname(message.from_user.id)) + ", Для навигации по боту пользуйся системными кнопками телеграма.")
else:
markup = types.InlineKeyboardMarkup(row_width=2)
item1 = types.InlineKeyboardButton("Да", callback_data='yes')
item2 = types.InlineKeyboardButton("Нет", callback_data='no')
markup.add(item1, item2)
bot.send_message(message.chat.id, "Меняешь имя?", reply_markup=markup)
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
try:
if call.message:
if call.data == 'yes':
# bot.send_message(call.message.chat.id, 'Вы успешно поменяли имя!')
print('argument = ' + name(None, 'inline'))
elif call.data == 'no':
bot.send_message(call.message.chat.id, 'Вы не поменяли имя' ,disable_notification=True)
except Exception as e:
print(repr(e))
Переменную argument я получаю и передаю в callback - yes, но как ловить из register_next_step_handler имя, которое передается например в db.update_nickname, но только уже при call-yes?
Ответы (2 шт):
воспользуйтесь передачей необходимой информации через callback_data:
item1 = types.InlineKeyboardButton("Да", callback_data="['yes', '" + message.chat.id + "', '" + message.text + "']"
далее эту информацию можно получить через ast.literal_eval:
if call.data.startswith("['yes'"):
db.update_nickname(ast.literal_eval(call.data)[1], ast.literal_eval(call.data)[2])
если
callback_data="['yes', '" + message.chat.id + "', '" + message.text + "']"
то при выводе
(call.data)[1] и (call.data)[2] получим [ и '