Data system refactor and core redesign for public.
Redesigned data and core systems to be public-capable.
This commit is contained in:
70
bot/LionModule.py
Normal file
70
bot/LionModule.py
Normal file
@@ -0,0 +1,70 @@
|
||||
from cmdClient import Command, Module
|
||||
|
||||
from meta import log
|
||||
|
||||
|
||||
class LionCommand(Command):
|
||||
"""
|
||||
Subclass to allow easy attachment of custom hooks and structure to commands.
|
||||
"""
|
||||
...
|
||||
|
||||
|
||||
class LionModule(Module):
|
||||
"""
|
||||
Custom module for Lion systems.
|
||||
|
||||
Adds command wrappers and various event handlers.
|
||||
"""
|
||||
name = "Base Lion Module"
|
||||
|
||||
def __init__(self, name, baseCommand=LionCommand):
|
||||
super().__init__(name, baseCommand)
|
||||
|
||||
self.unload_tasks = []
|
||||
|
||||
def unload_task(self, func):
|
||||
"""
|
||||
Decorator adding an unload task for deactivating the module.
|
||||
Should sync unsaved transactions and finalise user interaction.
|
||||
If possible, should also remove attached data and handlers.
|
||||
"""
|
||||
self.unload_tasks.append(func)
|
||||
log("Adding unload task '{}'.".format(func.__name__), context=self.name)
|
||||
return func
|
||||
|
||||
async def unload(self, client):
|
||||
"""
|
||||
Run the unloading tasks.
|
||||
"""
|
||||
log("Unloading module.", context=self.name, post=False)
|
||||
for task in self.unload_tasks:
|
||||
log("Running unload task '{}'".format(task.__name__),
|
||||
context=self.name, post=False)
|
||||
await task(client)
|
||||
|
||||
async def launch(self, client):
|
||||
"""
|
||||
Launch hook.
|
||||
Executed in `client.on_ready`.
|
||||
Must set `ready` to `True`, otherwise all commands will hang.
|
||||
Overrides the parent launcher to not post the log as a discord message.
|
||||
"""
|
||||
if not self.ready:
|
||||
log("Running launch tasks.", context=self.name, post=False)
|
||||
|
||||
for task in self.launch_tasks:
|
||||
log("Running launch task '{}'.".format(task.__name__),
|
||||
context=self.name, post=False)
|
||||
await task(client)
|
||||
|
||||
self.ready = True
|
||||
else:
|
||||
log("Already launched, skipping launch.", context=self.name, post=False)
|
||||
|
||||
async def pre_command(self, ctx):
|
||||
"""
|
||||
Lion pre-command hook.
|
||||
"""
|
||||
# TODO: Add blacklist and auto-fetch of lion here.
|
||||
...
|
||||
Reference in New Issue
Block a user