Files
omnibot22/omnibot/plugin.py
Alek Ratzloff ffb2d4204e Move message size limit logic to base plugin
This is beneficial for all plugins so the bot doesn't accidentally
spam things because the plugin writer didn't check their inputs

Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
2022-05-23 21:11:04 -07:00

61 lines
1.7 KiB
Python

import importlib
import logging
from typing import Sequence
from asyncirc.protocol import IrcProtocol
from irclib.parser import Message, Prefix
from .config import PluginConfig, ServerConfig
log = logging.getLogger(__name__)
class Plugin:
def __init__(self, server_config: ServerConfig, plugin_config: PluginConfig):
self.__server_config = server_config
self.__plugin_config = plugin_config
@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 plugin_config(self) -> PluginConfig:
return self.__plugin_config
@property
def server_config(self) -> ServerConfig:
return self.__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
def load_plugin(server_config: ServerConfig, 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(server_config, plugin_config)