Работа бота на aiogram 3.0 с несколькими пользователями одновременно

Имеется небольшой бот на библиотеке aiogram 3.0, который должен авторизовать пользователя через другую библиотеку. Всё отлично работает с одним пользователем, но когда одновременно два пользователя пытаются залогиниться одному из них приходиться ждать окончания авторизации первого. Как можно сделать одновременное исполнение функций авторизации для нескольких пользователей сразу? Заранее спасибо за любую помощь!

main.py(файл запуска бота):

import asyncio
import logging
import sys

from aiogram import Bot, Dispatcher, Router, types
from aiogram.enums import ParseMode
from aiogram.types import Message

TOKEN = ''
dp = Dispatcher()
rt = Router()

from bot_modules import *

@dp.message()
async def info(message: types.Message):
  msg0=await message.reply('Неизвестная команда!')
  await asyncio.sleep(1)
  await message.delete()
  await msg0.delete()


async def main() -> None:
  logging.basicConfig(level=logging.INFO, stream=sys.stdout)
  bot = Bot(TOKEN, parse_mode=ParseMode.HTML)
  await bot.delete_webhook(drop_pending_updates=True)
  await dp.start_polling(bot)

if __name__ == "__main__":
  asyncio.run(main())

start.py(файл авторизации):

import asyncio
import logging
import sys

from aiogram import Bot, Dispatcher, Router, types
from aiogram.filters import CommandStart, Command, CommandObject
from aiogram.types import Message
from aiogram.methods import DeleteMessage
from aiogram.utils.markdown import hbold
from aiogram.fsm.state import StatesGroup, State
from aiogram.fsm.context import FSMContext
from aiogram.types import ReplyKeyboardRemove, ReplyKeyboardMarkup, KeyboardButton, InlineKeyboardMarkup, InlineKeyboardButton
from aiogram import F
from asgiref.sync import sync_to_async

import school_mos
from school_mos.errors import InvalidCredentialsError, RequestError

dp = Dispatcher()
rt = Router()

@dp.message(CommandStart())
async def start(message: Message) -> None:
  kb = [[types.KeyboardButton(text="АВТОРИЗАЦИЯ")]]
  keyboard = types.ReplyKeyboardMarkup(keyboard=kb, resize_keyboard=True)
  global msg1,msg2,msg3
  msg1=await message.answer(text="?")
  msg2=await message.answer(f"Привет, {hbold(message.from_user.full_name)}!")
  msg3=await message.answer(f"Для начала работы необходимо авторизоваться в системе.",reply_markup=keyboard)
  await message.delete()

class Auth(StatesGroup):
    login = State()
    password = State()

@dp.message(F.text == "ПОВТОРНАЯ АВТОРИЗАЦИЯ")
async def auth(message: types.Message, state: FSMContext) -> None:
    await state.set_state(Auth.login)
    global msg4
    msg4=await message.answer(text="Логин:",  reply_markup=types.ReplyKeyboardRemove())
    await message.delete()

@dp.message(F.text == "АВТОРИЗАЦИЯ")
async def auth(message: types.Message, state: FSMContext) -> None:
    await msg1.delete()
    await msg2.delete()
    await msg3.delete()
    await state.set_state(Auth.login)
    global msg4
    msg4=await message.answer(text="Логин:",  reply_markup=types.ReplyKeyboardRemove())
    await message.delete()

@dp.message(Auth.login)
async def process_login(message: Message, state: FSMContext) -> None:
    await msg4.delete()
    await state.update_data(login=message.text)
    await state.set_state(Auth.password)
    global msg5
    msg5=await message.answer('Пароль:')
    await message.delete()


@dp.message(Auth.password)
async def process_passwd(message: Message, state: FSMContext) -> None:
    await msg5.delete()
    await message.delete()
    await state.update_data(password=message.text)
    data = await state.get_data()
    await state.clear()
    await send_welcome(message=message, data=data)


async def send_welcome(message: Message, data) -> None:
    msg6=await message.answer(text="⌛️")
    msg7=await message.answer(text="Авторизация...")
    global user
    try:
        user = school_mos.AUTH(_login=data['login'], _password=data['password'])
        print(type(user))
        kb = [[types.KeyboardButton(text="РАСПИСАНИЕ")],[types.KeyboardButton(text="ДОМАШНИЕ ЗАДАНИЯ")],[types.KeyboardButton(text="ОЦЕНКИ")]]
        keyboard = types.ReplyKeyboardMarkup(keyboard=kb, resize_keyboard=True)
        await message.answer(text=hbold(f"Добро пожаловать в систему, {user.user_firstName} {user.user_lastName}."), reply_markup=keyboard)
        await msg6.delete()
        await msg7.delete()
    except InvalidCredentialsError:
        kb = [[types.KeyboardButton(text="ПОВТОРНАЯ АВТОРИЗАЦИЯ")]]
        keyboard = types.ReplyKeyboardMarkup(keyboard=kb, resize_keyboard=True)
        msg00=await message.answer(text="Неверные данные для авторизации! Попробуйте ещё раз!", reply_markup=keyboard)
        await msg6.delete()
        await msg7.delete()
        await asyncio.sleep(5)
        await msg00.delete()
    except RequestError:
        kb = [[types.KeyboardButton(text="ПОВТОРНАЯ АВТОРИЗАЦИЯ")]]
        keyboard = types.ReplyKeyboardMarkup(keyboard=kb, resize_keyboard=True)
        msg000=await message.answer(text="Не удается установить соединение! Попробуйте ещё раз!", reply_markup=keyboard)
        await msg6.delete()
        await msg7.delete()
        await asyncio.sleep(5)
        await msg000.delete()
    except Exception as e:
        print(e)

Структура бота выглядит так: Структура бота


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