From ad8f7e761f443839f428f123a211e4f6f82edcd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=95=80=E9=93=AC=E9=85=B8=E9=92=BE?= <148796996+K2cr2O1@users.noreply.github.com> Date: Sun, 18 Jan 2026 21:07:01 +0800 Subject: [PATCH] Dev (#40) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 滚木 * feat: 重构核心架构,增强类型安全与插件管理 本次提交对核心模块进行了深度重构,引入 Pydantic 增强配置管理的类型安全性,并全面优化了插件管理系统。 主要变更详情: 1. 核心架构与配置 - 重构配置加载模块:引入 Pydantic 模型 (`core/config_models.py`),提供严格的配置项类型检查、验证及默认值管理。 - 统一模块结构:规范化模块导入路径,移除冗余的 `__init__.py` 文件,提升项目结构的清晰度。 - 性能优化:集成 Redis 缓存支持 (`RedisManager`),有效降低高频 API 调用开销,提升响应速度。 2. 插件系统升级 - 实现热重载机制:新增插件文件变更监听功能,支持开发过程中自动重载插件,提升开发效率。 - 优化生命周期管理:改进插件加载与卸载逻辑,支持精确卸载指定插件及其关联的命令、事件处理器和定时任务。 3. 功能特性增强 - 新增媒体 API:引入 `MediaAPI` 模块,封装图片、语音等富媒体资源的获取与处理接口。 - 完善权限体系:重构权限管理系统,实现管理员与操作员的分级控制,支持更细粒度的命令权限校验。 4. 代码质量与稳定性 - 全面类型修复:解决 `mypy` 静态类型检查发现的大量类型错误(包括 `CommandManager`、`EventFactory` 及 `Bot` API 签名不匹配问题)。 - 增强错误处理:优化消息处理管道的异常捕获机制,完善关键路径的日志记录,提升系统运行稳定性。 * feat: 添加测试用例并优化代码结构 refactor(permission_manager): 调整初始化顺序和逻辑 fix(admin_manager): 修复初始化逻辑和目录创建问题 feat(ws): 优化Bot实例初始化条件 feat(message): 增强MessageSegment功能并添加测试 feat(events): 支持字符串格式的消息解析 test: 添加核心功能测试用例 refactor(plugin_manager): 改进插件路径处理 style: 清理无用导入和代码 chore: 更新依赖项 * refactor(handler): 移除TYPE_CHECKING并直接导入Bot类 简化类型注解,直接导入Bot类而非使用TYPE_CHECKING条件导入,提高代码可读性和维护性 * fix(command_manager): 修复插件卸载时元信息移除不精确的问题 修复 CommandManager 中 unload_plugin 方法移除插件元信息时使用 startswith 导致可能误删其他插件的问题,改为精确匹配 同时调整相关测试用例验证精确匹配行为 * refactor: 清理未使用的导入和更新文档结构 docs: 添加config_models.py到项目结构文档 docs: 调整数据目录位置到core/data下 docs: 更新权限管理器文档描述 * 文档更新 * 更新thpic插件 支持一次返回多张图 * feat: 添加测试覆盖率并修复相关问题 refactor(redis_manager): 移除冗余的ConnectionError处理 refactor(event_handler): 优化Bot类型注解 refactor(factory): 移除未使用的GroupCardNoticeEvent test: 添加全面的单元测试覆盖 - 添加test_import.py测试模块导入 - 添加test_debug.py测试插件加载调试 - 添加test_plugin_error.py测试错误处理 - 添加test_config_loader.py测试配置加载 - 添加test_redis_manager.py测试Redis管理 - 添加test_bot.py测试Bot功能 - 扩展test_models.py测试消息模型 - 添加test_plugin_manager_coverage.py测试插件管理 - 添加test_executor.py测试代码执行器 - 添加test_ws.py测试WebSocket - 添加test_api.py测试API接口 - 添加test_core_managers.py测试核心管理模块 fix(plugin_manager): 修复插件加载日志变量问题 覆盖率已到达86%(忽略插件) * 更新/help指令,现在会发送图片 * feat(help): 重构帮助系统为图片渲染模式 添加浏览器管理器和图片管理器,用于通过 Playwright 渲染帮助菜单为图片 重构命令管理器以支持图片缓存和同步功能 添加 HTML 模板用于帮助菜单渲染 * build: 更新依赖文件 requirements.txt * build: 更新依赖文件 * feat: 添加性能优化和架构文档,更新依赖和核心模块 refactor(browser_manager): 实现页面池机制以提升性能 refactor(image_manager): 添加模板缓存并集成页面池 refactor(bili_parser): 迁移到异步HTTP请求并实现会话复用 docs: 新增性能优化、架构设计和最佳实践文档 chore: 更新requirements.txt添加新依赖 * docs: 更新文档内容并优化语言风格 重构所有文档内容,使用更简洁直接的语言风格 更新架构、插件开发、部署等核心文档 优化代码示例和图表说明 统一术语和格式规范 * docs: 更新文档内容,简化语言并修正格式 - 简化插件开发指南中的描述,移除冗余内容 - 调整部署文档中的Python版本说明 - 优化最佳实践文档的措辞和格式 - 更新性能优化文档,删除不准确的数据 - 重构核心概念文档,使用更简洁的语言 - 修正README中的项目描述和技术栈说明 - 更新快速上手文档,简化安装步骤 - 调整事件流转文档的描述方式 - 简化架构文档内容 - 更新指令处理文档,添加参数注入示例 - 优化单例管理器文档的表述 * refactor(core): 优化权限管理和事件模型 - 重构 AdminManager 和 PermissionManager 以 Redis 为主要数据源 - 为所有事件模型添加 slots=True 提升性能 - 更新文档说明 Mypyc 编译注意事项 - 清理测试和调试文件 - 移动静态资源到 web_static 目录 * feat: 添加模块编译脚本和导出依赖功能 refactor(events): 移除数据类的slots参数以提升兼容性 build: 更新requirements.txt依赖列表 * docs: 更新性能优化文档并修复命令管理器帮助输出 更新性能优化相关文档,详细说明 Python 3.14 JIT 编译器的使用方法和原理,补充与 Mypyc 的互补策略。同时修复命令管理器中帮助信息的输出方式,移除图片发送仅保留文本输出。 调整部署文档结构,明确两种性能优化方案(AOT 和 JIT)的配置方法和适用场景。完善架构文档中关于 JIT 的原理和启用方式说明。 * feat(help): 重构帮助菜单界面并优化样式 refactor(bili_parser): 修复 API 响应 content-type 问题 fix(command_manager): 添加帮助图片获取的错误处理 docs(deployment): 简化部署文档并移除 JIT 相关内容 * feat: 新增自动同意请求插件和API文档 docs: 更新文档结构和内容 * refactor(scripts): 重构并优化脚本文件结构 feat(scripts): 添加Python环境检查脚本 feat(scripts): 增强依赖导出脚本功能 perf(plugins/bili_parser): 优化B站解析器性能和代码结构 style(plugins/bili_parser): 统一代码风格和常量命名 --------- Co-authored-by: baby20162016 <2185823427@qq.com> --- core/data/temp/help_menu.png | Bin 118331 -> 150898 bytes core/managers/command_manager.py | 24 +- docs/api/account.md | 398 +++++++++++++++++++++++ docs/api/base.md | 130 ++++++++ docs/api/friend.md | 273 ++++++++++++++++ docs/api/group.md | 506 +++++++++++++++++++++++++++++ docs/api/index.md | 61 ++++ docs/api/media.md | 259 +++++++++++++++ docs/api/message.md | 309 ++++++++++++++++++ docs/core-concepts/architecture.md | 5 +- docs/core-concepts/performance.md | 34 +- docs/index.md | 10 +- import sys.py | 16 - plugins/auto_approve.py | 53 +++ plugins/bili_parser.py | 86 +++-- scripts/check_python_env.py | 104 ++++++ scripts/compile_machine_code.py | 303 +++++++++++++++++ scripts/compile_modules.py | 75 +++++ scripts/export_requirements.py | 137 ++++++++ templates/help.html | 265 ++++++++++----- x = 5.py | 10 - 21 files changed, 2903 insertions(+), 155 deletions(-) create mode 100644 docs/api/account.md create mode 100644 docs/api/base.md create mode 100644 docs/api/friend.md create mode 100644 docs/api/group.md create mode 100644 docs/api/index.md create mode 100644 docs/api/media.md create mode 100644 docs/api/message.md delete mode 100644 import sys.py create mode 100644 plugins/auto_approve.py create mode 100644 scripts/check_python_env.py create mode 100644 scripts/compile_machine_code.py create mode 100644 scripts/compile_modules.py create mode 100644 scripts/export_requirements.py delete mode 100644 x = 5.py diff --git a/core/data/temp/help_menu.png b/core/data/temp/help_menu.png index 77500443bb818b13e1d5cc456fac08629dcc33c3..f5e82c058530eeea8369d6abcce3106c14f82dd9 100644 GIT binary patch literal 150898 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 OT{pG5T4i!4?%x2XlaTNL diff --git a/core/managers/command_manager.py b/core/managers/command_manager.py index 43d9091..e79e80f 100644 --- a/core/managers/command_manager.py +++ b/core/managers/command_manager.py @@ -202,17 +202,20 @@ class CommandManager: 内置的 `/help` 命令的实现。 直接从 Redis 获取缓存的图片。 """ - # 1. 尝试从 Redis 获取 - help_pic = await redis_manager.get("neobot:core:help_pic") - - if not help_pic: - await bot.send(event, "帮助图片缓存缺失,正在重新生成...") - await self.sync_help_pic() + try: + # 1. 尝试从 Redis 获取 help_pic = await redis_manager.get("neobot:core:help_pic") - if help_pic: - await bot.send(event, MessageSegment.image(help_pic)) - return + if not help_pic: + await bot.send(event, "帮助图片缓存缺失,正在重新生成...") + await self.sync_help_pic() + help_pic = await redis_manager.get("neobot:core:help_pic") + + if help_pic: + await bot.send(event, MessageSegment.image(help_pic)) + return + except Exception as e: + logger.error(f"获取或生成帮助图片失败: {e}") # 2. 最后的兜底:发送纯文本 help_text = "--- 可用指令列表 ---\n" @@ -225,8 +228,7 @@ class CommandManager: help_text += f" 功能: {description}\n" help_text += f" 用法: {usage}\n" - await bot.send(event, MessageSegment.image(help_pic)) - # await bot.send(event, help_text.strip()) + await bot.send(event, help_text.strip()) # 实例化全局唯一的命令管理器 diff --git a/docs/api/account.md b/docs/api/account.md new file mode 100644 index 0000000..aa3e4e6 --- /dev/null +++ b/docs/api/account.md @@ -0,0 +1,398 @@ +# 账号 API + +这一页讲的是怎么管理机器人自己的账号:查看登录信息、设置在线状态、修改资料、退出登录等等。这些都是跟机器人自身相关的操作。 + +## 账号信息 + +### `get_login_info` - 获取登录信息 + +```python +async def get_login_info(self, no_cache: bool = False) -> LoginInfo +``` + +获取当前登录的机器人账号信息。默认会缓存 1 小时。 + +**参数:** +- `no_cache`: 是否跳过缓存,直接从服务器获取 + +**返回值:** +- `LoginInfo`: 登录信息对象 + +**示例:** +```python +info = await bot.get_login_info() +print(f"机器人QQ号: {info.user_id}") +print(f"机器人昵称: {info.nickname}") +``` + +`LoginInfo` 对象包含: +- `user_id`: 机器人 QQ 号 +- `nickname`: 机器人昵称 + +### `get_version_info` - 获取版本信息 + +```python +async def get_version_info(self) -> VersionInfo +``` + +获取 OneBot v11 实现的版本信息(比如 NapCatQQ 的版本)。 + +**返回值:** +- `VersionInfo`: 版本信息对象 + +**示例:** +```python +version = await bot.get_version_info() +print(f"客户端: {version.app_name}") +print(f"版本: {version.app_version}") +print(f"OneBot 协议版本: {version.protocol_version}") +``` + +`VersionInfo` 对象包含: +- `app_name`: 客户端名称(如 "NapCatQQ") +- `app_version`: 客户端版本 +- `protocol_version`: 支持的 OneBot 协议版本 + +### `get_status` - 获取运行状态 + +```python +async def get_status(self) -> Status +``` + +获取 OneBot 实现的运行状态信息。 + +**返回值:** +- `Status`: 状态信息对象 + +**示例:** +```python +status = await bot.get_status() +print(f"在线: {status.online}") +print(f"状态: {status.status}") +print(f"正常: {status.good}") +``` + +`Status` 对象包含: +- `online`: 是否在线 +- `status`: 状态描述 +- `good`: 运行是否正常 + +## 状态设置 + +### `set_self_longnick` - 设置个性签名 + +```python +async def set_self_longnick(self, long_nick: str) -> Dict[str, Any] +``` + +设置机器人账号的个性签名(QQ 资料里的那个长签名)。 + +**参数:** +- `long_nick`: 要设置的个性签名内容 + +**示例:** +```python +@matcher.command("setsign") +async def handle_setsign(event: MessageEvent, args: str): + if not args: + await event.reply("需要签名内容") + return + + await event.bot.set_self_longnick(args) + await event.reply("个性签名已更新") +``` + +### `set_online_status` - 设置在线状态 + +```python +async def set_online_status(self, status_code: int) -> Dict[str, Any] +``` + +设置机器人的在线状态(在线、离开、忙碌等)。 + +**参数:** +- `status_code`: 状态码 + - `1`: 在线 + - `2`: 离开 + - `3`: 忙碌 + - `4`: 请勿打扰 + - `5`: 隐身 + - 其他值取决于客户端支持 + +**示例:** +```python +# 设置为隐身 +await bot.set_online_status(5) +``` + +### `set_diy_online_status` - 设置自定义在线状态 + +```python +async def set_diy_online_status( + self, + face_id: int, + face_type: int, + wording: str +) -> Dict[str, Any] +``` + +设置自定义的在线状态(需要客户端支持)。 + +**参数:** +- `face_id`: 状态表情 ID +- `face_type`: 状态表情类型 +- `wording`: 状态描述文本 + +**示例:** +```python +# 设置为"摸鱼中" +await bot.set_diy_online_status( + face_id=100, + face_type=1, + wording="摸鱼中" +) +``` + +### `set_input_status` - 设置"正在输入"状态 + +```python +async def set_input_status( + self, + user_id: int, + event_type: int +) -> Dict[str, Any] +``` + +向指定用户显示"对方正在输入..."的状态提示。 + +**参数:** +- `user_id`: 目标用户的 QQ 号 +- `event_type`: 事件类型(具体含义取决于客户端) + +**示例:** +```python +# 向某个用户显示"正在输入" +await bot.set_input_status(123456, 1) +``` + +## 资料修改 + +### `set_qq_profile` - 设置个人资料 + +```python +async def set_qq_profile(self, **kwargs) -> Dict[str, Any] +``` + +设置机器人账号的个人资料。 + +**参数:** +- `**kwargs`: 个人资料的相关参数,具体字段请参考 OneBot v11 规范 + +**示例:** +```python +# 修改昵称 +await bot.set_qq_profile(nickname="新的昵称") + +# 修改多个字段 +await bot.set_qq_profile( + nickname="新昵称", + sex="female", + age=18, + level=50 +) +``` + +### `set_qq_avatar` - 设置头像 + +```python +async def set_qq_avatar(self, **kwargs) -> Dict[str, Any] +``` + +设置机器人账号的头像。 + +**参数:** +- `**kwargs`: 头像的相关参数,具体字段请参考 OneBot v11 规范 + +**示例:** +```python +# 设置头像(具体参数格式取决于客户端) +await bot.set_qq_avatar(file="path/to/avatar.jpg") +``` + +## 系统操作 + +### `bot_exit` - 退出登录 + +```python +async def bot_exit(self) -> Dict[str, Any] +``` + +让机器人进程退出(需要客户端支持)。谨慎使用! + +**示例:** +```python +@matcher.command("shutdown", permission="admin") +async def handle_shutdown(event: MessageEvent): + await event.reply("机器人正在退出...") + await event.bot.bot_exit() +``` + +### `clean_cache` - 清理缓存 + +```python +async def clean_cache(self) -> Dict[str, Any] +``` + +清理 OneBot 客户端的缓存。 + +**示例:** +```python +@matcher.command("clearcache", permission="admin") +async def handle_clearcache(event: MessageEvent): + await event.bot.clean_cache() + await event.reply("缓存已清理") +``` + +### `get_clientkey` - 获取客户端密钥 + +```python +async def get_clientkey(self) -> Dict[str, Any] +``` + +获取客户端密钥(通常用于 QQ 登录相关操作)。 + +**返回值:** +- 包含客户端密钥的字典 + +## 实用示例 + +### 机器人状态查询插件 + +```python +@matcher.command("status") +async def handle_status(event: MessageEvent): + # 获取各种信息 + login_info = await event.bot.get_login_info() + version_info = await event.bot.get_version_info() + status_info = await event.bot.get_status() + + # 构建状态消息 + msg = "🤖 机器人状态\n" + msg += f"QQ号: {login_info.user_id}\n" + msg += f"昵称: {login_info.nickname}\n" + msg += f"客户端: {version_info.app_name} v{version_info.app_version}\n" + msg += f"协议: OneBot v{version_info.protocol_version}\n" + msg += f"状态: {'在线' if status_info.online else '离线'}\n" + msg += f"运行: {'正常' if status_info.good else '异常'}" + + await event.reply(msg) +``` + +### 自动切换状态 + +```python +import asyncio +from datetime import datetime + +async def auto_status_scheduler(bot): + """ + 定时自动切换状态 + """ + while True: + now = datetime.now().hour + + if 9 <= now < 18: + # 工作时间:在线 + await bot.set_online_status(1) + status_text = "工作中" + elif 18 <= now < 22: + # 晚上:离开 + await bot.set_online_status(2) + status_text = "休息中" + else: + # 深夜:隐身 + await bot.set_online_status(5) + status_text = "睡眠模式" + + # 设置个性签名 + await bot.set_self_longnick(f"当前状态: {status_text} | 最后更新: {datetime.now():%H:%M}") + + # 每小时更新一次 + await asyncio.sleep(3600) + +# 在初始化插件时启动 +# (注意:这只是一个示例,实际使用需要考虑插件生命周期) +``` + +### 资料备份与恢复 + +```python +import json + +@matcher.command("backupprofile", permission="admin") +async def handle_backup_profile(event: MessageEvent): + """ + 备份当前资料到文件 + """ + # 获取当前登录信息 + login_info = await event.bot.get_login_info() + + # 构建备份数据 + backup_data = { + "user_id": login_info.user_id, + "nickname": login_info.nickname, + "backup_time": datetime.now().isoformat() + } + + # 保存到文件 + filename = f"profile_backup_{login_info.user_id}.json" + with open(filename, "w", encoding="utf-8") as f: + json.dump(backup_data, f, ensure_ascii=False, indent=2) + + await event.reply(f"资料已备份到 {filename}") + +@matcher.command("restoreprofile", permission="admin") +async def handle_restore_profile(event: MessageEvent, args: str): + """ + 从备份恢复资料 + """ + if not args: + await event.reply("需要备份文件名") + return + + try: + with open(args, "r", encoding="utf-8") as f: + backup_data = json.load(f) + + # 恢复资料(这里只是示例,实际可能需要更多字段) + await event.bot.set_qq_profile( + nickname=backup_data.get("nickname", "") + ) + + await event.reply("资料已恢复") + except Exception as e: + await event.reply(f"恢复失败: {e}") +``` + +## 注意事项 + +1. **权限**: 修改资料、退出登录等操作通常需要机器人有相应权限。 +2. **频率限制**: 不要频繁修改资料或状态,可能被限制。 +3. **客户端支持**: 不是所有 OneBot 客户端都支持全部 API,使用前最好测试一下。 +4. **谨慎操作**: `bot_exit` 会让机器人下线,谨慎使用。 + +## 重复的方法 + +`AccountAPI` 中还包含了一些与好友、群组相关的方法,这些方法在其他模块中也有定义: + +- `get_stranger_info()`: 同 [好友 API](./friend.md#get_stranger_info---获取陌生人信息) +- `get_friend_list()`: 同 [好友 API](./friend.md#get_friend_list---获取好友列表) +- `get_group_list()`: 同 [群组 API](./group.md#get_group_list---获取群列表) + +这些方法在 `AccountAPI` 中的实现可能略有不同(比如缓存逻辑),但功能相同。建议使用对应模块中的版本,因为那些是专门为该功能设计的。 + +## 下一步 + +- [好友 API](./friend.md): 管理好友相关功能 +- [群组 API](./group.md): 管理群聊相关功能 +- [消息 API](./message.md): 怎么发消息、撤回消息 \ No newline at end of file diff --git a/docs/api/base.md b/docs/api/base.md new file mode 100644 index 0000000..8a3a111 --- /dev/null +++ b/docs/api/base.md @@ -0,0 +1,130 @@ +# API 基础 + +这一页讲的是 NEO Bot 里 API 调用的底层原理。如果你只是写插件发消息,可以直接跳过这页,去看 [消息 API](./message.md)。 + +但如果你想了解背后发生了什么,或者想自己封装一些高级功能,那这里的信息会帮到你。 + +## API 调用流程 + +简单来说,当你调用 `bot.send_group_msg()` 时: + +1. **你的插件** → `bot.send_group_msg(123456, "hello")` +2. **Bot 类** → 把它打包成 OneBot 标准的 JSON +3. **WebSocket** → 通过 `ws.py` 发给 NapCatQQ(或其他 OneBot 实现) +4. **OneBot 实现** → 收到请求,真的把消息发到 QQ 群里 +5. **响应返回** → 原路返回,告诉 Bot “消息发送成功” + +整个过程是异步的,所以你要用 `await`。 + +## call_api 方法 + +所有 API 最终都会调用 `BaseAPI.call_api()` 方法。这是最底层的接口: + +```python +async def call_api(self, action: str, params: Optional[Dict[str, Any]] = None) -> Any: +``` + +- `action`: API 动作名,比如 `"send_group_msg"`、`"get_login_info"` +- `params`: 参数字典,比如 `{"group_id": 123456, "message": "hello"}` + +### 返回值 + +`call_api` 返回的是 OneBot 响应中的 `data` 字段。如果 API 调用失败(返回 `{"status": "failed", ...}`),它会记录一条警告日志,但**不会抛出异常**(除非网络错误)。 + +这样设计是为了让插件能更灵活地处理失败情况。比如: + +```python +try: + result = await bot.call_api("send_group_msg", {"group_id": 123456, "message": "test"}) + if result is None: + print("API 调用失败,但没抛异常") +except Exception as e: + print(f"网络或底层错误: {e}") +``` + +## 响应格式 + +OneBot v11 的标准响应格式是: + +```json +{ + "status": "ok", + "retcode": 0, + "data": { ... }, + "message": "", + "echo": "请求时的 echo 值(如果有)" +} +``` + +- `status`: `"ok"` 或 `"failed"` +- `retcode`: 状态码,0 表示成功 +- `data`: 真正的返回数据 +- `message`: 错误信息(失败时) +- `echo`: 用来匹配请求和响应的标识(WebSocket 用) + +NEO Bot 的 `call_api` 方法会自动提取 `data` 字段返回给你。如果 `status` 是 `"failed"`,它会在日志里记录警告,但依然返回 `data`(通常是 `None` 或空字典)。 + +## 错误处理 + +API 调用可能因为各种原因失败: + +1. **网络问题**: WebSocket 断开、超时 +2. **权限不足**: 机器人不是管理员却想踢人 +3. **参数错误**: 群号不存在、消息太长 +4. **客户端不支持**: 某些 OneBot 实现可能没实现某些 API + +建议在插件里做好错误处理: + +```python +@matcher.command("kick") +async def handle_kick(event: MessageEvent, args: str): + target_id = int(args) if args.isdigit() else 0 + if not target_id: + await event.reply("参数错误,需要 QQ 号") + return + + try: + result = await event.bot.set_group_kick(event.group_id, target_id) + if result.get("status") == "failed": + await event.reply(f"踢人失败: {result.get('message', '未知错误')}") + else: + await event.reply("踢人成功") + except Exception as e: + await event.reply(f"网络错误: {e}") +``` + +## 直接调用 vs 高级封装 + +NEO Bot 提供了两种调用 API 的方式: + +### 1. 直接调用 `call_api` + +```python +await bot.call_api("send_group_msg", {"group_id": 123456, "message": "hello"}) +``` + +**什么时候用?** +- 你想调用的 API 没有被封装成独立方法(很少见) +- 你在调试,想看看原始请求和响应 +- 你在写框架代码,需要动态生成 action 名 + +### 2. 使用封装好的方法 + +```python +await bot.send_group_msg(123456, "hello") +``` + +**这是推荐的方式**,因为: +- 有类型提示,编辑器能帮你补全 +- 参数有文档,不用去查 OneBot 标准 +- 有些方法有额外逻辑(比如缓存、参数转换) + +## 下一步 + +现在你了解了 API 调用的基础。接下来可以去看看具体的 API 类别: + +- [消息 API](./message.md): 最常用,先看这个 +- [群组 API](./group.md): 管理群聊 +- [好友 API](./friend.md): 好友相关操作 +- [账号 API](./account.md): 机器人自身状态 +- [媒体 API](./media.md): 图片、语音 \ No newline at end of file diff --git a/docs/api/friend.md b/docs/api/friend.md new file mode 100644 index 0000000..4925d2a --- /dev/null +++ b/docs/api/friend.md @@ -0,0 +1,273 @@ +# 好友 API + +这一页讲的是怎么管理好友:获取好友列表、给好友点赞、处理加好友请求,还有获取陌生人信息。 + +## 好友列表 + +### `get_friend_list` - 获取好友列表 + +```python +async def get_friend_list(self, no_cache: bool = False) -> List[FriendInfo] +``` + +获取机器人账号的所有好友列表。默认会缓存 1 小时。 + +**参数:** +- `no_cache`: 是否跳过缓存,直接从服务器获取最新列表 + +**返回值:** +- `List[FriendInfo]`: 好友信息对象列表 + +**示例:** +```python +friends = await bot.get_friend_list() +print(f"我有 {len(friends)} 个好友") +for friend in friends: + print(f"{friend.user_id}: {friend.nickname} (备注: {friend.remark})") +``` + +`FriendInfo` 对象包含以下字段: +- `user_id`: QQ 号 +- `nickname`: 昵称 +- `remark`: 备注(你给好友设置的备注名) +- 其他可能的信息字段 + +## 陌生人信息 + +### `get_stranger_info` - 获取陌生人信息 + +```python +async def get_stranger_info( + self, + user_id: int, + no_cache: bool = False +) -> StrangerInfo +``` + +获取非好友的 QQ 用户信息。默认会缓存 1 小时。 + +**参数:** +- `user_id`: 目标用户的 QQ 号 +- `no_cache`: 是否跳过缓存 + +**返回值:** +- `StrangerInfo`: 陌生人信息对象 + +**示例:** +```python +@matcher.command("who") +async def handle_who(event: MessageEvent, args: str): + if not args.isdigit(): + await event.reply("参数错误,需要 QQ 号") + return + + target_id = int(args) + info = await event.bot.get_stranger_info(target_id) + + msg = f"用户 {target_id} 的信息:\n" + msg += f"昵称: {info.nickname}\n" + msg += f"性别: {info.sex}\n" + msg += f"年龄: {info.age}\n" + msg += f"等级: {info.level}" + + await event.reply(msg) +``` + +`StrangerInfo` 对象包含以下字段: +- `user_id`: QQ 号 +- `nickname`: 昵称 +- `sex`: 性别(`male`/`female`/`unknown`) +- `age`: 年龄 +- `level`: QQ 等级 +- 其他可能的信息字段 + +## 互动功能 + +### `send_like` - 发送点赞(戳一戳) + +```python +async def send_like( + self, + user_id: int, + times: int = 1 +) -> Dict[str, Any] +``` + +给指定用户发送"戳一戳"(点赞)。每天有次数限制,建议不要超过 10 次。 + +**参数:** +- `user_id`: 目标用户的 QQ 号 +- `times`: 点赞次数,建议 1-10 次 + +**示例:** +```python +@matcher.command("like") +async def handle_like(event: MessageEvent, args: str): + # 给发送者点赞 + await event.bot.send_like(event.user_id, times=1) + await event.reply("给你点了个赞!") + + # 如果提供了参数,给指定用户点赞 + if args.isdigit(): + target_id = int(args) + await event.bot.send_like(target_id, times=1) + await event.reply(f"给 {target_id} 点了个赞!") +``` + +**注意:** +- 不是所有 OneBot 实现都支持这个 API +- 有每日次数限制,不要滥用 +- 对方可能关闭了"戳一戳"功能,这时会失败 + +## 加好友请求处理 + +### `set_friend_add_request` - 处理加好友请求 + +```python +async def set_friend_add_request( + self, + flag: str, + approve: bool = True, + remark: str = "" +) -> Dict[str, Any] +``` + +处理收到的加好友请求。需要在 `request` 事件中调用。 + +**参数:** +- `flag`: 请求标识,从 `request` 事件的 `flag` 字段获取 +- `approve`: 是否同意,`True` 同意,`False` 拒绝 +- `remark`: 同意请求时,为该好友设置的备注(可选) + +**示例:** +```python +from models.events.request import RequestEvent +from core.managers.command_manager import matcher + +# 处理所有加好友请求 +@matcher.on_event(RequestEvent) +async def handle_friend_request(event: RequestEvent): + if event.request_type == "friend": + # 自动同意并设置备注 + await event.bot.set_friend_add_request( + flag=event.flag, + approve=True, + remark=f"自动添加-{event.user_id}" + ) + + # 给新好友发个欢迎消息 + await event.bot.send_private_msg( + event.user_id, + "你好!我是机器人,已自动通过你的好友请求。" + ) +``` + +## 实用示例 + +### 好友信息查询插件 + +```python +@matcher.command("friendinfo") +async def handle_friendinfo(event: MessageEvent): + # 获取好友列表 + friends = await event.bot.get_friend_list() + + # 按备注名排序 + sorted_friends = sorted(friends, key=lambda f: f.remark or f.nickname) + + # 生成好友列表消息 + if len(sorted_friends) > 50: + msg = f"好友太多啦,只显示前50个(共{len(sorted_friends)}个)\n" + sorted_friends = sorted_friends[:50] + else: + msg = f"我的好友列表(共{len(sorted_friends)}个):\n" + + for i, friend in enumerate(sorted_friends, 1): + remark_display = friend.remark if friend.remark else "(无备注)" + msg += f"{i}. {friend.nickname} ({friend.user_id}) - 备注: {remark_display}\n" + + await event.reply(msg) +``` + +### 自动通过特定用户的好友请求 + +```python +@matcher.on_event(RequestEvent) +async def handle_specific_friend_request(event: RequestEvent): + if event.request_type != "friend": + return + + # 允许列表 + allowed_users = [123456, 789012, 345678] + + if event.user_id in allowed_users: + # 自动同意 + await event.bot.set_friend_add_request( + flag=event.flag, + approve=True, + remark="重要联系人" + ) + + # 发送欢迎消息 + await event.bot.send_private_msg( + event.user_id, + "你好!已通过你的好友请求。\n" + "发送 /help 查看可用指令。" + ) + else: + # 拒绝其他人 + await event.bot.set_friend_add_request( + flag=event.flag, + approve=False, + reason="仅限授权用户添加" + ) +``` + +### 批量给好友发送消息(谨慎使用!) + +```python +@matcher.command("broadcast", permission="admin") +async def handle_broadcast(event: MessageEvent, args: str): + if not args: + await event.reply("需要广播内容") + return + + # 获取好友列表 + friends = await event.bot.get_friend_list() + + success_count = 0 + fail_count = 0 + + await event.reply(f"开始向 {len(friends)} 个好友发送广播...") + + for friend in friends: + try: + await event.bot.send_private_msg(friend.user_id, args) + success_count += 1 + # 避免发送太快被限制 + await asyncio.sleep(0.5) + except Exception as e: + print(f"发送给 {friend.user_id} 失败: {e}") + fail_count += 1 + + await event.reply( + f"广播完成!\n" + f"成功: {success_count} 个\n" + f"失败: {fail_count} 个" + ) +``` + +**注意**:批量发送消息容易被腾讯限制,谨慎使用! + +## 注意事项 + +1. **频率限制**: 获取好友列表、查询陌生人信息等操作有频率限制。 +2. **缓存**: 好友列表和陌生人信息默认缓存 1 小时,如果需要实时数据,设 `no_cache=True`。 +3. **权限**: 有些 API 需要特定的权限或客户端支持。 +4. **隐私**: 处理好友请求时,注意保护用户隐私。 + +## 下一步 + +- [账号 API](./account.md): 管理机器人自己的信息 +- [群组 API](./group.md): 管理群聊相关功能 +- [消息 API](./message.md): 怎么发消息、撤回消息 \ No newline at end of file diff --git a/docs/api/group.md b/docs/api/group.md new file mode 100644 index 0000000..9b8912b --- /dev/null +++ b/docs/api/group.md @@ -0,0 +1,506 @@ +# 群组 API + +管群是个技术活。这一页讲的是怎么管理群聊:踢人、禁言、改名片、设管理员……所有跟群相关的操作都在这里。 + +## 权限说明 + +**重要提醒**:很多群管理 API 需要机器人有相应的权限: +- **管理员权限**:禁言、踢人、改群名片等 +- **群主权限**:解散群、设置管理员等 + +如果机器人权限不足,API 调用会失败。建议先检查机器人的权限,或者做好错误处理。 + +## 成员管理 + +### `set_group_kick` - 踢出群聊 + +```python +async def set_group_kick( + self, + group_id: int, + user_id: int, + reject_add_request: bool = False +) -> Dict[str, Any] +``` + +把指定成员踢出群聊。 + +**参数:** +- `group_id`: 群号 +- `user_id`: 要踢出的成员的 QQ 号 +- `reject_add_request`: 是否同时拒绝该用户此后的加群请求(默认 `False`) + +**示例:** +```python +@matcher.command("kick") +async def handle_kick(event: MessageEvent, args: str): + if not args.isdigit(): + await event.reply("参数错误,需要 QQ 号") + return + + target_id = int(args) + await event.bot.set_group_kick(event.group_id, target_id) + await event.reply(f"已踢出 {target_id}") +``` + +### `set_group_ban` - 禁言/解除禁言 + +```python +async def set_group_ban( + self, + group_id: int, + user_id: int, + duration: int = 1800 +) -> Dict[str, Any] +``` + +禁言群成员。设置 `duration=0` 可以解除禁言。 + +**参数:** +- `group_id`: 群号 +- `user_id`: 要禁言的成员的 QQ 号 +- `duration`: 禁言时长,单位秒。默认 1800 秒(30 分钟),0 表示解除禁言 + +**示例:** +```python +# 禁言 10 分钟 +await bot.set_group_ban(123456, 789012, duration=600) + +# 解除禁言 +await bot.set_group_ban(123456, 789012, duration=0) +``` + +### `set_group_anonymous_ban` - 禁言匿名用户 + +```python +async def set_group_anonymous_ban( + self, + group_id: int, + anonymous: Optional[Dict[str, Any]] = None, + duration: int = 1800, + flag: Optional[str] = None +) -> Dict[str, Any] +``` + +禁言发送匿名消息的用户。需要从消息事件的 `anonymous` 字段获取匿名用户信息。 + +**参数:** +- `group_id`: 群号 +- `anonymous`: 匿名用户对象(从事件中获取) +- `duration`: 禁言时长,单位秒 +- `flag`: 匿名用户的 flag 标识(从事件中获取) + +**示例:** +```python +@matcher.command("ban_anonymous") +async def handle_ban_anonymous(event: GroupMessageEvent): + if not event.anonymous: + await event.reply("这不是匿名消息") + return + + # 方法 1: 使用 anonymous 对象 + await event.bot.set_group_anonymous_ban( + event.group_id, + anonymous=event.anonymous, + duration=3600 # 禁言 1 小时 + ) + + # 方法 2: 使用 flag(如果事件中有的话) + # await event.bot.set_group_anonymous_ban( + # event.group_id, + # flag=event.anonymous.get("flag"), + # duration=3600 + # ) +``` + +### `set_group_whole_ban` - 全员禁言 + +```python +async def set_group_whole_ban( + self, + group_id: int, + enable: bool = True +) -> Dict[str, Any] +``` + +开启或关闭全员禁言。 + +**参数:** +- `group_id`: 群号 +- `enable`: `True` 开启全员禁言,`False` 关闭 + +**示例:** +```python +# 开启全员禁言 +await bot.set_group_whole_ban(123456, enable=True) + +# 关闭全员禁言 +await bot.set_group_whole_ban(123456, enable=False) +``` + +## 权限设置 + +### `set_group_admin` - 设置/取消管理员 + +```python +async def set_group_admin( + self, + group_id: int, + user_id: int, + enable: bool = True +) -> Dict[str, Any] +``` + +设置或取消群管理员。**需要机器人是群主**。 + +**参数:** +- `group_id`: 群号 +- `user_id`: 目标成员的 QQ 号 +- `enable`: `True` 设为管理员,`False` 取消管理员 + +**示例:** +```python +# 设某人为管理员 +await bot.set_group_admin(123456, 789012, enable=True) + +# 取消某人的管理员 +await bot.set_group_admin(123456, 789012, enable=False) +``` + +### `set_group_anonymous` - 匿名聊天设置 + +```python +async def set_group_anonymous( + self, + group_id: int, + enable: bool = True +) -> Dict[str, Any] +``` + +开启或关闭群匿名聊天功能。**需要机器人是管理员**。 + +**参数:** +- `group_id`: 群号 +- `enable`: `True` 开启匿名,`False` 关闭 + +## 成员信息 + +### `set_group_card` - 设置群名片 + +```python +async def set_group_card( + self, + group_id: int, + user_id: int, + card: str = "" +) -> Dict[str, Any] +``` + +设置群成员的群名片(群内显示的名称)。传空字符串可以删除群名片,恢复为昵称。 + +**参数:** +- `group_id`: 群号 +- `user_id`: 目标成员的 QQ 号 +- `card`: 要设置的群名片内容,空字符串表示删除 + +**示例:** +```python +# 设置群名片 +await bot.set_group_card(123456, 789012, "技术大佬") + +# 删除群名片(恢复为昵称) +await bot.set_group_card(123456, 789012, "") +``` + +### `set_group_special_title` - 设置专属头衔 + +```python +async def set_group_special_title( + self, + group_id: int, + user_id: int, + special_title: str = "", + duration: int = -1 +) -> Dict[str, Any] +``` + +为群成员设置专属头衔(群主/管理员才有权限设置)。**需要机器人是群主**。 + +**参数:** +- `group_id`: 群号 +- `user_id`: 目标成员的 QQ 号 +- `special_title`: 专属头衔内容,空字符串表示删除 +- `duration`: 头衔有效期,单位秒。-1 表示永久 + +**示例:** +```python +# 设置永久头衔 +await bot.set_group_special_title(123456, 789012, "御用摄影师", duration=-1) + +# 设置 7 天有效的头衔 +await bot.set_group_special_title(123456, 789012, "本周活跃之星", duration=7*24*3600) + +# 删除头衔 +await bot.set_group_special_title(123456, 789012, "") +``` + +## 群信息管理 + +### `set_group_name` - 修改群名 + +```python +async def set_group_name( + self, + group_id: int, + group_name: str +) -> Dict[str, Any] +``` + +修改群名称。**需要机器人是群主或管理员**。 + +**参数:** +- `group_id`: 群号 +- `group_name`: 新的群名称 + +**示例:** +```python +await bot.set_group_name(123456, "技术交流群") +``` + +### `set_group_leave` - 退出/解散群聊 + +```python +async def set_group_leave( + self, + group_id: int, + is_dismiss: bool = False +) -> Dict[str, Any] +``` + +退出群聊,如果是群主还可以解散群。 + +**参数:** +- `group_id`: 群号 +- `is_dismiss`: 是否解散群(仅群主有效) + +**示例:** +```python +# 普通退群 +await bot.set_group_leave(123456) + +# 解散群(需要是群主) +await bot.set_group_leave(123456, is_dismiss=True) +``` + +## 获取信息 + +### `get_group_info` - 获取群信息 + +```python +async def get_group_info( + self, + group_id: int, + no_cache: bool = False +) -> GroupInfo +``` + +获取群的详细信息,包括群名、成员数、创建时间等。默认会缓存 1 小时。 + +**参数:** +- `group_id`: 群号 +- `no_cache`: 是否跳过缓存,直接从服务器获取最新信息 + +**返回值:** +- `GroupInfo` 对象,包含群信息 + +**示例:** +```python +info = await bot.get_group_info(123456) +print(f"群名: {info.group_name}") +print(f"成员数: {info.member_count}") +print(f"创建时间: {info.create_time}") +``` + +### `get_group_list` - 获取群列表 + +```python +async def get_group_list(self) -> List[GroupInfo] +``` + +获取机器人加入的所有群列表。 + +**示例:** +```python +groups = await bot.get_group_list() +for group in groups: + print(f"{group.group_id}: {group.group_name}") +``` + +### `get_group_member_info` - 获取群成员信息 + +```python +async def get_group_member_info( + self, + group_id: int, + user_id: int, + no_cache: bool = False +) -> GroupMemberInfo +``` + +获取指定群成员的详细信息,包括昵称、群名片、加群时间、最后发言时间等。 + +**参数:** +- `group_id`: 群号 +- `user_id`: 成员 QQ 号 +- `no_cache`: 是否跳过缓存 + +**返回值:** +- `GroupMemberInfo` 对象 + +**示例:** +```python +member = await bot.get_group_member_info(123456, 789012) +print(f"昵称: {member.nickname}") +print(f"群名片: {member.card}") +print(f"权限: {member.role}") # owner, admin, member +``` + +### `get_group_member_list` - 获取群成员列表 + +```python +async def get_group_member_list(self, group_id: int) -> List[GroupMemberInfo] +``` + +获取群的所有成员列表。 + +**示例:** +```python +members = await bot.get_group_member_list(123456) +print(f"群里有 {len(members)} 个成员") +for member in members: + print(f"{member.user_id}: {member.nickname}") +``` + +### `get_group_honor_info` - 获取群荣誉信息 + +```python +async def get_group_honor_info( + self, + group_id: int, + type: str +) -> GroupHonorInfo +``` + +获取群的荣誉信息,比如龙王、群聊之火、快乐源泉等。 + +**参数:** +- `group_id`: 群号 +- `type`: 荣誉类型,可选值: + - `"talkative`:" 龙王(发言最多) + - `"performer"`: 群聊之火(发言最活跃) + - `"legend"`: 群传奇(连续多天发言最多) + - `"strong_newbie"`: 冒尖小萌新(新人中发言最多) + - `"emotion"`: 快乐源泉(发送表情包最多) + +**示例:** +```python +honor = await bot.get_group_honor_info(123456, "talkative") +print(f"本周龙王: {honor.current_talkative.user_id}") +``` + +## 加群请求处理 + +### `set_group_add_request` - 处理加群请求/邀请 + +```python +async def set_group_add_request( + self, + flag: str, + sub_type: str, + approve: bool = True, + reason: str = "" +) -> Dict[str, Any] +``` + +处理加群请求或邀请。需要在 `request` 事件中调用。 + +**参数:** +- `flag`: 请求标识,从 `request` 事件的 `flag` 字段获取 +- `sub_type`: 请求类型,`"add"`(加群请求)或 `"invite"`(群邀请) +- `approve`: 是否同意,`True` 同意,`False` 拒绝 +- `reason`: 拒绝理由(仅在 `approve=False` 时有效) + +**示例:** +```python +from models.events.request import RequestEvent + +# 在请求事件处理函数中 +async def handle_group_request(event: RequestEvent): + if event.request_type == "group": + # 自动同意所有加群请求 + await event.bot.set_group_add_request( + flag=event.flag, + sub_type=event.sub_type, + approve=True + ) +``` + +## 实用示例 + +### 自动同意加群请求 + +```python +from models.events.request import RequestEvent +from core.managers.command_manager import matcher + +@matcher.on_event(RequestEvent) +async def handle_all_requests(event: RequestEvent): + if event.request_type == "group": + # 检查是否来自特定用户 + if event.user_id in [123456, 789012]: + await event.bot.set_group_add_request( + flag=event.flag, + sub_type=event.sub_type, + approve=True + ) + await event.bot.send_private_msg( + event.user_id, + f"已同意你的加群请求,欢迎加入!" + ) +``` + +### 群活跃度统计 + +```python +@matcher.command("active") +async def handle_active(event: MessageEvent): + # 获取群成员列表 + members = await event.bot.get_group_member_list(event.group_id) + + # 找出最后发言时间最近的一批成员 + active_members = sorted( + members, + key=lambda m: m.last_sent_time or 0, + reverse=True + )[:10] + + # 生成统计消息 + msg = "本群最近活跃成员TOP10:\n" + for i, member in enumerate(active_members, 1): + msg += f"{i}. {member.nickname} (最后发言: {member.last_sent_time})\n" + + await event.reply(msg) +``` + +## 注意事项 + +1. **权限检查**: 调用管理 API 前,最好先检查机器人的权限。 +2. **频率限制**: 不要频繁调用 API,尤其是获取群成员列表这种大数据量的操作。 +3. **缓存**: 获取信息的 API 默认有缓存,如果需要实时数据,记得设 `no_cache=True`。 +4. **错误处理**: 管理操作可能失败(权限不足、参数错误等),要做好错误处理。 + +## 下一步 + +- [好友 API](./friend.md): 处理好友相关操作 +- [账号 API](./account.md): 管理机器人自身状态 +- [消息 API](./message.md): 怎么发消息、撤回消息 \ No newline at end of file diff --git a/docs/api/index.md b/docs/api/index.md new file mode 100644 index 0000000..791bdef --- /dev/null +++ b/docs/api/index.md @@ -0,0 +1,61 @@ +# API 参考 + +嘿,这里是 NEO Bot 的 API 参考文档。 + +如果你在写插件,那这里就是你的工具库。所有能和 OneBot 交互的方法都在这了。 + +## 快速导航 + +### 1. 基础概念 +- [API 调用方式](./base.md): 怎么调用 API、参数格式、返回格式 +- [消息段 (MessageSegment)](./message.md#消息段): 除了文字,还能发图片、表情、@人…… + +### 2. 分类 API +- [消息 API](./message.md): 发消息、撤回、转发 +- [群组 API](./group.md): 管群、禁言、踢人、改名片 +- [好友 API](./friend.md): 好友列表、点赞、加好友请求 +- [账号 API](./account.md): 机器人自己的信息、状态设置 +- [媒体 API](./media.md): 图片、语音相关 + +### 3. 高级功能 +- [合并转发](./message.md#合并转发): 怎么发那种一条消息展开好多条的“聊天记录” +- [智能回复](./message.md#智能回复): `event.reply()` 和 `bot.send()` 怎么选 + +## 怎么用这些 API + +在插件里,你拿到的 `event` 对象自带一个 `bot` 属性,那就是你的机器人实例: + +```python +from core.managers.command_manager import matcher +from models.events.message import MessageEvent + +@matcher.command("test") +async def handle_test(event: MessageEvent): + # 方法 1: 快捷回复(推荐) + await event.reply("你好!") + + # 方法 2: 直接调用 bot 上的 API + bot = event.bot + await bot.send_group_msg(123456, "这是一条群消息") + + # 方法 3: 如果你只有 bot 实例,没有 event + # (这种情况比较少见,一般只在初始化时用到) + await bot.get_login_info() +``` + +大部分时候,用 `event.reply()` 就够了。它帮你判断是群聊还是私聊,自动调用正确的 API。 + +## 兼容性说明 + +NEO Bot 基于 **OneBot v11** 标准实现,兼容: +- [NapCatQQ](https://github.com/NapNeko/NapCatQQ) (推荐) +- go-cqhttp +- 以及其他实现了 OneBot v11 标准的客户端 + +但要注意:不同客户端的实现细节可能有差异。比如某些 API 可能不支持,或者参数格式稍有不同。 + +如果你发现某个 API 调用失败,先看看日志里的错误信息,或者去对应客户端的文档里查查。 + +## 接下来? + +挑一个你感兴趣的类别开始看吧。建议从 [消息 API](./message.md) 开始,因为发消息是最常用的功能。 \ No newline at end of file diff --git a/docs/api/media.md b/docs/api/media.md new file mode 100644 index 0000000..b59b3b7 --- /dev/null +++ b/docs/api/media.md @@ -0,0 +1,259 @@ +# 媒体 API + +这一页讲的是怎么处理图片、语音等媒体文件。虽然方法不多,但都很实用。 + +## 能力检查 + +### `can_send_image` - 检查是否可以发送图片 + +```python +async def can_send_image(self) -> Dict[str, Any] +``` + +检查当前上下文是否允许发送图片。 + +**返回值:** +- 包含检查结果的字典,通常有 `yes` 或 `no` 字段 + +**示例:** +```python +@matcher.command("sendpic") +async def handle_sendpic(event: MessageEvent, args: str): + # 先检查能不能发图片 + result = await event.bot.can_send_image() + + if result.get("yes"): + # 可以发图片 + await event.reply(MessageSegment.image("https://example.com/image.jpg")) + else: + # 不能发图片 + await event.reply("当前环境不支持发送图片") +``` + +### `can_send_record` - 检查是否可以发送语音 + +```python +async def can_send_record(self) -> Dict[str, Any] +``` + +检查当前上下文是否允许发送语音消息。 + +**示例:** +```python +result = await bot.can_send_record() +if result.get("yes"): + print("可以发语音") +else: + print("不能发语音") +``` + +## 图片信息 + +### `get_image` - 获取图片信息 + +```python +async def get_image(self, file: str) -> Dict[str, Any] +``` + +获取图片的详细信息,比如大小、尺寸、MD5 等。 + +**参数:** +- `file`: 图片文件名、路径或 URL + +**返回值:** +- 包含图片信息的字典 + +**示例:** +```python +@matcher.command("imageinfo") +async def handle_imageinfo(event: MessageEvent): + # 检查消息中是否有图片 + for segment in event.message: + if segment.type == "image": + file = segment.data.get("file", "") + if file: + # 获取图片信息 + info = await event.bot.get_image(file) + await event.reply( + f"图片信息:\n" + f"大小: {info.get('size', '未知')} 字节\n" + f"尺寸: {info.get('width', '?')}x{info.get('height', '?')}\n" + f"MD5: {info.get('md5', '未知')}" + ) + return + + await event.reply("消息中没有图片") +``` + +## 实际应用示例 + +### 图片转发器 + +```python +@matcher.command("forwardimage") +async def handle_forwardimage(event: MessageEvent, args: str): + """ + 将收到的图片转发到指定群 + 用法: /forwardimage 群号 + """ + if not args.isdigit(): + await event.reply("参数错误,需要群号") + return + + target_group = int(args) + + # 查找消息中的图片 + images = [] + for segment in event.message: + if segment.type == "image": + images.append(segment) + + if not images: + await event.reply("消息中没有图片") + return + + # 检查是否能发图片到目标群 + can_send = await event.bot.can_send_image() + if not can_send.get("yes"): + await event.reply("当前环境不支持发送图片") + return + + # 转发所有图片 + for image in images: + await event.bot.send_group_msg(target_group, image) + await asyncio.sleep(0.5) # 避免发送太快 + + await event.reply(f"已转发 {lenimages()} 张图片到群 {target_group}") +``` + +### 图片信息查询插件 + +```python +@matcher.on_event(GroupMessageEvent) +async def handle_image_autoinfo(event: GroupMessageEvent): + """ + 自动回复图片信息(当有人发图片时) + """ + # 只处理包含图片的消息 + images = [seg for seg in event.message if seg.type == "image"] + if not images: + return + + # 只处理第一张图片(避免消息太长) + image_seg = images[0] + file = image_seg.data.get("file", "") + + if not file: + return + + try: + # 获取图片信息 + info = await event.bot.get_image(file) + + # 构建回复消息 + msg = "📷 图片信息:n\" + if "size" in info: + size_kb = info["size"] / 1024 + msg += f"大小: {size_kb:.1f} KB\n" + if "width" in info and "height" in info: + msg += f"尺寸: {info['width']}×{info['height']}\n" + if "md5" in info: + msg += f"MD5: {info['md5'][:8]}...\n" + + await event.reply(msg) + except Exception as e: + # 获取图片信息失败,静默处理 + pass +``` + +### 图片发送安全检查 + +```python +async def safe_send_image(bot, target_id, image_url, is_group=True): + """ + 安全发送图片:先检查是否能发,再发送 + """ + # 检查发送能力 + can_send = await bot.can_send_image() + if not can_send.get("yes"): + return False, "当前环境不支持发送图片" + + # 检查图片是否存在(简单检查) + if not image_url: + return False, "图片URL为空" + + try: + # 发送图片 + if is_group: + await bot.send_group_msg(target_id, MessageSegment.image(image_url)) + else: + await bot.send_private_msg(target_id, MessageSegment.image(image_url)) + return True, "图片发送成功" + except Exception as e: + return False, f"发送失败: {e}" + +@matcher.command("safepic") +async def handle_safepic(event: MessageEvent, args: str): + """ + 安全发送图片示例 + """ + if not args: + await event.reply("需要图片URL") + return + + # 是判断群聊还是私聊 + is_group = hasattr(event, "group_id") and event.group_id + + if is_group: + target_id = event.group_id + else: + target_id = event.user_id + + # 安全发送 + success, message = await safe_send_image( + event.bot, target_id, args, is_group + ) + + if not success: + await event.reply(message) +``` + +## 注意事项 + +1. **客户端支持**: 不是所有 OneBot 客户端都完全支持媒体 API。 +2. **网络限制**: 发送图片和语音可能受网络环境限制。 +3. **文件大小**: 图片和语音文件有大小限制,太大的文件可能发送失败。 +4. **缓存**: 图片默认会缓存,重复发送同一图片会更快。 +5. **安全性**: 不要发送可疑或非法内容。 + +## 常见问题 + +### Q: 为什么 `can_send_image` 总是返回可以? +A: 这取决于 OneBot 客户端的实现。有些客户端可能不检查实际能力,总是返回可以。 + +### Q: 怎么发送本地图片? +A: 使用 `file://` 协议或直接使用本地路径: +```python +# 本地文件路径 +image = MessageSegment.image("file:///path/to/image.jpg") +# 或者(取决于客户端) +image = MessageSegment.image("/path/to/image.jpg") +``` + +### Q: 怎么发送语音消息? +A: NEO Bot 目前没有封装发送语音的 API,但你可以通过 `call_api` 直接调用: +```python +await bot.call_api("send_group_msg", { + "group_id": 123456, + "message": [{ + "type": "record", + "data": {"file": "http://example.com/voice.amr"} + }] +}) +``` + +## 下一步 + +- [消息 API](./message.md): 怎么发消息、撤回消息,包含消息段的使用 +- [群组 API](./group.md): 管理群聊相关功能 +- [好友 API](./friend.md): 管理好友相关功能 \ No newline at end of file diff --git a/docs/api/message.md b/docs/api/message.md new file mode 100644 index 0000000..5363d68 --- /dev/null +++ b/docs/api/message.md @@ -0,0 +1,309 @@ +# 消息 API + +发消息是机器人最基础的功能。这一页讲的是怎么发消息、撤回消息、转发消息,以及怎么用消息段(图片、@人、表情等等)。 + +## 快速开始 + +### 发一条简单的消息 + +```python +from core.managers.command_manager import matcher +from models.events.message import MessageEvent + +@matcher.command("hello") +async def handle_hello(event: MessageEvent): + # 方法 1: 直接回复(最常用) + await event.reply("你好呀!") + + # 方法 2: 通过 bot 实例发消息 + await event.bot.send_group_msg(event.group_id, "这是一条群消息") + # 如果是私聊,可以用 send_private_msg + # await event.bot.send_private_msg(event.user_id, "这是一条私聊消息") +``` + +`event.reply()` 是最简单的方式,它会自动判断是群聊还是私聊,然后调用正确的 API。 + +## 消息段 (MessageSegment) + +除了纯文字,QQ 消息还能包含图片、@某人、表情、分享链接等等。在 OneBot 里,这些叫“消息段”。 + +NEO Bot 用 `MessageSegment` 类来表示消息段。 + +### 创建消息段 + +```python +from models.message import MessageSegment + +# 文本 +text_seg = MessageSegment.text("这是一段文字") + +# @某人 +at_seg = MessageSegment.at(123456) # @QQ号 123456 +at_all = MessageSegment.at("all") # @全体成员 + +# 图片 +image_seg = MessageSegment.image("https://example.com/image.jpg") +# 本地图片 +local_image = MessageSegment.image("file:///path/to/image.png") + +# 表情 (QQ 表情,不是 emoji) +face_seg = MessageSegment(type="face", data={"id": "123"}) + +# 分享链接 +share_seg = MessageSegment(type="share", data={ + "url": "https://example.com", + "title": "示例网站", + "content": "这是一个示例网站", + "image": "https://example.com/thumb.jpg" +}) +``` + +### 组合消息段 + +你可以把多个消息段组合成一条消息: + +```python +# 方法 1: 用列表 +message = [ + MessageSegment.text("你好,"), + MessageSegment.at(123456), + MessageSegment.text("!"), + MessageSegment.image("https://example.com/welcome.jpg") +] + +# 方法 2: 用加法运算符(更直观) +message = ( + MessageSegment.text("你好,") + + MessageSegment.at(123456) + + MessageSegment.text("!") +) + +# 发送组合消息 +await event.reply(message) +``` + +### 从 CQ 码转换 + +如果你熟悉 CQ 码,也可以用 `MessageSegment` 来解析: + +```python +# CQ 码字符串转消息段列表(需要手动解析,这里只是示例) +# 实际使用中,框架会自动处理 CQ 码 +``` + +## API 方法详解 + +### `send_group_msg` - 发送群消息 + +```python +async def send_group_msg( + self, + group_id: int, + message: Union[str, MessageSegment, List[MessageSegment]], + auto_escape: bool = False +) -> Dict[str, Any] +``` + +**参数:** +- `group_id`: 群号 +- `message`: 消息内容,可以是字符串、单个消息段,或消息段列表 +- `auto_escape`: 是否对消息中的 CQ 码特殊字符进行转义(仅当 `message` 是字符串时有效) + +**示例:** +```python +# 发文字 +await bot.send_group_msg(123456, "大家好!") + +# 发图片 +await bot.send_group_msg(123456, MessageSegment.image("https://example.com/cat.jpg")) + +# 发组合消息 +msg = MessageSegment.text("看这只猫:") + MessageSegment.image("https://example.com/cat.jpg") +await bot.send_group_msg(123456, msg) +``` + +### `send_private_msg` - 发送私聊消息 + +```python +async def send_private_msg( + self, + user_id: int, + message: Union[str, MessageSegment, List[MessageSegment]], + auto_escape: bool = False +) -> Dict[str, Any] +``` + +**参数:** +- `user_id`: 对方的 QQ 号 +- `message`: 消息内容 +- `auto_escape`: 是否转义 CQ 码 + +**示例:** +```python +await bot.send_private_msg(123456, "你好,这是一条私聊消息") +``` + +### `send` - 智能发送 + +```python +async def send( + self, + event: OneBotEvent, + message: Union[str, MessageSegment, List[MessageSegment]], + auto_escape: bool = False +) -> Dict[str, Any] +``` + +这个方法会根据事件的类型自动选择发群消息还是私聊消息。如果事件是消息事件,它其实会调用 `event.reply()`。 + +**示例:** +```python +# 在事件处理函数中 +await bot.send(event, "自动判断是群聊还是私聊") +``` + +### `delete_msg` - 撤回消息 + +```python +async def delete_msg(self, message_id: int) -> Dict[str, Any] +``` + +**参数:** +- `message_id`: 要撤回的消息 ID(从消息事件中获取) + +**示例:** +```python +@matcher.command("recall") +async def handle_recall(event: MessageEvent): + # 撤回上一条消息(假设我们知道 message_id) + message_id = event.message_id + await event.bot.delete_msg(message_id) +``` + +### `get_msg` - 获取消息详情 + +```python +async def get_msg(self, message_id: int) -> Dict[str, Any] +``` + +获取一条消息的详细信息,包括发送者、发送时间、内容等。 + +### `get_forward_msg` - 获取合并转发消息 + +```python +async def get_forward_msg(self, id: str) -> List[Dict[str, Any]] +``` + +获取一条合并转发消息(聊天记录)的详细内容。 + +**参数:** +- `id`: 合并转发消息的 ID(从消息中获取) + +**返回值:** +- 消息节点列表,每个节点包含发送者、时间、内容等信息 + +## 合并转发 + +合并转发就是那种“点击展开查看聊天记录”的消息。在 QQ 里很常见。 + +### 构建转发节点 + +先用 `bot.build_forward_node()` 创建节点: + +```python +# 创建一个转发节点 +node = bot.build_forward_node( + user_id=123456, # 发送者的 QQ 号 + nickname ="张三", # 显示的名字 + message="这是一条测试消息" # 消息内容 +) + +# 消息内容也可以用消息段 +node2 = bot.build_forward_node( + user_id=789012, + nickname="李四", + message=MessageSegment.text("看这个图片:") + MessageSegment.image("https://example.com/img.jpg") +) +``` + +### 发送合并转发 + +```python +# 方法 1: 直接发到群聊 +nodes = [node1, node2, node3] +await bot.send_group_forward_msg(group_id=123456, messages=nodes) + +# 方法 2: 发到私聊 +await bot.send_private_forward_msg(user_id=123456, messages=nodes) + +# 方法 3: 智能发送(根据事件判断) +await bot.send_forwarded_messages(target=event, nodes=nodes) +``` + +### 完整示例 + +```python +@matcher.command("forward") +async def handleforward_(event: MessageEvent): + # 创建几个测试节点 + nodes = [ + event.bot.build_forward_node( + user_id=10001, + nickname="系统", + message="欢迎使用 NEO Bot" + ), + event.bot.build_forward_node( + user_id=event.user_id, + nickname=event.sender.nickname, + message="这个合并转发功能真好用!" + ), + event.bot.build_forward_node( + user_id=10002, + nickname="机器人", + message=MessageSegment.text("谢谢夸奖!") + MessageSegment.face(id="123") + ) + ] + + # 发送 + await event.bot.send_forwarded_messages(event, nodes) +``` + +## 消息事件中的快捷方法 + +在消息事件 (`MessageEvent`) 中,有一些快捷方法: + +### `event.reply()` + +```python +await event.reply("你好!") +await event.reply(message_segment_list) +``` + +自动回复到消息来源(群聊或私聊)。 + +### `event.message` + +获取事件中的消息内容(已经是 `MessageSegment` 列表格式)。 + +```python +# 检查消息是否包含图片 +for segment in event.message: + if segment.type == "image": + await event.reply("你发了一张图片!") + break +``` + +## 注意事项 + +1. **消息长度限制**: QQ 对单条消息有长度限制,太长的消息会被截断。 +2. **频率限制**: 不要疯狂发消息,可能会被腾讯限制。 +3. **图片缓存**: 默认情况下,图片会缓存到本地,下次发送同样的图片会更快。 +4. **网络错误**: 发消息可能因为网络问题失败,建议做好错误处理。 + +## 下一步 + +现在你已经知道怎么发消息了。接下来可以看看: + +- [群组 API](./group.md): 管理群聊,比如禁言、踢人 +- [好友 API](./friend.md): 处理好友相关操作 +- [账号 API](./account.md): 管理机器人自己的状态 \ No newline at end of file diff --git a/docs/core-concepts/architecture.md b/docs/core-concepts/architecture.md index f086ec2..20dcb17 100644 --- a/docs/core-concepts/architecture.md +++ b/docs/core-concepts/architecture.md @@ -6,8 +6,9 @@ Neobot是面向内部开发者的,我会开源,但是写的很烂。。。 ### Python 3.14 + JIT 镀铬酸钾创项目的时候用的 Python 3.14 3.14兼容JIT,那就这样吧 -* **何原理**: 提前编译了源代码, -* **何用途**: 密集CPU运算能提升一些 +* **何原理**: 运行时把热点代码编译成机器码(Just-In-Time) +* **何用途**: 密集CPU运算能提升一些,尤其是插件里的循环和函数调用 +* **怎么开**: 启动时加 `-X jit` 参数 ### Mypyc 编译 (AOT) 光 JIT 还不够。。核心模块(`core/ws.py`, `core/managers/*.py`)我编译成了C扩展 diff --git a/docs/core-concepts/performance.md b/docs/core-concepts/performance.md index b495881..79f588a 100644 --- a/docs/core-concepts/performance.md +++ b/docs/core-concepts/performance.md @@ -60,7 +60,37 @@ Python 自带的 `json` 库性能好像不太好,特别是在处理 OneBot 这 * Rust 编写 * 支持直接返回 `bytes`,减少内存复制。 -## 5. Mypyc 编译 (AOT Compilation) +## 5. Python 3.14 JIT (Just-In-Time Compilation) + +### 痛点 +Python 解释器一边解析一边执行,遇到循环和函数调用就得反复解释。像消息处理这种高频循环,解释开销就特别明显。 + +### 解决方案 +Python 3.14 自带了一个实验性的 JIT 编译器。启动时加上 `-X jit` 参数,它就会在运行时把热点代码编译成机器码。 + +**JIT 怎么工作的?** +1. **监控**: 解释器运行时会统计哪些函数、哪些循环被调最得频繁。 +2. **编译**: 把这些“热点”代码编译成机器码。 +3. **替换**: 下次再执行到这段代码,直接跑机器码,跳过解释步骤。 + +**哪些代码受益最大?** +- `plugins/` 里的业务逻辑(比如 B站解析、代码沙箱)。 +- 循环密集的操作(比如遍历消息段、处理大量群消息)。 +- 频繁调用的工具函数。 + +### 如何启用? +启动机器人时加上 `-X jit` 参数: + +```bash +python -X jit main.py +``` + +### 收益 +* **热点代码加速**: 经常跑的代码能快 2-10 倍(看具体场景)。 +* **零配置**: 不用改代码,加个启动参数就行。 +* **与 Mypyc 互补**: JIT 负责动态、灵活的插件代码;Mypyc 负责静态、类型明确的核心模块。两者结合,全面覆盖。 + +## 6. Mypyc 编译 (AOT Compilation) ### 痛点 Python 作为一种解释型语言,在处理 CPU 密集型任务时性能较差。对于机器人框架的核心部分,如 WebSocket 消息解析、事件分发和插件管理,这些代码被高频调用,其性能直接影响机器人的响应速度和吞吐量。 @@ -84,7 +114,7 @@ python setup_mypyc.py 脚本会自动查找并编译预设的模块列表。 ### 特别注意:关于事件模型的编译 -`Mypyc` 对 Python 的某些动态特性和高级用法支持尚不完善。在实践中,我们发现 `dataclass` 与 `Mypyc` 存在一些兼容性问题,尤其是在使用继承和某些高级特性(如 `slots=True`)时,可能会导致编译失败或运行时错误(例如 `AttributeError: attribute '__dict__' of 'type' objects is not writable`)。 +`Mypyc` 对 Python 某些动态特性和高级用法支持尚不完善。在实践中,我们发现 `dataclass` 与 `Mypyc` 存在一些兼容性问题,尤其是在使用继承和某些高级特性(如 `slots=True`)时,可能会导致编译失败或运行时错误(例如 `AttributeError: attribute '__dict__' of 'type' objects is not writable`)。 - **当前状态**:为了确保稳定性,`setup_mypyc.py` 脚本**默认不编译** `models/events/` 目录下的事件模型文件。这些文件虽然也被频繁使用,但它们的结构相对复杂,与 `Mypyc` 的兼容性问题仍在探索中。 - **未来展望**:我们会持续关注 `Mypyc` 的更新,当其对 `dataclass` 的支持得到改善后,会重新尝试将事件模型加入编译列表,以实现极致的性能。 diff --git a/docs/index.md b/docs/index.md index 881ca84..fb1ecd7 100644 --- a/docs/index.md +++ b/docs/index.md @@ -18,7 +18,15 @@ * [消息流](./core-concepts/event-flow.md): 看看一条消息从被接收到被回复是如何运行的 * [核心](./core-concepts/singleton-managers.md): `matcher`, `browser_manager`... 认识这些核心模块。 -### 3. 插件开发 +### 3. API 参考 +* [API 总览](./api/index.md): 所有 API 的快速导航和调用方式 +* [消息 API](./api/message.md): 发消息、撤回、转发、合并转发 +* [群组 API](./api/group.md): 管群、禁言、踢人、改名片 +* [好友 API](./api/friend.md): 好友列表、点赞、加好友请求 +* [账号 API](./api/account.md): 机器人自己的信息、状态设置 +* [媒体 API](./api/media.md): 图片、语音相关 + +### 4. 插件开发 * [插件开发第一步](./plugin-development/index.md): 带你写第一个插件 * [指南](./plugin-development/command-handling.md): 怎么教你的 Bot 听懂指令和参数。 * [绝对不要做的事情](./plugin-development/best-practices.md): **(必读!)** diff --git a/import sys.py b/import sys.py deleted file mode 100644 index daa4292..0000000 --- a/import sys.py +++ /dev/null @@ -1,16 +0,0 @@ -import sys -import sysconfig - -print(f"Python Version: {sys.version}") - -# 检查 GIL 状态 -try: - # Python 3.13+ free-threading build 才有这个属性 - is_gil_enabled = sys._is_gil_enabled() - print(f"GIL Enabled: {is_gil_enabled}") -except AttributeError: - print("GIL Status: Unknown (sys._is_gil_enabled not found, likely GIL-enabled build)") - -# 检查 JIT 状态 -# 目前没有直接的 API 检查 JIT 是否开启,通常看性能或启动日志 -print("JIT Support: Experimental (Enable with -X jit)") \ No newline at end of file diff --git a/plugins/auto_approve.py b/plugins/auto_approve.py new file mode 100644 index 0000000..f92254e --- /dev/null +++ b/plugins/auto_approve.py @@ -0,0 +1,53 @@ +""" +自动同意请求插件 + +提供自动同意好友请求和群聊邀请的功能。 +""" +from core.managers.command_manager import matcher +from core.bot import Bot +from models.events.request import FriendRequestEvent, GroupRequestEvent + +__plugin_meta__ = { + "name": "自动同意请求", + "description": "自动同意好友请求和群聊邀请", + "usage": "无需手动操作,自动处理请求事件", +} + +@matcher.on_request(request_type="friend") +async def handle_friend_request(bot: Bot, event: FriendRequestEvent): + """ + 处理好友请求事件,自动同意好友申请 + + :param bot: Bot实例 + :param event: 好友请求事件对象 + """ + try: + # 自动同意好友请求 + await bot.call_api( + "set_friend_add_request", + flag=event.flag, + approve=True + ) + print(f"[自动同意] 已同意用户 {event.user_id} 的好友请求") + except Exception as e: + print(f"[自动同意] 同意好友请求失败: {e}") + +@matcher.on_request(request_type="group") +async def handle_group_request(bot: Bot, event: GroupRequestEvent): + """ + 处理群聊邀请事件,自动同意群聊邀请 + + :param bot: Bot实例 + :param event: 群聊邀请事件对象 + """ + try: + # 自动同意群聊邀请 + await bot.call_api( + "set_group_add_request", + flag=event.flag, + sub_type=event.sub_type, + approve=True + ) + print(f"[自动同意] 已同意加入群聊 {event.group_id} (邀请人: {event.user_id})") + except Exception as e: + print(f"[自动同意] 同意群聊邀请失败: {e}") diff --git a/plugins/bili_parser.py b/plugins/bili_parser.py index 3b9030f..af37675 100644 --- a/plugins/bili_parser.py +++ b/plugins/bili_parser.py @@ -13,12 +13,16 @@ from models import MessageEvent, MessageSegment # 创建一个TTL缓存,最大容量100,缓存时间10秒 processed_messages: TTLCache[int, bool] = TTLCache(maxsize=100, ttl=10) +# 插件元数据 __plugin_meta__ = { "name": "bili_parser", "description": "自动解析B站分享卡片,提取视频封面和播放量等信息。", "usage": "(自动触发)当检测到B站小程序分享卡片时,自动发送视频信息。", } +# 常量定义 +BILI_NICKNAME = "B站视频解析" + HEADERS = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' } @@ -29,7 +33,7 @@ _session: Optional[aiohttp.ClientSession] = None async def get_session() -> aiohttp.ClientSession: global _session if _session is None or _session.closed: - _session = aiohttp.ClientSession() + _session = aiohttp.ClientSession(headers=HEADERS) return _session @@ -71,7 +75,7 @@ async def parse_video_info(video_url: str) -> Optional[Dict[str, Any]]: if not script_tag or not script_tag.string: return None - match = re.search(r'window\.__INITIAL_STATE__\s*=\s*(\{.*?\});', script_tag.string) + match = re.search(r'window\.__INITIAL_STATE__\s*=\s*(\{[^\}]*\});', script_tag.string) if not match: return None @@ -126,16 +130,56 @@ async def get_direct_video_url(video_url: str) -> Optional[str]: async with aiohttp.ClientSession() as session: async with session.get(api_url, headers=HEADERS, timeout=10) as response: response.raise_for_status() - data = await response.json() + # 使用 content_type=None 来忽略 Content-Type 检查 + # 因为 API 返回 text/json 而不是标准的 application/json + data = await response.json(content_type=None) if data.get("code") == 200 and data.get("data"): return data["data"][0].get("video_url") except (aiohttp.ClientError, json.JSONDecodeError, KeyError, IndexError) as e: logger.error(f"[bili_parser] 调用第三方API解析视频失败: {e}") return None -BILI_URL_PATTERN = re.compile(r"https?://(?:www\.)?(bilibili\.com/video/[a-zA-Z0-9_]+|b23\.tv/[a-zA-Z0-9]+)") +BILI_URL_PATTERN = re.compile(r"https?://(?:www\.)?(bilibili\.com/video/\w+|b23\.tv/[a-zA-Z0-9]+)") +def extract_url_from_json_segments(segments): + """ + 从消息的JSON段中提取B站链接 + :param segments: 消息段列表 + :return: 提取到的URL或None + """ + for segment in segments: + if segment.type == "json": + logger.info(f"[bili_parser] 检测到JSON CQ码: {segment.data}") + try: + json_data = json.loads(segment.data.get("data", "{}")) + short_url = json_data.get("meta", {}).get("detail_1", {}).get("qqdocurl") + + if short_url and "b23.tv" in short_url: + extracted_url = short_url.split('?')[0] + logger.success(f"[bili_parser] 成功从JSON卡片中提取到B站短链接: {extracted_url}") + return extracted_url + except (json.JSONDecodeError, KeyError) as e: + logger.error(f"[bili_parser] 解析JSON失败: {e}") + continue + return None + +def extract_url_from_text_segments(segments): + """ + 从消息的文本段中提取B站链接 + :param segments: 消息段列表 + :return: 提取到的URL或None + """ + for segment in segments: + if segment.type == "text": + text_content = segment.data.get("text", "") + match = BILI_URL_PATTERN.search(text_content) + if match: + extracted_url = match.group(0) + logger.success(f"[bili_parser] 成功从文本中提取到B站链接: {extracted_url}") + return extracted_url + return None + @matcher.on_message() async def handle_bili_share(event: MessageEvent): """ @@ -151,34 +195,12 @@ async def handle_bili_share(event: MessageEvent): if event.user_id == event.self_id: return - url_to_process = None - # 1. 优先解析JSON卡片中的短链接 - for segment in event.message: - if segment.type == "json": - logger.info(f"[bili_parser] 检测到JSON CQ码: {segment.data}") - try: - json_data = json.loads(segment.data.get("data", "{}")) - short_url = json_data.get("meta", {}).get("detail_1", {}).get("qqdocurl") - - if short_url and "b23.tv" in short_url: - url_to_process = short_url.split('?')[0] - logger.success(f"[bili_parser] 成功从JSON卡片中提取到B站短链接: {url_to_process}") - break # 找到后立即跳出循环 - except (json.JSONDecodeError, KeyError) as e: - logger.error(f"[bili_parser] 解析JSON失败: {e}") - continue + url_to_process = extract_url_from_json_segments(event.message) # 2. 如果未在JSON卡片中找到链接,则在文本消息中查找 if not url_to_process: - for segment in event.message: - if segment.type == "text": - text_content = segment.data.get("text", "") - match = BILI_URL_PATTERN.search(text_content) - if match: - url_to_process = match.group(0) - logger.success(f"[bili_parser] 成功从文本中提取到B站链接: {url_to_process}") - break # 找到后立即跳出循环 + url_to_process = extract_url_from_text_segments(event.message) # 3. 如果找到了任何类型的B站链接,则进行处理 if url_to_process: @@ -246,10 +268,10 @@ async def process_bili_link(event: MessageEvent, url: str): ] nodes = [ - event.bot.build_forward_node(user_id=event.self_id, nickname="B站视频解析", message=text_message), - event.bot.build_forward_node(user_id=event.self_id, nickname="B站视频解析", message=image_message_segment), - event.bot.build_forward_node(user_id=event.self_id, nickname="B站视频解析", message=up_info_segment), - event.bot.build_forward_node(user_id=event.self_id, nickname="B站视频解析", message=video_message) + event.bot.build_forward_node(user_id=event.self_id, nickname=BILI_NICKNAME, message=text_message), + event.bot.build_forward_node(user_id=event.self_id, nickname=BILI_NICKNAME, message=image_message_segment), + event.bot.build_forward_node(user_id=event.self_id, nickname=BILI_NICKNAME, message=up_info_segment), + event.bot.build_forward_node(user_id=event.self_id, nickname=BILI_NICKNAME, message=video_message) ] logger.success(f"[bili_parser] 成功解析视频信息并准备以聊天记录形式回复: {video_info['title']}") diff --git a/scripts/check_python_env.py b/scripts/check_python_env.py new file mode 100644 index 0000000..57b9ec8 --- /dev/null +++ b/scripts/check_python_env.py @@ -0,0 +1,104 @@ +#!/usr/bin/env python3 +""" +Python 环境检查脚本 + +检查当前 Python 环境是否符合 NEO Bot 要求,包括版本、GIL 状态、JIT 支持等。 +""" +import sys +import platform + +def main(): + """主函数""" + print("=" * 60) + print("NEO Bot Python 环境检查") + print("=" * 60) + + # 1. Python 版本信息 + version_info = sys.version_info + print("\n[1] Python 版本:") + print(f" 版本号: {sys.version}") + print(f" 主版本: {version_info.major}.{version_info.minor}.{version_info.micro}") + print(f" 发布日期: {version_info.releaselevel} {version_info.serial}") + + # 检查是否为 Python 3.14 + if version_info.major == 3 and version_info.minor == 14: + print(" ✓ 符合要求: Python 3.14") + else: + print(f" ⚠ 警告: 推荐使用 Python 3.14,当前为 {version_info.major}.{version_info.minor}") + + # 2. 平台信息 + print("\n[2] 平台信息:") + print(f" 操作系统: {platform.system()} {platform.release()}") + print(f" 处理器: {platform.processor()}") + print(f" 架构: {platform.machine()}") + + # 3. GIL 状态 + print("\n[3] GIL (全局解释器锁) 状态:") + try: + # Python 3.13+ free-threading build 才有这个属性 + is_gil_enabled = sys._is_gil_enabled() + if is_gil_enabled: + print(" GIL 已启用 (传统模式)") + else: + print(" GIL 已禁用 (自由线程模式)") + except AttributeError: + print(" GIL 状态: 未知 (sys._is_gil_enabled 未找到,可能是传统 GIL 构建)") + + # 4. JIT 状态 + print("\n[4] JIT (即时编译) 状态:") + + # 检查是否启用了 JIT + jit_enabled = False + jit_details = "未知" + + # 方法1: 检查启动标志 + if hasattr(sys, 'flags'): + # Python 3.14 的 JIT 通过 -X jit 启用 + # 但 sys.flags 中没有直接的 JIT 标志 + pass + + # 方法2: 检查是否有 JIT 相关属性 + try: + # 尝试导入 _jit 模块(如果存在) + import _jit + jit_enabled = True + jit_details = "检测到 _jit 模块" + del _jit # 避免未使用的导入警告 + except ImportError: + # 检查 sys 模块中是否有 JIT 相关属性 + if hasattr(sys, '_jit_enabled'): + jit_enabled = sys._jit_enabled + jit_details = f"sys._jit_enabled = {jit_enabled}" + else: + jit_details = "未检测到 JIT 模块或属性" + + if jit_enabled: + print(" ✓ JIT 已启用") + print(f" 详情: {jit_details}") + else: + print(" ⚠ JIT 未启用或不可用") + print(f" 详情: {jit_details}") + print(" 建议: 启动时使用 -X jit 参数启用 JIT,例如: python -X jit main.py") + + # 5. 其他信息 + print("\n[5] 其他信息:") + print(f" 实现: {platform.python_implementation()}") + print(f" 构建: {platform.python_build()}") + print(f" 编译器: {platform.python_compiler()}") + + # 6. 路径信息 + print("\n[6] 路径信息:") + print(f" 执行文件: {sys.executable}") + print(f" 前缀: {sys.prefix}") + print(" 路径:") + for i, path in enumerate(sys.path[:5], 1): # 只显示前5个 + print(f" {i}. {path}") + if len(sys.path) > 5: + print(f" ... 还有 {len(sys.path) - 5} 个路径") + + print("\n" + "=" * 60) + print("检查完成") + print("=" * 60) + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/scripts/compile_machine_code.py b/scripts/compile_machine_code.py new file mode 100644 index 0000000..70c6992 --- /dev/null +++ b/scripts/compile_machine_code.py @@ -0,0 +1,303 @@ +#!/usr/bin/env python3 +""" +跨平台 Python 模块编译脚本 + +将核心 Python 模块编译为机器码(.pyd 或 .so)以提升性能。 + +支持的平台: +- Windows: 生成 .pyd 文件 +- Linux: 生成 .so 文件 + +使用方法: + python compile_machine_code.py [options] + +选项: + --compile, -c 编译指定的模块(默认) + --list, -l 列出已编译的模块 + --clean, -k 清理编译生成的文件 + --help, -h 显示帮助信息 + +注意: + 1. 需要安装 C 编译器 (Windows 上需要 Visual Studio Build Tools, Linux 上需要 GCC) + 2. 需要安装 mypyc: pip install mypyc + 3. 编译后的文件是平台相关的,不能跨平台复制 + 4. 建议在部署的目标环境上运行此脚本 +""" +import os +import sys +import glob +import subprocess +import shutil +import argparse + +# 检测当前平台和 Python 版本 +PLATFORM = sys.platform +PYTHON_VERSION = f"{sys.version_info.major}{sys.version_info.minor}" # 例如 "314" + +if PLATFORM.startswith('win'): + EXTENSION = '.pyd' + BUILD_PREFIX = f'cp{PYTHON_VERSION}-win_amd64' + BUILD_PATH = os.path.join('build', f'lib.win-amd64-cpython-{PYTHON_VERSION}') +elif PLATFORM.startswith('linux'): + EXTENSION = '.so' + BUILD_PREFIX = f'cp{PYTHON_VERSION}-x86_64-linux-gnu' + BUILD_PATH = os.path.join('build', f'lib.linux-x86_64-cpython-{PYTHON_VERSION}') +else: + print(f"不支持的平台: {PLATFORM}") + sys.exit(1) + +# 要编译的模块列表 +# 注意:Mypyc 对动态特性支持有限,只选择计算密集或类型明确的模块 +MODULES = [ + # 工具模块 + 'core/utils/json_utils.py', # JSON 处理 + 'core/utils/executor.py', # 代码执行引擎 + 'core/utils/singleton.py', # 单例模式基类 + 'core/utils/exceptions.py', # 自定义异常 + 'core/utils/logger.py', # 日志模块 + + # 核心管理模块 + 'core/managers/command_manager.py', # 指令匹配和分发 + 'core/managers/admin_manager.py', # 管理员管理 + 'core/managers/permission_manager.py', # 权限管理 + 'core/managers/plugin_manager.py', # 插件管理器 + 'core/managers/redis_manager.py', # Redis 管理器 + 'core/managers/image_manager.py', # 图片管理器 + + # 核心基础模块 + 'core/ws.py', # WebSocket 核心 + 'core/bot.py', # Bot 核心抽象 + 'core/config_loader.py', # 配置加载 + 'core/config_models.py', # 配置模型 + 'core/permission.py', # 权限枚举 + + # API 模块 - 注意:这些类会被 Bot 类多继承使用 + # 因此不适合编译,否则会导致 "multiple bases have instance lay-out conflict" 错误 + # 'core/api/base.py', # API 基础类 + # 'core/api/account.py', # 账号相关 API + # 'core/api/friend.py', # 好友相关 API + # 'core/api/group.py', # 群组相关 API + # 'core/api/media.py', # 媒体相关 API + # 'core/api/message.py', # 消息相关 API + + # 数据模型(适合编译的高频使用数据类) + 'models/message.py', # 消息段模型 + 'models/sender.py', # 发送者模型 + 'models/objects.py', # API 响应数据模型 + + # 事件处理相关 + 'core/handlers/event_handler.py', # 事件处理器 + + # 注意:以下文件不适合编译 + # - 主程序文件(main.py) + # - 测试文件(tests/目录) + # - 插件文件(plugins/目录) + # - 编译脚本(compile_machine_code.py等) + # - 临时文件(scratch_files/目录) + # - 抽象基类(models/events/base.py) + # - 事件工厂(models/events/factory.py) + # - 包含复杂动态特性的文件 +] + +def list_compiled_modules(): + """列出已编译的模块""" + print(f"\n已编译的 {PLATFORM} 模块:") + print("=" * 50) + + # 查找所有编译后的文件 + compiled_files = [] + for ext in [EXTENSION, f'__mypyc{EXTENSION}']: + compiled_files.extend(glob.glob(f'**/*{ext}', recursive=True)) + + # 过滤掉虚拟环境中的文件 + compiled_files = [f for f in compiled_files if 'venv' not in f] + + if compiled_files: + for f in sorted(compiled_files): + size = os.path.getsize(f) // 1024 # KB + print(f"{f} ({size} KB)") + else: + print(f"未找到已编译的 {EXTENSION} 文件") + + print(f"\n总计: {len(compiled_files)} 个文件") + +def clean_compiled_files(): + """清理编译生成的文件""" + print(f"\n清理编译生成的 {EXTENSION} 文件...") + + # 查找所有编译后的文件 + compiled_files = [] + for ext in [EXTENSION, f'__mypyc{EXTENSION}']: + compiled_files.extend(glob.glob(f'**/*{ext}', recursive=True)) + + # 过滤掉虚拟环境中的文件 + compiled_files = [f for f in compiled_files if 'venv' not in f] + + if compiled_files: + for f in sorted(compiled_files): + try: + os.remove(f) + print(f"已删除: {f}") + except Exception as e: + print(f"删除失败 {f}: {e}") + + # 清理 build 目录 + if os.path.exists('build'): + try: + shutil.rmtree('build') + print("已删除 build 目录") + except Exception as e: + print(f"删除 build 目录失败: {e}") + else: + print(f"没有可清理的 {EXTENSION} 文件") + +def get_platform_specific_module_name(module_path): + """获取平台特定的模块文件名""" + module_name = module_path.replace('.py', '') + return f"{module_name}.{BUILD_PREFIX}{EXTENSION}" + +def compile_module(module_path): + """编译单个模块""" + print(f"\n编译: {module_path}") + + try: + # 直接调用 mypyc 命令行工具 + result = subprocess.run( + [sys.executable, '-m', 'mypyc', module_path], + capture_output=True, + text=True, + check=True + ) + + # 获取平台特定的模块名 + platform_module = get_platform_specific_module_name(module_path) + mypyc_platform_module = platform_module.replace(EXTENSION, f'__mypyc{EXTENSION}') + + # 检查编译产物是否在当前目录 + if os.path.exists(platform_module): + print(f" ✓ 编译成功: {platform_module}") + return True + else: + # 检查 build 目录中是否有编译产物 + build_module_path = os.path.join(BUILD_PATH, platform_module) + build_mypyc_path = os.path.join(BUILD_PATH, mypyc_platform_module) + + if os.path.exists(build_module_path): + # 如果在 build 目录中,复制到正确位置 + os.makedirs(os.path.dirname(platform_module), exist_ok=True) + shutil.copy2(build_module_path, platform_module) + shutil.copy2(build_mypyc_path, mypyc_platform_module) + print(f" ✓ 编译成功(已从 build 目录复制): {platform_module}") + return True + else: + print(f" ✗ 编译失败:找不到编译产物") + if result.stdout: + print(f" 编译输出:{result.stdout[:500]}...") + if result.stderr: + print(f" 错误信息:{result.stderr[:500]}...") + return False + + except subprocess.CalledProcessError as e: + print(f" ✗ 编译失败,退出码: {e.returncode}") + if e.stdout: + print(f" 编译输出:{e.stdout[:500]}...") + if e.stderr: + print(f" 错误信息:{e.stderr[:500]}...") + return False + except Exception as e: + print(f" ✗ 编译失败,意外错误: {e}") + return False + +def should_skip_module(module_path): + """检查模块是否应该被跳过编译""" + try: + with open(module_path, 'r', encoding='utf-8') as f: + content = f.read() + + # 检查是否包含抽象基类相关代码 + if 'from abc import ABC' in content or 'from abc import abstractmethod' in content: + return True, "包含抽象基类,不适合编译" + + # 检查是否包含动态特性 + if 'eval(' in content or 'exec(' in content or 'getattr(' in content or 'setattr(' in content: + return True, "包含动态特性,不适合编译" + + return False, "" + except Exception as e: + return True, f"读取文件时出错: {e}" + +def compile_all_modules(): + """编译所有指定的模块""" + print(f"\n开始编译 {len(MODULES)} 个模块 (平台: {PLATFORM})") + print("=" * 60) + + # 验证模块文件是否存在并检查是否适合编译 + valid_modules = [] + for module_path in MODULES: + if os.path.exists(module_path): + should_skip, reason = should_skip_module(module_path) + if should_skip: + print(f"跳过: {module_path} ({reason})") + else: + valid_modules.append(module_path) + else: + print(f"警告: 模块 {module_path} 不存在,将被跳过") + + if not valid_modules: + print("错误: 没有有效的模块可编译") + return False + + # 编译模块 + success_count = 0 + for module_path in valid_modules: + if compile_module(module_path): + success_count += 1 + + print(f"\n" + "=" * 60) + print(f"编译完成: {success_count}/{len(valid_modules)} 个模块成功") + + if success_count == len(valid_modules): + print("✓ 所有模块编译成功") + return True + else: + print("✗ 部分模块编译失败") + return False + +def main(): + """主函数""" + # 检查 Python 版本 + if not (sys.version_info.major == 3 and sys.version_info.minor == 14): + print("警告: 推荐使用 Python 3.14 以获得最佳性能") + print(f"当前版本: {sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}") + print("继续编译可能导致兼容性问题") + print() + + parser = argparse.ArgumentParser(description='跨平台 Python 模块编译脚本') + + group = parser.add_mutually_exclusive_group() + group.add_argument('--compile', '-c', action='store_true', default=True, + help='编译指定的模块 (默认)') + group.add_argument('--list', '-l', action='store_true', + help='列出已编译的模块') + group.add_argument('--clean', '-k', action='store_true', + help='清理编译生成的文件') + + args = parser.parse_args() + + # 检查是否安装了 mypyc + try: + import mypyc + except ImportError: + print("错误: 未安装 mypyc,请先安装: pip install mypyc") + sys.exit(1) + + if args.list: + list_compiled_modules() + elif args.clean: + clean_compiled_files() + else: + compile_all_modules() + print("\n使用 --list 选项查看已编译的模块") + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/scripts/compile_modules.py b/scripts/compile_modules.py new file mode 100644 index 0000000..f869d9e --- /dev/null +++ b/scripts/compile_modules.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python3 +""" +编译模块脚本 + +这个脚本会单独编译每个Python模块,确保每个模块都在正确位置生成独立的.pyd文件。 +""" +import os +import sys +import glob +from mypyc.build import mypycify +try: + from setuptools import setup +except ImportError: + from distutils.core import setup + +def compile_module(module_path): + """ + 编译单个模块 + + Args: + module_path: 要编译的Python模块路径 + """ + print(f"\nCompiling {module_path}...") + try: + ext_modules = mypycify([module_path]) + setup(name=f'compiled_{os.path.basename(module_path).replace(".py", "")}', + ext_modules=ext_modules) + return True + except Exception as e: + print(f"Error compiling {module_path}: {e}") + return False + +def main(): + """ + 主函数 + """ + # 检查 Python 版本 + if not (sys.version_info.major == 3 and sys.version_info.minor == 14): + print("警告: 推荐使用 Python 3.14 以获得最佳性能") + print(f"当前版本: {sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}") + print("继续编译可能导致兼容性问题") + print() + + # 要编译的模块列表 + modules = [ + 'core/utils/json_utils.py', # JSON 处理 + 'core/utils/executor.py', # 代码执行引擎 + 'core/managers/command_manager.py', # 指令匹配和分发 + 'core/managers/admin_manager.py', # 管理员管理 + 'core/managers/permission_manager.py', # 权限管理 + 'core/ws.py', # WebSocket 核心 + 'core/managers/plugin_manager.py', # 插件管理器 + 'core/bot.py', # Bot 核心抽象 + 'core/config_loader.py', # 配置加载 + ] + + # 自动添加 events 模型 + event_models = glob.glob('models/events/*.py') + event_models = [m for m in event_models if not m.endswith('__init__.py')] + modules.extend(event_models) + + print(f"Found {len(modules)} modules to compile.") + + success_count = 0 + for module in modules: + if compile_module(module): + success_count += 1 + + print(f"\n--- Compilation Summary ---") + print(f"Total modules: {len(modules)}") + print(f"Successfully compiled: {success_count}") + print(f"Failed: {len(modules) - success_count}") + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/scripts/export_requirements.py b/scripts/export_requirements.py new file mode 100644 index 0000000..d0c51b5 --- /dev/null +++ b/scripts/export_requirements.py @@ -0,0 +1,137 @@ +#!/usr/bin/env python3 +""" +导出项目依赖到 requirements.txt 文件 + +支持两种模式: +1. 默认模式:导出当前虚拟环境中的所有包(pip freeze) +2. 本地模式:只导出当前项目的依赖(pip freeze --local) + +使用方法: + python export_requirements.py [options] + +选项: + --local, -l 只导出当前项目的依赖(推荐) + --output, -o 指定输出文件路径(默认为 requirements.txt) + --help, -h 显示帮助信息 +""" +import subprocess +import sys +import argparse + +def run_pip_freeze(local_mode=False): + """ + 运行 pip freeze 命令 + + Args: + local_mode: 是否只导出当前项目依赖 + + Returns: + (success, output): 成功标志和输出内容 + """ + cmd = ['pip', 'freeze'] + if local_mode: + cmd.append('--local') + + try: + result = subprocess.run( + cmd, + capture_output=True, + text=True, + check=True, + encoding='utf-8' + ) + return True, result.stdout + except subprocess.CalledProcessError as e: + error_msg = f"pip freeze 命令失败,退出码: {e.returncode}\n" + if e.stderr: + error_msg += f"错误信息: {e.stderr}" + return False, error_msg + except FileNotFoundError: + return False, "错误: 未找到 pip 命令,请确保 Python 环境已正确安装" + except Exception as e: + return False, f"未知错误: {e}" + +def write_requirements_file(output_path, content): + """ + 将依赖内容写入文件 + + Args: + output_path: 输出文件路径 + content: 依赖内容 + + Returns: + success: 是否成功 + """ + try: + with open(output_path, 'w', encoding='utf-8') as f: + f.write(content) + + # 统计行数(忽略空行) + lines = [line.strip() for line in content.split('\n') if line.strip()] + return True, len(lines) + except IOError as e: + return False, f"写入文件失败: {e}" + except Exception as e: + return False, f"未知错误: {e}" + +def main(): + """主函数""" + parser = argparse.ArgumentParser(description='导出项目依赖到 requirements.txt 文件') + + parser.add_argument('--local', '-l', action='store_true', + help='只导出当前项目的依赖(推荐)') + parser.add_argument('--output', '-o', default='requirements.txt', + help='指定输出文件路径(默认为 requirements.txt)') + + args = parser.parse_args() + + print("=" * 60) + print("NEO Bot 依赖导出工具") + print("=" * 60) + + # 显示模式信息 + if args.local: + print("模式: 本地模式(只导出当前项目依赖)") + else: + print("模式: 全局模式(导出所有已安装包)") + print("提示: 建议使用 --local 选项只导出当前项目依赖") + + print(f"输出文件: {args.output}") + print() + + # 运行 pip freeze + print("正在收集依赖信息...") + success, output = run_pip_freeze(args.local) + + if not success: + print(f"错误: {output}") + sys.exit(1) + + # 写入文件 + print("正在写入文件...") + success, result = write_requirements_file(args.output, output) + + if not success: + print(f"错误: {result}") + sys.exit(1) + + line_count = result + print("✓ 依赖导出完成") + print(f" 文件: {args.output}") + print(f" 依赖数量: {line_count} 个包") + + # 显示前几个依赖(如果有) + lines = [line.strip() for line in output.split('\n') if line.strip()] + if lines: + print("\n前5个依赖:") + for i, line in enumerate(lines[:5], 1): + print(f" {i}. {line}") + if len(lines) > 5: + print(f" ... 还有 {len(lines) - 5} 个依赖") + + print("\n" + "=" * 60) + print("提示: 可以使用 pip install -r requirements.txt 安装这些依赖") + print("=" * 60) + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/templates/help.html b/templates/help.html index 4fdc65e..1388304 100644 --- a/templates/help.html +++ b/templates/help.html @@ -3,132 +3,235 @@ - NeoBot 帮助菜单 + CalglauBot Menu + -
+
+
-

NeoBot

-

功能插件列表

+
+
+
+
+
+
NeoBot System
-
+
+ +
+

功能中心

+

Dashboard & Command List · {{ plugins|length }} Modules Loaded

+
+ + {% for plugin in plugins %}
-
- {{ plugin.name }} -
-
{{ plugin.description }}
-
- {{ plugin.usage }} +
+
+ {{ plugin.name }} + Plugin +
+
+ {{ plugin.description }} +
+ + +
{{ plugin.usage }}
{% endfor %}
- \ No newline at end of file + diff --git a/x = 5.py b/x = 5.py deleted file mode 100644 index cc45750..0000000 --- a/x = 5.py +++ /dev/null @@ -1,10 +0,0 @@ -x = 5 - -# 它有自己的身份 -print(id(x)) - -# 它有自己的类型 -print(type(x)) - -# 它甚至有自己的工具! -print(x.bit_length()) \ No newline at end of file