Телеграмм бот, передать значение из одной функции в другую
Пишу бота, который сначала по контакту идентифицирует пользователя, а потом этому пользователю выдает кусок информации из xls файла.
После идентификации пользователь видит 4 кнопки, нажимает на одну из них и должен получить расчет. Функция расчет должна брать в качестве аргумента значение, полученное в функции идентификации пользователя - это фио пользователя. Никак не могу понять как эти данные передать в next_func(). bot.register_next_step_handler ждет сообщения от пользователя, а его не будет.
import telebot
import pandas as pd
bot = telebot.TeleBot(TOKEN)
@bot.message_handler(commands=['start'])
def phone(message):
keyboard = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True)
button_phone = types.KeyboardButton(text="Отправить контакт", request_contact=True)
keyboard.add(button_phone)
bot.send_message(message.chat.id, 'Для идентификации нажмите на кнопку Отправить контакт', reply_markup=keyboard)
@bot.message_handler(content_types=['contact']) # Объявили ветку, в которой прописываем логику на тот случай, если пользователь решит прислать номер телефона :)
def contact(message):
if message.contact is not None:
print(message.contact)# Выводим у себя в панели контактные данные
df_users = pd.read_excel('users_bd.xlsx', sheet_name='users')
phone_to_search = int(message.contact.phone_number)
#проверяем наличие телефона в нашей бд
if (df_users['phone'] == phone_to_search).any():
index_of_user = df_users[df_users['phone'] == phone_to_search]['name_rus'].index[0]
login_of_user = df_users.loc[index_of_user]['name_rus']
**print(login_of_user)**
bot.send_message(message.chat.id, 'Вам доступны данные по {}'.format(login_of_user))
#авторизовали юзера и показываем, что можем
bot.send_message(message.from_user.id, "Актуальные данные бота:\n"
" Доходы: {rev}\n"
" Расходы на ФОТ: {sal}\n"
" Расходы на агентов: {ag}".format(rev=revenue_update,
sal=salary_update,
ag=agents_update))
keyboard = types.InlineKeyboardMarkup()
key_revenue = types.InlineKeyboardButton(text='Доходы', callback_data='calculation_rev')
keyboard.add(key_revenue)
key_salary = types.InlineKeyboardButton(text='Расходы на ФОТ', callback_data='calculation')
keyboard.add(key_salary)
key_agents = types.InlineKeyboardButton(text='Расходы на агентов', callback_data='calculation')
keyboard.add(key_agents)
key_bonus = types.InlineKeyboardButton(text='Расчет текущего бонуса', callback_data='calculation')
keyboard.add(key_bonus)
# Показываем все кнопки сразу и пишем сообщение о выборе
bot.send_message(message.from_user.id, text='Выберите, что нужно сделать', reply_markup=keyboard)
else:
bot.send_message(message.chat.id, 'У Вас нет доступа к боту. Обратитесь к администратору.')
@bot.callback_query_handler(func=lambda call: True)
def callback_worker(call):
# Если нажали на одну из кнопок - запускаем разные расчеты
if call.data == "calculation_rev":
#тут кусок кода по расчет revenue
bot.send_message(call.message.chat.id, 'Сейчас все посчитаю revenue')
next_func(login_of_user)
elif call.data == "calculation":
bot.send_message(call.message.chat.id, 'Это я еще не умею, но скоро научусь)')
def next_func(login_of_user):
#надо как-то передать сюда login_of_user из функции контакт
pass
bot.polling(none_stop=True, interval=0)