mirror of
https://github.com/zhayujie/bot-on-anything.git
synced 2026-03-03 00:24:53 +08:00
增加插件功能,新增模型选择插件和生成图片插件
This commit is contained in:
41
plugins/plugin_manager.py
Normal file
41
plugins/plugin_manager.py
Normal file
@@ -0,0 +1,41 @@
|
||||
# encoding:utf-8
|
||||
import os
|
||||
import importlib.util
|
||||
from plugins.event import EventAction, EventContext,Event
|
||||
from plugins.plugin_registry import PluginRegistry
|
||||
from common import functions
|
||||
|
||||
@functions.singleton
|
||||
class PluginManager:
|
||||
def __init__(self, plugins_dir="./plugins/"):
|
||||
self.plugins_dir = plugins_dir
|
||||
self.plugin_registry = PluginRegistry()
|
||||
self.load_plugins()
|
||||
|
||||
def load_plugins(self):
|
||||
for plugin_name in self.find_plugin_names():
|
||||
if os.path.exists(f"./plugins/{plugin_name}/{plugin_name}.py"):
|
||||
plugin_module = self.load_plugin_module(plugin_name)
|
||||
self.plugin_registry.register_from_module(plugin_module)
|
||||
|
||||
def find_plugin_names(self):
|
||||
plugin_names = []
|
||||
for entry in os.scandir(self.plugins_dir):
|
||||
if entry.is_dir():
|
||||
plugin_names.append(entry.name)
|
||||
return plugin_names
|
||||
|
||||
def load_plugin_module(self, plugin_name):
|
||||
spec = importlib.util.spec_from_file_location(
|
||||
plugin_name, os.path.join(self.plugins_dir, plugin_name, f"{plugin_name}.py")
|
||||
)
|
||||
module = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(module)
|
||||
return module
|
||||
|
||||
def emit_event(self, e_context: EventContext, *args, **kwargs):
|
||||
for plugin in self.plugin_registry.list_plugins():
|
||||
if plugin.enabled and e_context.action == EventAction.CONTINUE:
|
||||
if(e_context.event in plugin.handlers):
|
||||
plugin.handlers[e_context.event](e_context, *args, **kwargs)
|
||||
return e_context
|
||||
Reference in New Issue
Block a user