1. 优化HTTP客户端关闭异常捕获范围 2. 重构事件工具方法抽取公共模块 3. 新增频控缓存常量与身份缓存配置 4. 完善适配器依赖注入与配置读取 5. 实现被动消息频控与令牌刷新串行化 6. 修复会话、状态、目录等适配器逻辑 7. 优化探测适配器账户获取逻辑 8. 完善凭据轮换与生命周期钩子 9. 优化WebSocket连接处理与心跳机制
123 lines
7.1 KiB
JSON
123 lines
7.1 KiB
JSON
{
|
|
"id": "com.yuxi.channels.qqbot",
|
|
"name": "QQ Bot",
|
|
"version": "1.0.0",
|
|
"channel_type": "qqbot",
|
|
"icon": "message-circle",
|
|
"entry_module": "yuxi.channels.plugins.qqbot.entry",
|
|
"provides": ["qqbot"],
|
|
"lifecycle": ["init", "start", "stop", "pause", "resume", "unload", "reconfigure", "fail"],
|
|
"compatibility": {
|
|
"min_host_version": "1.0.0",
|
|
"qqbot_api_version": "v2"
|
|
},
|
|
"failure_policy": "degrade",
|
|
"depends": [],
|
|
"critical": false,
|
|
"requires_dm_pairing": true,
|
|
"requires_outbound_delivery": true,
|
|
"max_message_length": 4000,
|
|
"supports_credential_cloning": false,
|
|
"transport_mode": "stream",
|
|
"credential_strategy": {
|
|
"type": "static",
|
|
"acquire_method": "manual",
|
|
"required_fields": ["app_id", "app_secret"],
|
|
"optional_fields": [],
|
|
"supports_rotation": true,
|
|
"supports_revocation": false
|
|
},
|
|
"capabilities": {
|
|
"rich_message": true,
|
|
"streaming": false,
|
|
"typing_indicator": false,
|
|
"message_edit": false,
|
|
"message_recall": true,
|
|
"supports_reaction": false,
|
|
"supports_pin": false,
|
|
"supports_card_update": false,
|
|
"supports_card_update_streaming": false,
|
|
"supports_image_inbound": true,
|
|
"supports_video_inbound": true,
|
|
"supports_image_outbound": true,
|
|
"supports_video_outbound": true,
|
|
"mention": true,
|
|
"command": false,
|
|
"directory": true,
|
|
"doctor": true,
|
|
"whitelist": true,
|
|
"wizard": true,
|
|
"tools": false,
|
|
"status": true,
|
|
"probeable": true,
|
|
"identity_resolver": true,
|
|
"lifecycle": true,
|
|
"supports_qr_login": false,
|
|
"agent_collaboration": false
|
|
},
|
|
"capability_requirements": [
|
|
["rich_message", ["app_id", "app_secret"]],
|
|
["message_recall", ["app_id", "app_secret"]],
|
|
["supports_image_inbound", ["app_id", "app_secret"]],
|
|
["supports_video_inbound", ["app_id", "app_secret"]],
|
|
["supports_image_outbound", ["app_id", "app_secret"]],
|
|
["supports_video_outbound", ["app_id", "app_secret"]],
|
|
["mention", ["app_id", "app_secret"]],
|
|
["directory", ["app_id", "app_secret"]],
|
|
["doctor", ["app_id", "app_secret"]],
|
|
["whitelist", ["app_id", "app_secret"]],
|
|
["wizard", ["app_id", "app_secret"]],
|
|
["status", ["app_id", "app_secret"]],
|
|
["probeable", ["app_id", "app_secret"]],
|
|
["identity_resolver", ["app_id", "app_secret"]],
|
|
["lifecycle", ["app_id", "app_secret"]]
|
|
],
|
|
"resource_quota": {
|
|
"max_cpu": "15.0",
|
|
"max_memory": "128MB",
|
|
"max_connections": 20,
|
|
"max_calls_per_sec": 20
|
|
},
|
|
"accessible_ports": [
|
|
"ConfigPort",
|
|
"LoggerPort",
|
|
"PersistencePort",
|
|
"CachePort",
|
|
"TracerPort",
|
|
"ConversationPort",
|
|
"IdentityResolverPort"
|
|
],
|
|
"injectable_pipelines": ["inbound", "outbound"],
|
|
"config_schema": [
|
|
{"key": "app_id", "type": "string", "required": true, "default": null, "hot_reloadable": false, "scope": "account", "constraints": {}},
|
|
{"key": "app_secret", "type": "string", "required": true, "default": null, "hot_reloadable": false, "sensitive": true, "scope": "account", "constraints": {}},
|
|
{"key": "intents", "type": "integer", "required": false, "default": 100663296, "hot_reloadable": false, "scope": "channel", "constraints": {"min": 0, "max": 2147483647}},
|
|
{"key": "api_base", "type": "string", "required": false, "default": "https://api.sgroup.qq.com", "hot_reloadable": false, "scope": "channel", "constraints": {"pattern": "^https://"}},
|
|
{"key": "gateway_url", "type": "string", "required": false, "default": null, "hot_reloadable": false, "scope": "channel", "constraints": {"pattern": "^(wss|https)://"}},
|
|
{"key": "sandbox", "type": "boolean", "required": false, "default": false, "hot_reloadable": false, "scope": "channel", "constraints": {}},
|
|
{"key": "http_timeout_ms", "type": "integer", "required": false, "default": 30000, "hot_reloadable": true, "scope": "channel", "constraints": {"min": 5000, "max": 60000}},
|
|
{"key": "ws_heartbeat_interval_ms", "type": "integer", "required": false, "default": 30000, "hot_reloadable": true, "scope": "channel", "constraints": {"min": 10000, "max": 60000}},
|
|
{"key": "ws_stall_timeout_ms", "type": "integer", "required": false, "default": 120000, "hot_reloadable": true, "scope": "channel", "constraints": {"min": 60000, "max": 300000}},
|
|
{"key": "passive_reply_limit_c2c", "type": "integer", "required": false, "default": 4, "hot_reloadable": true, "scope": "channel", "constraints": {"min": 1, "max": 10}},
|
|
{"key": "passive_reply_limit_group", "type": "integer", "required": false, "default": 5, "hot_reloadable": true, "scope": "channel", "constraints": {"min": 1, "max": 10}},
|
|
{"key": "passive_reply_ttl_c2c_ms", "type": "integer", "required": false, "default": 3600000, "hot_reloadable": true, "scope": "channel", "constraints": {"min": 600000, "max": 7200000}},
|
|
{"key": "passive_reply_ttl_group_ms", "type": "integer", "required": false, "default": 300000, "hot_reloadable": true, "scope": "channel", "constraints": {"min": 60000, "max": 1800000}},
|
|
{"key": "group_active_qpm_account_verified", "type": "integer", "required": false, "default": 60, "hot_reloadable": true, "scope": "channel", "constraints": {"min": 1, "max": 120}},
|
|
{"key": "group_active_qpm_account_unverified", "type": "integer", "required": false, "default": 30, "hot_reloadable": true, "scope": "channel", "constraints": {"min": 1, "max": 120}},
|
|
{"key": "group_active_qpm_per_group", "type": "integer", "required": false, "default": 20, "hot_reloadable": true, "scope": "channel", "constraints": {"min": 1, "max": 60}},
|
|
{"key": "token_cache_ttl", "type": "integer", "required": false, "default": 7200, "hot_reloadable": true, "scope": "channel", "constraints": {"min": 60, "max": 7200}},
|
|
{"key": "user_cache_ttl", "type": "integer", "required": false, "default": 3600, "hot_reloadable": true, "scope": "channel", "constraints": {"min": 60, "max": 7200}},
|
|
{"key": "identity_cache_ttl", "type": "integer", "required": false, "default": 60, "hot_reloadable": true, "scope": "channel", "constraints": {"min": 10, "max": 600}},
|
|
{"key": "url_whitelist", "type": "array", "required": false, "default": [], "hot_reloadable": true, "scope": "channel", "constraints": {"max_items": 20}}
|
|
],
|
|
"env_vars": [
|
|
{"name": "QQBOT_APP_ID", "description": "QQ Bot 应用 App ID", "required": true, "default": null, "sensitive": false},
|
|
{"name": "QQBOT_APP_SECRET", "description": "QQ Bot 应用 Client Secret", "required": true, "default": null, "sensitive": true},
|
|
{"name": "QQBOT_INTENTS", "description": "Intents 位掩码(十进制或 0x 十六进制)", "required": false, "default": "0x06000000", "sensitive": false},
|
|
{"name": "QQBOT_API_BASE", "description": "QQ Bot API 基础地址", "required": false, "default": "https://api.sgroup.qq.com", "sensitive": false},
|
|
{"name": "QQBOT_GATEWAY_URL", "description": "WebSocket Gateway 接入点(留空则通过 /gateway 动态获取)", "required": false, "default": null, "sensitive": false},
|
|
{"name": "QQBOT_SANDBOX", "description": "是否使用沙箱环境", "required": false, "default": "false", "sensitive": false},
|
|
{"name": "QQBOT_HTTP_TIMEOUT_MS", "description": "HTTP 客户端超时(毫秒)", "required": false, "default": "30000", "sensitive": false}
|
|
]
|
|
}
|