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>
81 lines
2.0 KiB
Python
81 lines
2.0 KiB
Python
import importlib
|
|
import logging
|
|
from typing import Sequence, TYPE_CHECKING
|
|
|
|
from asyncirc.protocol import IrcProtocol
|
|
from irclib.parser import Message, Prefix
|
|
|
|
from .config import PluginConfig, ServerConfig
|
|
|
|
if TYPE_CHECKING:
|
|
from .bot import Bot
|
|
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
class Plugin:
|
|
def __init__(self, bot: "Bot", plugin_config: PluginConfig):
|
|
self.__plugin_config = plugin_config
|
|
self.__bot = bot
|
|
|
|
@property
|
|
def channels(self) -> Sequence[str]:
|
|
if "channels" in self.plugin_config:
|
|
return self.plugin_config["channels"]
|
|
else:
|
|
return self.server_config.channels
|
|
|
|
@property
|
|
def enabled(self) -> bool:
|
|
return self.plugin_config.get("enabled", True)
|
|
|
|
@property
|
|
def plugin_config(self) -> PluginConfig:
|
|
return self.__plugin_config
|
|
|
|
@property
|
|
def bot(self) -> "Bot":
|
|
return self.__bot
|
|
|
|
@property
|
|
def server_config(self) -> ServerConfig:
|
|
return self.bot.server_config
|
|
|
|
@property
|
|
def nick(self) -> str:
|
|
return self.server_config.nick
|
|
|
|
def send_to(self, conn: IrcProtocol, who: str, message: str):
|
|
message = Message(None, None, "PRIVMSG", who, message[:1024])
|
|
conn.send(str(message))
|
|
|
|
async def on_join(self, conn: IrcProtocol, channel: str, who: Prefix):
|
|
pass
|
|
|
|
async def on_part(self, conn: IrcProtocol, channel: str, who: Prefix):
|
|
pass
|
|
|
|
async def on_kick(self, conn: IrcProtocol, channel: str, who: Prefix):
|
|
pass
|
|
|
|
async def on_message(self, conn: IrcProtocol, channel: str, who: Prefix, line: str):
|
|
pass
|
|
|
|
async def on_load(self):
|
|
pass
|
|
|
|
async def on_connect(self, conn: IrcProtocol):
|
|
pass
|
|
|
|
async def on_unload(self, conn: IrcProtocol):
|
|
pass
|
|
|
|
|
|
def load_plugin(bot: "Bot", plugin_config: PluginConfig) -> Plugin:
|
|
name = plugin_config["module"]
|
|
log.info("Loading plugin %s", name)
|
|
plugin_module = importlib.import_module(name)
|
|
PluginType = plugin_module.PLUGIN_TYPE
|
|
return PluginType(bot, plugin_config)
|