Как запустить 2 декоратора одновременно?

Нужно чтобы одновременно работало 2 обработчика. От telebot get_text_messages(message): и telethon normal_handler(event).

В исходном коде ниже исправно работает только обработчик бота, так как он стоит первый, естественно второй обработчик не запустится пока первый не закончит свою работу.

Я не сведущий в потоках и асинхронности опробовал оба варианта и естественно ничего не заработало должным образом. Так как всё таки заставить работать их одновременно?

import os
import time, datetime
from telethon import TelegramClient, events
import json
import telebot
import sys

command = ["Чтобы посчитать часы за последний день: /Count_time_today",
"Чтобы получить часы за всё время введите: /Count_time_all",
"Чтобы получить часы за конкретный период введите даты по шаблону: /count dd.mm.yyyy-dd.mm.yyyy",
]


client = TelegramClient('SELF', api_id, api_hash)
bot = telebot.TeleBot(TOKEN)


def getid_dialog():
    """Возвращает id диалога"""
    for dialog in client.iter_dialogs():
        if dialog.name == "DataWork":
            return dialog.id

def is_time_full(arg):
        """Принимает строку типа '11:17-19:16'(str).
        Возвращает True если время записано в нужном виде"""
        try:
            arg = arg.replace('-',':')
        except:
            result = False
        arg = arg.split(':')
        if len(arg) == 4:
            for a in arg:
                if a.isdigit():
                    if (arg.index(a)+1)%2 != 0:
                        if int(a) <= 24:
                            return True
                    elif (arg.index(a)+1)%2 == 0:
                        if int(a) <= 59:
                            return True
                    else:
                        return False
                else:
                    return False      
        else:
            return False



def is_date(arg):
    try:
        datetime.datetime.strptime(arg, "%d.%m.%Y").date()
        return True
    except:
        return False
                    

def correct_message(message):
    """Принимает объект сообщения телеграм, а возвращает True если данные в норме"""
    mass = [False, False]
    if message.message != None:
        for i in message.message.split(" "):
                if is_time_full(i):
                    mass[0] = True
                elif is_date(i):
                    mass[1] = True
                else:
                    return False
        if ((mass == [True, True]) or (mass == [True, False])):
            return True
        else:
            return False
    else:
        return False


def right_note(message):
    """Принимает объект сообщения телеграм и определяет дату в тексте сообщения,
     возвращает новую структуру сообщения для записи в базу данных, где дата из текста сообщения
    заменяет дату объекта."""
    new_message = []
    new_date = False
    for i in message.message.split(" "):
        if is_date(i):
            new_date = datetime.datetime.strptime(i, "%d.%m.%Y").date().strftime('%Y-%m-%d')
        elif is_time_full(i):
            new_message.append(i)
    if not new_date:
        new_date = message.date.strftime('%Y-%m-%d')
    new_message = " ".join(new_message)
    minutes = count_time(new_message)
    return {"id":message.id, "message":new_message, "message_date":new_date, 'minutes':minutes}

        
def sorted_date_in_right_notes(mass_right_notes):
    return sorted(mass_right_notes,key=lambda x: x['message_date'])


extract = lambda x,y: x[x.index(y)]['message']

def count_time(arg):
    sum_min = 0
    for i in arg.split(' '):
        left = i.split('-')[0].split(':')
        right = i.split('-')[1].split(':')
        if int(right[0]) == 0:
            right[0] = '24'
        Left_minutes = int(left[0])*60+int(left[1])
        right_minutes = int(right[0])*60+int(right[1])
        difference_min = right_minutes - Left_minutes
        sum_min += difference_min
    return sum_min


path = os.path.join(os.path.split(os.path.abspath(__file__))[0],'DataWork.json')
client.start()
if not os.path.isfile(path):
    with open(path,'w', encoding='utf-8') as db:
        id_dialog = getid_dialog()
        mass_messages = []
        for message in client.iter_messages(id_dialog):
            if correct_message(message):
                mass_messages.insert(0, right_note(message))
        mass_messages = sorted_date_in_right_notes(mass_messages)
        json.dump(mass_messages, db)

@bot.message_handler(content_types=['text'])
def get_text_messages(message):
    if message.text == '/help':
        bot.send_message(439522950, "\n".join(command))
    elif message.text == "/Count_time_today":
        mass_messages = reopen_data(path)
        minutes = f"{mass_messages[-1]['minutes']//60}ч. {mass_messages[-1]['minutes']%60}мин."
        bot.send_message(439522950, minutes)
    elif message.text == "/Count_time_all":
        mass_messages = reopen_data(path)
        summ = 0
        for i in mass_messages:
            summ += int(i['minutes'])
        summ = f"{summ//60}ч. {summ%60}мин."
        bot.send_message(439522950, summ)
    elif message.text[:6] == '/count':
        mass_messages = reopen_data(path)
        period_date = message.text[6:].strip()
        left_date = period_date.split("-")[0]
        right_date = period_date.split("-")[1]
        try:    
            left_date = datetime.datetime.strptime(left_date, "%d.%m.%Y").date()
            right_date = datetime.datetime.strptime(right_date, "%d.%m.%Y").date()
        except:
            bot.send_message(439522950, "Не правильный формат ввода.")
        for i in mass_messages:
            if datetime.datetime.strptime(i['message_date'],"%Y-%m-%d").date() >= left_date:
                first_date = mass_messages.index(i)
                break

        for i in mass_messages:
            if datetime.datetime.strptime(i['message_date'],"%Y-%m-%d").date() >= right_date:
                second_date =  mass_messages.index(i)
                break
        
        new_mass_messages = mass_messages[first_date:second_date+1]
        summ = 0
        for i in new_mass_messages:
            summ += int(i['minutes'])
        summ = f"{summ//60}ч. {summ%60}мин."
        bot.send_message(439522950, summ)
bot.polling(none_stop=True, timeout=20)

@client.on(events.NewMessage(chats=getid_dialog()))
def normal_handler(event):
    if event.message.message == 'exit':
        exit() 
    if correct_message(event.message):
        with open(path,'r', encoding='utf-8') as db:
            mass_messages = json.load(db)
            mass_messages.append(right_note(event.message))


        with open(path, 'w', encoding="utf-8") as db:
            json.dump(mass_messages, db)
client.run_until_disconnected()```


Ответы (0 шт):