集成help以及init到core内,修改baseplugin为plugin
This commit is contained in:
@@ -1,47 +0,0 @@
|
||||
import importlib
|
||||
import os
|
||||
import pkgutil
|
||||
import sys
|
||||
|
||||
|
||||
from core.command_manager import matcher
|
||||
|
||||
|
||||
def load_all_plugins():
|
||||
"""
|
||||
扫描并加载当前包下所有的插件(支持文件和文件夹)
|
||||
|
||||
该函数会遍历当前目录下的所有模块:
|
||||
1. 如果模块已加载,则执行 reload 操作(用于热重载)
|
||||
2. 如果模块未加载,则执行 import 操作
|
||||
|
||||
加载过程中会打印详细的日志信息。
|
||||
"""
|
||||
package_name = __package__
|
||||
package_path = [os.path.dirname(__file__)]
|
||||
|
||||
print(f" 正在从 {package_name} 加载插件...")
|
||||
|
||||
for loader, module_name, is_pkg in pkgutil.iter_modules(package_path):
|
||||
full_module_name = f"{package_name}.{module_name}"
|
||||
|
||||
try:
|
||||
if full_module_name in sys.modules:
|
||||
module = importlib.reload(sys.modules[full_module_name])
|
||||
action = "重载"
|
||||
else:
|
||||
module = importlib.import_module(full_module_name)
|
||||
action = "加载"
|
||||
|
||||
# 提取插件元数据
|
||||
if hasattr(module, "__plugin_meta__"):
|
||||
meta = getattr(module, "__plugin_meta__")
|
||||
matcher.plugins[full_module_name] = meta
|
||||
|
||||
type_str = "包" if is_pkg else "文件"
|
||||
print(f" [{type_str}] 成功{action}: {module_name}")
|
||||
except Exception as e:
|
||||
print(f" {action if 'action' in locals() else '加载'}插件 {module_name} 失败: {e}")
|
||||
|
||||
|
||||
load_all_plugins()
|
||||
@@ -1,46 +0,0 @@
|
||||
"""
|
||||
Echo 与交互插件
|
||||
|
||||
提供 /echo 和 /赞我 指令。
|
||||
"""
|
||||
from core.command_manager import matcher
|
||||
from core.bot import Bot
|
||||
from models import MessageEvent
|
||||
|
||||
__plugin_meta__ = {
|
||||
"name": "echo",
|
||||
"description": "提供 echo 和 赞我 功能",
|
||||
"usage": "/echo [内容] - 复读内容\n/赞我 - 让机器人给你点赞",
|
||||
}
|
||||
|
||||
@matcher.command("echo")
|
||||
async def handle_echo(bot: Bot, event: MessageEvent, args: list[str]):
|
||||
"""
|
||||
处理 echo 指令,原样回复用户输入的内容
|
||||
|
||||
:param bot: Bot 实例
|
||||
:param event: 消息事件对象
|
||||
:param args: 指令参数列表
|
||||
"""
|
||||
if not args:
|
||||
reply_msg = "请在指令后输入要回复的内容,例如:/echo 你好"
|
||||
else:
|
||||
reply_msg = " ".join(args)
|
||||
|
||||
await event.reply(reply_msg)
|
||||
|
||||
@matcher.command("赞我")
|
||||
async def handle_poke(bot: Bot, event: MessageEvent, args: list[str]):
|
||||
"""
|
||||
处理 赞我 指令,发送点赞
|
||||
|
||||
:param bot: Bot 实例
|
||||
:param event: 消息事件对象
|
||||
:param args: 指令参数列表(本指令不使用参数)
|
||||
"""
|
||||
try:
|
||||
# 尝试发送赞
|
||||
await bot.send_like(event.user_id, times=10)
|
||||
await event.reply("戳一戳发送成功!")
|
||||
except Exception as e:
|
||||
await event.reply(f"戳一戳发送失败:{str(e)}")
|
||||
@@ -1,34 +0,0 @@
|
||||
"""
|
||||
帮助插件
|
||||
|
||||
提供 /help 指令,用于展示所有已加载插件的帮助信息。
|
||||
"""
|
||||
from core.command_manager import matcher
|
||||
from models.events.message import MessageEvent
|
||||
|
||||
__plugin_meta__ = {
|
||||
"name": "帮助",
|
||||
"description": "显示所有可用指令的帮助信息",
|
||||
"usage": "/help",
|
||||
}
|
||||
|
||||
@matcher.command("help")
|
||||
async def help_command(bot, event: MessageEvent):
|
||||
"""
|
||||
处理 /help 指令,生成并发送帮助信息
|
||||
|
||||
:param bot: Bot 实例
|
||||
:param event: 消息事件对象
|
||||
"""
|
||||
help_text = "--- 可用指令列表 ---\n"
|
||||
|
||||
for plugin_name, meta in matcher.plugins.items():
|
||||
name = meta.get("name", "未命名插件")
|
||||
description = meta.get("description", "暂无描述")
|
||||
usage = meta.get("usage", "暂无用法说明")
|
||||
|
||||
help_text += f"\n{name} ({plugin_name}):\n"
|
||||
help_text += f" 功能: {description}\n"
|
||||
help_text += f" 用法: {usage}\n"
|
||||
|
||||
await bot.send(event, help_text.strip())
|
||||
Reference in New Issue
Block a user