/// // 打开设置界面时触发 async function onSettingWindowCreated(view: Element) { window.llonebot.log("setting window created"); let config = await window.llonebot.getConfig() const httpClass = "http"; const httpPostClass = "http-post"; const wsClass = "ws"; const reverseWSClass = "reverse-ws"; function createHttpHostEleStr(host: string) { let eleStr = `

HTTP事件上报地址(http)

` return eleStr } function createWsHostEleStr(host: string) { let eleStr = `

事件上报地址(反向websocket)

` return eleStr } let httpHostsEleStr = "" for (const host of config.ob11.httpHosts) { httpHostsEleStr += createHttpHostEleStr(host); } let wsHostsEleStr = "" for (const host of config.ob11.wsHosts) { wsHostsEleStr += createWsHostEleStr(host); } let html = `
启用HTTP服务
HTTP监听端口
启用HTTP事件上报
${httpHostsEleStr}
启用正向Websocket协议
正向Websocket监听端口
启用反向Websocket协议
${wsHostsEleStr}
Access Token
上报文件进行base64编码
不开启时,上报文件将以本地路径形式发送
debug模式
开启后上报消息添加raw字段附带原始消息
上报自身消息
开启后上报自己发出的消息
日志
目录:${window.LiteLoader.plugins["LLOneBot"].path.data}
` const parser = new DOMParser(); const doc = parser.parseFromString(html, "text/html"); function addHostEle(type: string, initValue: string = "") { let addressEle, hostItemsEle; if (type === "ws") { let addressDoc = parser.parseFromString(createWsHostEleStr(initValue), "text/html"); addressEle = addressDoc.querySelector("setting-item") hostItemsEle = document.getElementById("wsHostItems"); } else { let addressDoc = parser.parseFromString(createHttpHostEleStr(initValue), "text/html"); addressEle = addressDoc.querySelector("setting-item") hostItemsEle = document.getElementById("httpHostItems"); } hostItemsEle.appendChild(addressEle); } doc.getElementById("addHttpHost").addEventListener("click", () => addHostEle("http")) doc.getElementById("addWsHost").addEventListener("click", () => addHostEle("ws")) function switchClick(eleId: string, configKey: string, _config=null) { if (!_config){ _config = config } doc.getElementById(eleId)?.addEventListener("click", (e) => { const switchEle = e.target as HTMLInputElement if (_config[configKey]) { _config[configKey] = false switchEle.removeAttribute("is-active") } else { _config[configKey] = true switchEle.setAttribute("is-active", "") } // 妈蛋,手动操作DOM越写越麻烦,要不用vue算了 const keyClassMap = { "enableHttp": httpClass, "enableHttpPost": httpPostClass, "enableWs": wsClass, "enableWsReverse": reverseWSClass, } for (let e of document.getElementsByClassName(keyClassMap[configKey])) { e["style"].display = _config[configKey] ? "" : "none" } window.llonebot.setConfig(config) }) } switchClick("http", "enableHttp", config.ob11); switchClick("httpPost", "enableHttpPost", config.ob11); switchClick("websocket", "enableWs", config.ob11); switchClick("websocketReverse", "enableWsReverse", config.ob11); switchClick("debug", "debug"); switchClick("switchBase64", "enableBase64"); switchClick("reportSelfMessage", "reportSelfMessage"); switchClick("log", "log"); doc.getElementById("save")?.addEventListener("click", () => { const httpPortEle: HTMLInputElement = document.getElementById("httpPort") as HTMLInputElement; const httpHostEles: HTMLCollectionOf = document.getElementsByClassName("httpHost") as HTMLCollectionOf; const wsPortEle: HTMLInputElement = document.getElementById("wsPort") as HTMLInputElement; const wsHostEles: HTMLCollectionOf = document.getElementsByClassName("wsHost") as HTMLCollectionOf; const tokenEle = document.getElementById("token") as HTMLInputElement; // 获取端口和host const httpPort = httpPortEle.value let httpHosts: string[] = []; for (const hostEle of httpHostEles) { const value = hostEle.value.trim(); value && httpHosts.push(value); } const wsPort = wsPortEle.value; const token = tokenEle.value.trim(); let wsHosts: string[] = []; for (const hostEle of wsHostEles) { const value = hostEle.value.trim(); value && wsHosts.push(value); } config.ob11.httpPort = parseInt(httpPort); config.ob11.httpHosts = httpHosts; config.ob11.wsPort = parseInt(wsPort); config.ob11.wsHosts = wsHosts; config.token = token; window.llonebot.setConfig(config); alert("保存成功"); }) doc.body.childNodes.forEach(node => { view.appendChild(node); }); } export { onSettingWindowCreated }