Files
WechatHookBot/utils/plugin_base.py
2025-12-05 18:06:13 +08:00

57 lines
1.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from abc import ABC
from typing import List
from loguru import logger
from .decorators import scheduler, add_job_safe, remove_job_safe
class PluginBase(ABC):
"""插件基类"""
# 插件元数据
description: str = "暂无描述"
author: str = "未知"
version: str = "1.0.0"
# 插件依赖(填写依赖的插件类名列表)
# 例如: dependencies = ["MessageLogger", "AIChat"]
dependencies: List[str] = []
# 加载优先级数值越大越先加载默认50
# 基础插件设置高优先级,依赖其他插件的设置低优先级
load_priority: int = 50
def __init__(self):
self.enabled = False
self._scheduled_jobs = set()
async def on_enable(self, bot=None):
"""插件启用时调用"""
# 定时任务
for method_name in dir(self):
method = getattr(self, method_name)
if hasattr(method, '_is_scheduled'):
job_id = getattr(method, '_job_id')
trigger = getattr(method, '_schedule_trigger')
trigger_args = getattr(method, '_schedule_args')
add_job_safe(scheduler, job_id, method, bot, trigger, **trigger_args)
self._scheduled_jobs.add(job_id)
if self._scheduled_jobs:
logger.success("插件 {} 已加载定时任务: {}", self.__class__.__name__, self._scheduled_jobs)
async def on_disable(self):
"""插件禁用时调用"""
# 移除定时任务
for job_id in self._scheduled_jobs:
remove_job_safe(scheduler, job_id)
logger.info("已卸载定时任务: {}", self._scheduled_jobs)
self._scheduled_jobs.clear()
async def async_init(self):
"""插件异步初始化"""
return