1.0.7 • Published 5 months ago
koishi-plugin-message-gateway v1.0.7
🚀 koishi-plugin-message-gateway
一个功能强大的消息网关插件,用于转发和处理 Koishi 机器人的消息。
📝 功能介绍
- 🔄 支持多种消息匹配规则(前缀匹配和正则匹配)
- 🛡️ 内置限流和黑白名单机制
- 🔧 高度可配置的数据字段选项
- 🔁 支持请求重试和错误处理
- 💬 支持自定义响应模板
- 🔍 调试模式支持
🎯 使用方法
- 配置 API 地址与 token
- 设置消息前缀和正则匹配规则
- 自定义需要发送到 API 的数据字段
- 根据需要配置限流、黑白名单等高级功能
注意: 在群聊中需要 @机器人 才会处理消息。
⚙️ 配置说明
基础配置
{
"apis": {
"apiName": {
"url": "http://your-api-endpoint", // API 地址(必填)
"token": "your-token", // API 认证 token
"customHeaders": {}, // 自定义请求头
"timeout": 5000, // 请求超时时间(毫秒)
"triggers": [ // 触发规则
{
"prefix": "指令前缀1", // 消息前缀匹配
"regex": "正则表达式1" // 正则匹配模式
}
]
}
},
"defaultApiKey": "apiName" // 默认API键
}
🔧 数据字段配置
可以自定义发送到 API 的数据字段:
{
"sendFields": {
"userId": true, // 用户 ID
"username": true, // 用户名
"nickname": true, // 用户昵称
"messageId": true, // 消息 ID
"timestamp": true, // 时间戳
"platform": true, // 平台信息
"channelId": true, // 频道 ID
"channelName": false, // 频道名称
"guildId": false, // 服务器 ID
"guildName": false // 服务器名称
}
}
⚡ 性能配置
{
"timeout": 5000, // API 请求超时时间(毫秒)
"regexTimeout": 1000, // 正则匹配超时时间(毫秒)
"rateLimit": {
"interval": 60000, // 限流时间窗口(毫秒)
"maxRequests": 30 // 时间窗口内最大请求数
}
}
🔄 重试配置
{
"retry": {
"maxAttempts": 3, // 最大重试次数
"initialDelay": 1000, // 初始延迟(毫秒)
"maxDelay": 5000, // 最大延迟(毫秒)
"factor": 2 // 退避因子
}
}
📝 响应模板配置
支持自定义各种场景的响应消息:
{
"templates": {
"rateLimit": {
"globalLimit": "系统繁忙,请{time}秒后重试",
"userLimit": "您的操作太快啦,请{time}秒后重试",
"channelLimit": "当前频道消息太多,请{time}秒后重试"
},
"error": {
"network": "网络连接失败,请检查网络设置",
"timeout": "响应超时,请稍后重试",
"service": "服务暂时不可用,请稍后重试",
"unknown": "处理失败,请稍后重试"
}
}
}
🛡️ 黑名单配置
{
"blacklist": {
"users": ["user1", "user2"], // 用户黑名单
"channels": ["channel1", "channel2"] // 频道黑名单
}
}
🛡️ 安全特性
- ✅ 内置限流机制防止滥用
- ✅ 黑白名单支持
- ✅ 超时保护
- ✅ 错误重试机制
🔍 调试功能
启用调试模式可以查看详细的处理日志:
{
"debug": true
}
📈 性能优化
- ⚡ 正则匹配超时保护
- 🔄 消息队列处理机制
- ⏱️ 可配置的超时和重试策略
🔄 工作流程
🔍 接收到消息后,进行以下检查:
- 检查用户是否在黑名单中
- 检查频道是否在黑名单中
- 检查是否超过限流阈值
- 检查是否为私聊或被@
🧐 消息匹配:
- 根据前缀规则匹配
- 根据正则规则匹配
- 如果没有匹配,使用默认API
📤 消息发送:
- 构建请求数据(根据字段配置)
- 发送到目标API
- 处理重试逻辑
- 返回API响应
🚀 使用示例
配置多个API,根据不同前缀路由到不同服务:
{
"apis": {
"chatGPT": {
"url": "https://api.chatgpt.com",
"triggers": [{ "prefix": "ai", "regex": "^gpt.*" }]
},
"weatherAPI": {
"url": "https://api.weather.com",
"triggers": [{ "prefix": "天气", "regex": "^查询.*天气" }]
},
"translationAPI": {
"url": "https://api.translation.com",
"triggers": [{ "prefix": "翻译", "regex": "^translate.*" }]
}
},
"defaultApiKey": "chatGPT"
}
🤝 贡献指南
欢迎提交 Issue 和 Pull Request 来完善此插件!
📄 许可证
MIT License