mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-06 03:08:55 -05:00
[Downloader] Do the initialization in task to avoid timeout on bot startup (#3440)
* enhance(downloader): run init in task * chore(changelog): add towncrier entry * fix: address review
This commit is contained in:
parent
01c1fdfd16
commit
2a38777379
1
changelog.d/downloader/3415.bugfix.rst
Normal file
1
changelog.d/downloader/3415.bugfix.rst
Normal file
@ -0,0 +1 @@
|
||||
Downloader will now do the initialization in background to avoid timeout issues during bot startup.
|
||||
@ -3,5 +3,5 @@ from .downloader import Downloader
|
||||
|
||||
async def setup(bot):
|
||||
cog = Downloader(bot)
|
||||
await cog.initialize()
|
||||
bot.add_cog(cog)
|
||||
cog.create_init_task()
|
||||
|
||||
@ -53,6 +53,8 @@ class Downloader(commands.Cog):
|
||||
self._create_lib_folder()
|
||||
|
||||
self._repo_manager = RepoManager()
|
||||
self._ready = asyncio.Event()
|
||||
self._init_task = None
|
||||
|
||||
def _create_lib_folder(self, *, remove_first: bool = False) -> None:
|
||||
if remove_first:
|
||||
@ -62,9 +64,21 @@ class Downloader(commands.Cog):
|
||||
with self.SHAREDLIB_INIT.open(mode="w", encoding="utf-8") as _:
|
||||
pass
|
||||
|
||||
async def cog_before_invoke(self, ctx: commands.Context) -> None:
|
||||
async with ctx.typing():
|
||||
await self._ready.wait()
|
||||
|
||||
def cog_unload(self):
|
||||
if self._init_task is not None:
|
||||
self._init_task.cancel()
|
||||
|
||||
def create_init_task(self):
|
||||
self._init_task = asyncio.create_task(self.initialize())
|
||||
|
||||
async def initialize(self) -> None:
|
||||
await self._repo_manager.initialize()
|
||||
await self._maybe_update_config()
|
||||
self._ready.set()
|
||||
|
||||
async def _maybe_update_config(self) -> None:
|
||||
schema_version = await self.conf.schema_version()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user