Update Plugins to keep a reference to the Bot object instead of server_config

Plugins now use Bots instead of server_configs, this is useful for
checking the currently joined channels and perhaps using the connection
when there isn't one available in the current method.

Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
2022-05-30 17:03:28 -07:00
parent 9bed657f5f
commit 7b88d861fe
2 changed files with 16 additions and 10 deletions

View File

@@ -16,14 +16,13 @@ log = logging.getLogger(__name__)
class Bot: class Bot:
def __init__(self, server_config: ServerConfig): def __init__(self, server_config: ServerConfig):
self.__server_config = server_config self.__server_config = server_config
self.__channels: Set[str] = set()
self.__quitting = asyncio.Event()
self.__plugins = [ self.__plugins = [
plugin.load_plugin(server_config, config) plugin.load_plugin(self, config)
for config in server_config.plugins for config in server_config.plugins
if config.get("enabled", True) if config.get("enabled", True)
] ]
# TODO - this may not be needed
self.__channels: Set[str] = set()
self.__quitting = asyncio.Event()
@property @property
def server_config(self) -> ServerConfig: def server_config(self) -> ServerConfig:

View File

@@ -1,20 +1,23 @@
import importlib import importlib
import logging import logging
from typing import Sequence from typing import Sequence, TYPE_CHECKING
from asyncirc.protocol import IrcProtocol from asyncirc.protocol import IrcProtocol
from irclib.parser import Message, Prefix from irclib.parser import Message, Prefix
from .config import PluginConfig, ServerConfig from .config import PluginConfig, ServerConfig
if TYPE_CHECKING:
from .bot import Bot
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
class Plugin: class Plugin:
def __init__(self, server_config: ServerConfig, plugin_config: PluginConfig): def __init__(self, bot: "Bot", plugin_config: PluginConfig):
self.__server_config = server_config
self.__plugin_config = plugin_config self.__plugin_config = plugin_config
self.__bot = bot
@property @property
def channels(self) -> Sequence[str]: def channels(self) -> Sequence[str]:
@@ -31,9 +34,13 @@ class Plugin:
def plugin_config(self) -> PluginConfig: def plugin_config(self) -> PluginConfig:
return self.__plugin_config return self.__plugin_config
@property
def bot(self) -> "Bot":
return self.__bot
@property @property
def server_config(self) -> ServerConfig: def server_config(self) -> ServerConfig:
return self.__server_config return self.bot.server_config
@property @property
def nick(self) -> str: def nick(self) -> str:
@@ -65,9 +72,9 @@ class Plugin:
pass pass
def load_plugin(server_config: ServerConfig, plugin_config: PluginConfig) -> Plugin: def load_plugin(bot: "Bot", plugin_config: PluginConfig) -> Plugin:
name = plugin_config["module"] name = plugin_config["module"]
log.info("Loading plugin %s", name) log.info("Loading plugin %s", name)
plugin_module = importlib.import_module(name) plugin_module = importlib.import_module(name)
PluginType = plugin_module.PLUGIN_TYPE PluginType = plugin_module.PLUGIN_TYPE
return PluginType(server_config, plugin_config) return PluginType(bot, plugin_config)