@Bunsert321

Как проверить второе нажатие инлайн кнопки в pytelegrambotapi?

Вот код
import telebot
import random, string
from telebot import types

bot = telebot.TeleBot('Токен')
my_id = 'Мой айди как создателя'
trainer_pass1 = '$W8Zs*?$r|u2'
trainer_pass = '123'
unic_code = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(10))
attempts = 3
FIO = ''
dates = ''
place = ''

#Начало стартовой функции

@bot.message_handler(commands=['start'])
def start(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    btn1 = types.KeyboardButton("Я тренер")
    btn2 = types.KeyboardButton('Я родитель/ученик')
    markup.add(btn1, btn2)
    bot.send_message(message.from_user.id, "Здравствуйте вас приветствует бот для удобного организации спортивных соревнований. Начнем регистрацию, Вы тренер или родитель/ученик?", reply_markup=markup)

@bot.message_handler(commands=['start'])
def get_name(message):
    name = message.from_user.username
    return name

@bot.message_handler(content_types='text')
def role_set(message):
    if message.text == 'Я тренер':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        btn1 = types.KeyboardButton("Да всё верно")
        btn2 = types.KeyboardButton('Нет, я ошибся/ошиблась')
        markup.add(btn1, btn2)
        msg = bot.send_message(message.from_user.id, "Вы тренер?", reply_markup=markup)
        bot.register_next_step_handler(msg, confirmation_tr)
    elif message.text == 'Я родитель/ученик':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        btn1 = types.KeyboardButton("Да всё верно")
        btn2 = types.KeyboardButton('Нет, я ошибся/ошиблась')
        markup.add(btn1, btn2)
        msg = bot.send_message(message.from_user.id, "Вы родитель/ученик?", reply_markup=markup)
        bot.register_next_step_handler(msg, confirmation_parent)

def confirmation_tr(message):
    if message.text == "Да всё верно":
        bot.send_message(my_id, f'Запрос на тренера от @{get_name(message)}')
        msg = bot.send_message(message.from_user.id, "В течение дня вам напишут для ручной верификации и выдадут пароль, в следующем сообщении введите пароль (пожалуйста, не вводите ничего кроме пароля)")
        bot.register_next_step_handler(msg, check_password)

    elif message.text == "Нет, я ошибся/ошиблась":
        start(message)

def confirmation_parent(message):
    if message.text == "Да всё верно":
        pass  # add your logic here for parent/child confirmation
    elif message.text == "Нет, я ошибся/ошиблась":
        start(message)

def check_password(message):
    global attempts
    if message.text != trainer_pass:
        attempts -= 1
        msg = bot.send_message(message.from_user.id, f"Неверный пароль, осталось(ась) {attempts} попытки(а)")
        bot.register_next_step_handler(msg, check_password)
    else:
        msg = bot.send_message(message.from_user.id, "Верный пароль, теперь введите ваше ФИО")
        bot.register_next_step_handler(msg, FIO_set)

def FIO_set(message):
    global FIO
    FIO = message.text
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    btn1 = types.KeyboardButton("Добавить соревнование")
    btn2 = types.KeyboardButton('Уникальный код для добавления учеников в вашу команду')
    markup.add(btn1, btn2)
    msg = bot.send_message(message.from_user.id, f"Здравствуйте, {FIO}", reply_markup=markup)
    bot.register_next_step_handler(msg, main_menu)

def main_menu(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    btn1 = types.KeyboardButton("Добавить соревнование")
    btn2 = types.KeyboardButton('Уникальный код для добавления учеников в вашу команду')
    markup.add(btn1, btn2)
    if message.text == 'Добавить соревнование':
        creating_compet(message)
    elif message.text == 'Уникальный код для добавления учеников в вашу команду':
        msg = bot.send_message(message.chat.id, f'Ваш код: {unic_code}')
        bot.register_next_step_handler(msg, main_menu)
    else:
        msg = bot.send_message(message.from_user.id, f"Такой функции нету")
        bot.register_next_step_handler(msg, main_menu)

def creating_compet(message):
    global dates, place
    if dates == '' and place == '':
        markup = types.InlineKeyboardMarkup(row_width=2)
        btn1 = types.InlineKeyboardButton("Дата и время", callback_data='dates')
        btn2 = types.InlineKeyboardButton("Место проведения", callback_data="place")
        markup.add(btn1, btn2)
        bot.send_message(message.from_user.id, f"Соревнование", reply_markup = markup)
    elif dates != '' and place != '':
        markup = types.InlineKeyboardMarkup(row_width=2)
        btn1 = types.InlineKeyboardButton(f"Дата и время({dates})", callback_data='dates')
        btn2 = types.InlineKeyboardButton(f"Место проведения({place})", callback_data="place")
        markup.add(btn1, btn2)
        bot.send_message(message.from_user.id, f"Соревнование", reply_markup = markup)
    elif dates != '' and place == '':
        markup = types.InlineKeyboardMarkup(row_width=2)
        btn1 = types.InlineKeyboardButton(f"Дата и время({dates})", callback_data='dates')
        btn2 = types.InlineKeyboardButton(f"Место проведения", callback_data="place")
        markup.add(btn1, btn2)
        bot.send_message(message.from_user.id, f"Соревнование", reply_markup = markup)
    elif dates == '' and place != '':
        markup = types.InlineKeyboardMarkup(row_width=2)
        btn1 = types.InlineKeyboardButton(f"Дата и время", callback_data='dates')
        btn2 = types.InlineKeyboardButton(f"Место проведения({place})", callback_data="place")
        markup.add(btn1, btn2)
        bot.send_message(message.from_user.id, f"Соревнование", reply_markup = markup)

@bot.callback_query_handler(func=lambda call: True)
def creating_compet_handle(call): 
    if call.data == 'dates':
        markup = types.InlineKeyboardMarkup(row_width=2)
        btn1 = types.InlineKeyboardButton("Назад", callback_data='back')
        markup.add(btn1)
        msg = bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=f"Напишите дату/даты проведения соревнований", reply_markup=markup)
        bot.register_callback_query_handler(msg, dates_set)

@bot.callback_query_handler(func=lambda call: True)
def dates_set(call):
    global dates
    print(call)
    if call.data == 'back':
        creating_compet(call.message)
    else:
        dates = call.message.text
        print(call)
        creating_compet(call.message)

if __name__ == "__main__":
    bot.polling(none_stop=True)


В целом в начале всё работает хорошо но после Creating_compet_handler должно выполняться Dates_set но это не так, ошибки никакой не выдает
  • Вопрос задан
  • 37 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы