Передача данных между функциями telegram bot

Учусь потихоньку писать на Пайтоне, решил начать с бота. Суть бота в том, что он собирает данные с Я.диска и выдает их в чате. Также парсит xls файлы, которые находятся в каждой папке и выдает информацию оттуда. Проблема, вероятно, довольно стандартная, я никак не могу придумать как сделать, чтобы несколько пользователей могли использовать разные наборы данных, которые собирает бот, т.к. сейчас при использовании несколькими пользователями данные заменяются и то что выбрал первый в итоге получает второй, не смотря на то, что у него должно быть другое.

Код жуткий, понимаю, буду приводить в порядок, как доделаю логику

    import datetime, asyncio, time, sqlite3, telebot, yadisk, xlrd, xlwt
from telebot import types
from xlutils.copy import copy
bot = telebot.TeleBot('token');
ya = yadisk.YaDisk(token="token")

print("Токен: ",ya.check_token())

class Orders(object):
    def __init__(self, text, works, files):
        self.text = {}
        self.works = {}
        self.files = {}
        
    def set_text(self, text):
        self.text = text


@bot.message_handler(content_types=['text'])
def start(message):
    text_d = get_disk()
    bot.send_message(
        chat_id = message.from_user.id,
        text=text_d['text'],
        reply_markup = menu())
        

def get_disk(): # Получаем заявки
    a = list(ya.listdir("/Производство/ЗАЯВКИ В РАБОТУ/ЗАЯВКИ В РАБОТЕ", fields = ['name', 'type', 'size', 'path']))
    text = ''
    dict = {}
    num = ''
    for i in range(len(a)):
        name = a[i].name
        text += '\U000027A1 ' + name + '\n'
        num = name[name.find("П"):name.find("П")+6]
        dict[num] = a[i].name
    dict['text'] = text
    return dict
    

def get_order(x): # Получаем файлы из заявки
    dir = list(ya.listdir("/Производство/ЗАЯВКИ В РАБОТУ/ЗАЯВКИ В РАБОТЕ/", fields = ['name', 'path']))
    order_path = ''
    c = 0
    p = 1
    for i in range(len(dir)):
        if x in dir[i].name:
            order_path = dir[i].path
    order = list(ya.listdir(order_path, fields = ['name', 'type', 'path', 'file']))
    for i in range(len(order)):
        print('iter: ', i, order[i].name)
        if order[i].name.find('.xls') >= 0:
            if c > 0:
                break
            c += 1
            print('xls: ', order[i].name)
            ya.download(order[i].path, order[i].name)
            text = parse_xls(order[i].name, order_path)
            files = Orders(text, {}, {})
            files.set_text(text)
            print(files.text)
        if order[i].name.find('.pdf') >= 0:
            ya.download(order[i].path, order[i].name)
            name = f"pdf{p}"
            files[name] = order[i].path
            p += 1
    print(files)
    return files
            
    
def parse_xls(xls, path):
    result = {}
    works = {}
    
    print('Parsing: ', xls)
    wb = xlrd.open_workbook(xls)
    sheet = wb.sheet_by_index(0)
    if xls[xls.find("П")+2:xls.find("П")+5] != ' - ':
        result['order'] = xls[xls.find("П"):xls.find("П")+6]
    else: 
        result['order'] = xls[xls.find("П"):xls.find("П")+2] + '-' + xls[xls.find("П")+5:xls.find("П")+8]
    result['manager'] = sheet.cell_value(1, 9)
    wrong_date = sheet.cell_value(5, 6)
    if (isinstance(wrong_date, str)):
        result['date'] = wrong_date
    else:
        y, m, d, h, i, s = xlrd.xldate_as_tuple(wrong_date, wb.datemode)
        result['date'] = "{0}.{1}.{2}".format(d, m, y)  
    result['customer'] = sheet.cell_value(3, 6)
    i = 15
    c = 1
    while True:
        item = []
        if type(sheet.cell_value(i, 7)) != float:
            break
        item.append(int(sheet.cell_value(i, 7)))
        if sheet.cell_value(i, 8) == 'X':
            item.append('8')
        elif sheet.cell_value(i, 9) == 'X':
            item.append('9')
        elif sheet.cell_value(i, 10) == 'X':
            item.append('10')
        elif sheet.cell_value(i, 11) == 'X':
            item.append('11')
        elif sheet.cell_value(i, 12) == 'X':
            item.append('12')
        item.append('')
        works[sheet.cell_value(i, 1)] = item
        c += 1
        i += 1
    result['works'] = works
    result['xls'] = xls
    result['xls_o'] = path
    return result
    
def write_xls(id, work, order): # Вносим данные в xls
    x = 8
    mark = 'X'
    if id == 'someid':
        xf = xlwt.easyxf('align: wrap on, vertical center, horizontal center;'
            'borders: left thin, right thin, top thin, bottom thin;'
            'pattern: pattern solid, pattern_fore_colour yellow, pattern_back_colour yellow'
            )
        x = 8 
    if id == 'someid':
        xf = xlwt.easyxf('align: wrap on, vertical center, horizontal center;'
            'borders: left thin, right thin, top thin, bottom thin;'
            'pattern: pattern solid, pattern_back_colour yellow'
            )
        x = 12
    wb = xlrd.open_workbook(order.text['xls'], formatting_info=True)
    xl = copy(wb)
    sheet = xl.get_sheet(0)
    sheet.write(15 + int(work), x, mark, xf)
    i = 15
    c = 1
    xl.save(order.text['xls'])
    ya.upload(order.text['xls'], order.text['xls_o'] + '/' + order.text['xls'], overwrite=True)
    
    
