mirror of
https://github.com/hansjone/oclaw.git
synced 2026-10-09 03:30:48 +08:00
初始化:独立 oclaw 仓库首提交
- 在 oclaw/ 下重新初始化 Git 仓库 - 补齐子仓库 .gitignore,避免提交本地运行态数据(_local、node_modules、logs 等) - 提交当前工程代码与配置 Made-with: Cursor
This commit is contained in:
commit
ba3836f00f
579 changed files with 83112 additions and 0 deletions
106
gateway/server_methods/channels.py
Normal file
106
gateway/server_methods/channels.py
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
from __future__ import annotations
|
||||
|
||||
from typing import Any
|
||||
|
||||
from .shared_types import GatewayRequestHandlers
|
||||
from .validation import error_shape
|
||||
|
||||
|
||||
def _validate_channels_status_params(params: Any) -> bool:
|
||||
if not isinstance(params, dict):
|
||||
return False
|
||||
if "probe" in params and params["probe"] is not None and not isinstance(params["probe"], bool):
|
||||
return False
|
||||
if "timeoutMs" in params and params["timeoutMs"] is not None and not isinstance(params["timeoutMs"], int):
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def _validate_channels_start_params(params: Any) -> bool:
|
||||
return isinstance(params, dict) and isinstance(params.get("channel"), str)
|
||||
|
||||
|
||||
def _validate_channels_logout_params(params: Any) -> bool:
|
||||
return isinstance(params, dict) and isinstance(params.get("channel"), str)
|
||||
|
||||
|
||||
def _channels_status_handler(opts: dict[str, Any]) -> Any:
|
||||
respond = opts.get("respond")
|
||||
params = opts.get("params")
|
||||
context = opts.get("context") or {}
|
||||
if not callable(respond):
|
||||
return None
|
||||
if not _validate_channels_status_params(params):
|
||||
respond(False, None, error_shape("INVALID_REQUEST", "invalid channels.status params"), None)
|
||||
return None
|
||||
runtime = context.get("get_runtime_snapshot")() if callable(context.get("get_runtime_snapshot")) else {}
|
||||
if not isinstance(runtime, dict):
|
||||
runtime = {}
|
||||
if "image_generation_providers" not in runtime:
|
||||
providers = context.get("image_generation_providers")
|
||||
if isinstance(providers, list):
|
||||
runtime = {
|
||||
**runtime,
|
||||
"image_generation_providers": [p for p in providers if isinstance(p, dict)],
|
||||
}
|
||||
payload = {
|
||||
"ts": 0,
|
||||
"channels": {},
|
||||
"channelAccounts": {},
|
||||
"runtime": runtime,
|
||||
}
|
||||
respond(True, payload, None, None)
|
||||
return None
|
||||
|
||||
|
||||
def _channels_start_handler(opts: dict[str, Any]) -> Any:
|
||||
respond = opts.get("respond")
|
||||
params = opts.get("params") or {}
|
||||
context = opts.get("context") or {}
|
||||
if not callable(respond):
|
||||
return None
|
||||
if not _validate_channels_start_params(params):
|
||||
respond(False, None, error_shape("INVALID_REQUEST", "invalid channels.start params"), None)
|
||||
return None
|
||||
channel = str(params.get("channel") or "").strip()
|
||||
account_id = str(params.get("accountId") or "").strip() or "default"
|
||||
try:
|
||||
start = context.get("start_channel")
|
||||
if callable(start):
|
||||
start(channel, account_id)
|
||||
respond(True, {"channel": channel, "accountId": account_id, "started": True}, None, None)
|
||||
except Exception as exc:
|
||||
respond(False, None, error_shape("UNAVAILABLE", str(exc)), None)
|
||||
return None
|
||||
|
||||
|
||||
def _channels_logout_handler(opts: dict[str, Any]) -> Any:
|
||||
respond = opts.get("respond")
|
||||
params = opts.get("params") or {}
|
||||
context = opts.get("context") or {}
|
||||
if not callable(respond):
|
||||
return None
|
||||
if not _validate_channels_logout_params(params):
|
||||
respond(False, None, error_shape("INVALID_REQUEST", "invalid channels.logout params"), None)
|
||||
return None
|
||||
channel = str(params.get("channel") or "").strip()
|
||||
account_id = str(params.get("accountId") or "").strip() or "default"
|
||||
try:
|
||||
stop = context.get("stop_channel")
|
||||
if callable(stop):
|
||||
stop(channel, account_id)
|
||||
mark = context.get("mark_channel_logged_out")
|
||||
if callable(mark):
|
||||
mark(channel, True, account_id)
|
||||
respond(True, {"channel": channel, "accountId": account_id, "cleared": True}, None, None)
|
||||
except Exception as exc:
|
||||
respond(False, None, error_shape("UNAVAILABLE", str(exc)), None)
|
||||
return None
|
||||
|
||||
|
||||
channels_handlers: GatewayRequestHandlers = {
|
||||
"channels.status": _channels_status_handler,
|
||||
"channels.start": _channels_start_handler,
|
||||
"channels.logout": _channels_logout_handler,
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue