Extensions are a method of separating your bot’s code into multiple files, which can be loaded and unloaded from the bot at any time. Extensions are hot-reloadable which means that they can be reloaded even while the bot is running.
Extension reloading using
BotApp.reload_extensions is atomic, meaning that if any stage of the unload or load
fails, then the code will be reverted to the last working state.
Creating an Extension#
All extension files must include a function
load in order for the bot to recognise it as an extension. You should
use the load function to add any commands or plugins to the bot that are present in that extension.
If you want to be able to unload and reload extensions, you must also include a function
unload which will be called
and should remove any commands or plugins from the bot that are present in the extension.
unload functions should take a single argument, which will be the
that the extension is being loaded into.
import lightbulb plugin = lightbulb.Plugin("ExamplePlugin") @plugin.command @lightbulb.command(...) @lightbulb.implements(...) async def foo(ctx): ... def load(bot): bot.add_plugin(plugin) def unload(bot): bot.remove_plugin(plugin)
After you have created an extension, you need to load it into the bot so that all the commands and/or plugins get
lightbulb.app.BotApp class provides three relevant methods to help with this:
In the example below we will be making use of
Example file structure:
example_project/ ├─ extensions/ │ ├─ __init__.py │ ├─ extension.py ├─ bot.py
To load the extension
extension.py from the main
bot.py file, you would call
BotApp.load_extensions with the
"extensions.extension" (the import path for that module).
bot.py file can be seen below:
import lightbulb bot = lightbulb.BotApp(...) bot.load_extensions("extensions.extension") bot.run()