logo
0
0
WeChat Login
feat: 接入 317ak API 平台并实现关键词触发功能

AstrBot API 聚合插件

一个用于聚合第三方 API 的 AstrBot 插件,支持多种 API 服务的统一管理和调用。

✨ 功能特性

  • 🔌 插件化架构 - 支持 API 处理器的动态注册和管理
  • 📦 缓存支持 - 可选的响应缓存,减少重复请求
  • 🔄 自动重试 - 请求失败时自动重试
  • 异步处理 - 基于 aiohttp 的异步 HTTP 请求
  • 🎯 命令系统 - 提供完整的命令行接口
  • ⚙️ 灵活配置 - 支持在 WebUI 中配置 API 密钥和参数
  • 🔑 关键词触发 - 支持用户发送关键词自动触发 API 调用

📦 安装方法

  1. 将插件文件夹放置到 AstrBot 的 data/plugins/ 目录下
  2. 在 WebUI 中配置插件参数
  3. 重载插件

🚀 快速开始

基本命令

命令说明
/api list列出所有可用的 API 处理器
/api keywords列出所有可用的关键词触发
/api call <名称>调用指定的 API 处理器
/api cache status查看缓存状态
/api cache clear清除所有缓存
/api reload重新加载 API 配置(管理员)

示例用法

# 列出可用的 API /api list # 调用指定的 API /api call weather 北京 # 查看缓存状态 /api cache status # 清除缓存 /api cache clear # 查看关键词列表 /api keywords

关键词触发

配置好 ak317 类型的 API 后,用户可以直接发送关键词触发对应的 API:

# 发送关键词 随机自拍 → 返回随机自拍图片 网易云点歌 → 返回网易云点歌结果 毒鸡汤 → 返回毒鸡汤内容

⚙️ 配置说明

_conf_schema.json 中定义了以下配置项:

配置项类型默认值说明
api_providersobject{}API 提供商配置列表
keyword_trigger_enabledbooltrue是否启用关键词触发
default_timeoutint30默认请求超时时间(秒)
max_retriesint3请求失败最大重试次数
enable_cachebooltrue是否启用响应缓存
cache_ttlint3600缓存有效期(秒)
log_levelstringINFO日志级别

配置示例

在 WebUI 中配置 API 提供商:

{ "api_providers": { "ak317": { "type": "ak317", "api_key": "你的密钥", "base_url": "https://api.317ak.cn", "enabled_apis": null, "keyword_mapping": { "自拍": "随机自拍", "点歌": "网易云点歌" } } } }

Ak317 配置说明

配置项类型说明
typestring固定为 ak317
api_keystring317ak 平台的 API 密钥 (ckey)
base_urlstringAPI 基础 URL,默认 https://api.317ak.cn
enabled_apisarray启用的 API 列表,为 null 启用全部
keyword_mappingobject自定义关键词映射 {触发词: API名称}

支持的 API 类型

目前支持以下 API 提供商:

类型说明配置项
ak317317ak API 平台api_key, base_url, enabled_apis, keyword_mapping
openaiOpenAI Chat APIapi_key, model, base_url
weatherWeatherAPI 天气api_key, base_url

🔧 扩展开发

创建自定义 API 处理器

继承 BaseAPIHandler 类并实现必要的方法:

from api_handlers import BaseAPIHandler, APIResponse class MyAPIHandler(BaseAPIHandler): def __init__(self, api_key: str, **kwargs): super().__init__( name="my_api", api_key=api_key, base_url="https://api.example.com", **kwargs ) def _get_default_headers(self) -> dict: return { "Authorization": f"Bearer {self.api_key}", "Content-Type": "application/json" } async def call(self, query: str) -> APIResponse: return await self.request( method="GET", endpoint="search", params={"q": query} )

注册处理器

在插件中注册自定义处理器:

handler = MyAPIHandler(api_key="your-key") plugin.register_handler("my_api", handler)

📁 文件结构

astrbot-api-aggregation/ ├── main.py # 插件主入口 ├── metadata.yaml # 插件元数据 ├── requirements.txt # Python 依赖 ├── _conf_schema.json # 配置模式定义 ├── config.example.json # 配置示例 ├── api_handlers/ # API 处理器模块 │ ├── __init__.py │ ├── base.py # 基础 API 处理器 │ ├── examples.py # 示例处理器 │ └── ak317.py # 317ak 处理器 └── README.md # 插件说明文档

📄 许可证

AGPL-3.0 License

🤝 贡献

欢迎提交 Issue 和 Pull Request!