Почему тг бот не работает, когда запускается одна функция дважды?

Рейтинг: 0Ответов: 1Опубликовано: 26.07.2023

Пишу тг бота. Когда два юзера запускают функцию таймера, то бот перестает работать до того момента, пока работа функции не завершится.

@bot.callback_query_handler(func=lambda call: call.data == 'taxi')
def taxi(msg):
    from_id = msg.from_user.id 
    db = Database(from_id, bot)
    user = db.get_me()
    markup = types.InlineKeyboardMarkup(row_width=2)
    markup.add(types.InlineKeyboardButton('На своём авто', callback_data='jobs_in_my_car'),
        types.InlineKeyboardButton('На арендном авто', callback_data='jobs_in_rent_car')
        )
    keyboard = types.InlineKeyboardMarkup()
    keyboard.add(types.InlineKeyboardButton('На арендном авто', callback_data='jobs_in_rent_car'))
    if user['car'] >= 2:
        bot.edit_message_text('Вы можете работать на своём автомобиле или же на арендном.', msg.message.chat.id, msg.message.message_id, reply_markup=markup)
    else:
        bot.edit_message_text('Вы можете работать на арендном авто.', msg.message.chat.id, msg.message.message_id, reply_markup=keyboard)

@bot.callback_query_handler(func=lambda call: call.data == 'jobs_in_my_car')
def jobs_in_my_car(msg):
    from_id = msg.from_user.id
    db = Database(from_id, bot)
    timing = datetime.now() + timedelta(hours=1)
    db.get_end_time(timing.strftime('%H:%M'))
    user = db.get_me()
    timing = user['timer']
    text =  f'Вы вышли на смену\n'\
            f'Смена закончится в {timing}'
    bot.edit_message_text(text, msg.message.chat.id, msg.message.message_id)
    db.start_jobs_taxi()
    timer = function.timer()
    if timer == 1:
        bot.send_message(from_id, 'Смена окончена')
        db.end_jobs_taxi()
        db.get_wages_taxi()

Помогите пожалуйста.

UPD: from time import sleep

def timer():
    print('Cycle started...')
    global minutes, seconds 
    for minutes in range(0, -1, -1):
        for seconds in range(59, -1, -1):
            sleep(1)
    return 1

Ответы

▲ 0

Бот, написанный на библиотеке Telebot, не поддерживает асинхронность, а следовательно, одновременно им может пользоваться только один человек. Для того, чтобы избавиться от этой проблемы, нужно перейти на один из асинхронных фреймворков для работы с API Telegram, например Aiogram. При переходе на асинхронный фреймворк нужно обязательно переходить и на асинхронные библиотеки.