def order_mark(order): # Клавиатура для отметки в заказах
    keyboard = []
    keyrow = []
    c = 0
    r = 0
    for i in range(len(order.text['works'])):
        if c > 6:
            c = 0
            r += 1
            keyboard.append(keyrow)
            keyrow = []
        b = 'w|' + str(i)
        keyrow.append(types.InlineKeyboardButton(str(i+1), callback_data=b))
        c += 1;
    keyboard.append(keyrow)
    keyboard.append([types.InlineKeyboardButton('\U000021A9', callback_data='now')])
    markup = types.InlineKeyboardMarkup(keyboard)
    return markup
    

def order_menu(dict): # Клавиатура файлов заявки
    keyboard = []
    keyrow = []
    for i in dict.text:
        if i.startswith('pdf'):
            name_rew = dict[i][::-1]
            name = name_rew[name_rew.find("fdp."):name_rew.find("/")]
            name = name[::-1]
            keyrow.append(types.InlineKeyboardButton(f'{name}', callback_data='хуй'))
    keyrow.append(types.InlineKeyboardButton('Изделия', callback_data='w|r'))
    keyrow.append(types.InlineKeyboardButton('Отметить', callback_data='w|w'))
    keyboard.append(keyrow)
    keyboard.append([types.InlineKeyboardButton('\U000021A9', callback_data='now')])
    markup = types.InlineKeyboardMarkup(keyboard)
    return markup
    
    
def order_key(dict): # Клавиатура заявок
    keyboard = []
    keyrow = []
    r = 0;
    c = 0;
    for i in dict:
        if i == 'text':
            break
        elif c > 4:
            c = 0
            r += 1
            keyboard.append(keyrow)
            keyrow = []
        b = 'o|' + i
        keyrow.append(types.InlineKeyboardButton(i, callback_data=b))
        c += 1;
    keyboard.append(keyrow)
    keyboard.append([types.InlineKeyboardButton('\U000021A9', callback_data='now')])
    markup = types.InlineKeyboardMarkup(keyboard)
    return markup
    

def menu(): 
    keyboard = [
        [types.InlineKeyboardButton('Заявки', callback_data='now')]
        ]
    markup = types.InlineKeyboardMarkup(keyboard)
    return markup
    

@bot.callback_query_handler(func=lambda call: True)
def callback_worker(call):
    if call.data.startswith('o'):
        call_data, x = call.data.split('|')
        order = get_order(x)
    elif call.data.startswith('w'):
        call_data, x = call.data.split('|')
    else:
        call_data = call.data
    print(call.message.chat.id)
    user=call.message.chat.id
    msg = call.message
    if call_data == 'now':
        text_d = get_disk()
        bot.edit_message_text(
            chat_id=call.message.chat.id, 
            message_id=call.message.message_id,
            text=text_d['text'],
            parse_mode="HTML",
            reply_markup=order_key(get_disk()));
    elif call_data == 'o':
        icons = ['\U000027A1 ', '\U0001F468 ', '\U0001F4C5 ', '\U0001F464 ']
        text_o = ''
        c = 0
        print(order.text)
        for i in order.text:
            if i == 'works':
                break
            text_o += icons[c] + order.text[i] + '\n'
            c += 1
        bot.edit_message_text(
            chat_id=call.message.chat.id, 
            message_id=call.message.message_id,
            text= text_o,
            parse_mode="HTML",
            reply_markup=order_menu(order))
    elif call_data == 'w':
        icons = ['\U000027A1 ', '\U0000274C ', '\U00002705 ']
        order_t = icons[0] + order.text['order'] + '\n'
        works = order.text['works']
        text_w = order_t
        c = 1
        for i in works:
            icon = icons[1]
            if works[i][1] != '':
                icon = icons[2]
            text_w += icon + str(c) + '_' + i + ': ' + str(works[i][0]) + '\n'
            c += 1
        if x == 'w':
            bot.edit_message_text(
                chat_id=call.message.chat.id, 
                message_id=call.message.message_id,
                text=text_w,
                parse_mode="HTML",
                reply_markup=order_mark(order));
        elif x == 'r':
            bot.edit_message_text(
                chat_id=call.message.chat.id, 
                message_id=call.message.message_id,
                text=text_w,
                parse_mode="HTML",
                reply_markup=order_menu(order));
        else:
            write_xls(call.message.chat.id, x, order)
            order.text = parse_xls(order.text['xls'], order.text['xls_o'])
            bot.edit_message_text(
                chat_id=call.message.chat.id, 
                message_id=call.message.message_id,
                text=text_w,
                parse_mode="HTML",
                reply_markup=order_mark(order));

bot.polling(none_stop=True, interval=0)

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