From 6cc1931739bbed3cc9f3b016310b424718a4adba Mon Sep 17 00:00:00 2001 From: CMLiussss <24787744+cmliu@users.noreply.github.com> Date: Sun, 10 Mar 2024 21:59:08 +0800 Subject: [PATCH] Update _worker.js --- _worker.js | 78 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 45 insertions(+), 33 deletions(-) diff --git a/_worker.js b/_worker.js index 187db78..85394ec 100644 --- a/_worker.js +++ b/_worker.js @@ -1,9 +1,11 @@ -// 部署完成后在网址后面加上这个,获取自建节点和机场聚合节点,/?token=auto +// 部署完成后在网址后面加上这个,获取自建节点和机场聚合节点,/?token=auto或/auto或 let mytoken = 'auto'; //可以随便取,或者uuid生成,https://1024tools.com/uuid let BotToken =''; //可以为空,或者@BotFather中输入/start,/newbot,并关注机器人 let ChatID =''; //可以为空,或者@userinfobot中获取,/start +let TG = 0; //1 为推送所有的访问信息,0 为不推送订阅转换后端的访问信息与异常访问 +let SUBUpdateTime = 6; //自定义订阅更新时间,单位小时 //自建节点 const MainData = ` @@ -21,8 +23,6 @@ const urls = [ let subconverter = "api.v1.mk"; //在线订阅转换后端,目前使用肥羊的订阅转换功能。支持自建psub 可自行搭建https://github.com/bulianglin/psub let subconfig = "https://raw.githubusercontent.com/cmliu/ACL4SSR/main/Clash/config/ACL4SSR_Online_Full.ini"; //订阅配置文件 -//addEventListener('fetch', event => { event.respondWith(handleRequest(event.request)) }) - export default { async fetch (request,env) { const userAgentHeader = request.headers.get('User-Agent'); @@ -32,35 +32,15 @@ export default { mytoken = env.TOKEN || mytoken; BotToken = env.TGTOKEN || BotToken; ChatID = env.TGID || ChatID; + TG = env.TG || TG; - if (!(token == mytoken || url.pathname.includes("/"+ mytoken))) { - //await sendMessage("#Token错误信息", request.headers.get('CF-Connecting-IP'), `Invalid Token: ${token}`); + if ( !(token == mytoken || url.pathname == ("/"+ mytoken) || url.pathname.includes("/"+ mytoken + "?")) ) { + if ( TG == 1 && url.pathname !== "/" && url.pathname !== "/favicon.ico" ) await sendMessage("#异常访问", request.headers.get('CF-Connecting-IP'), `UA: ${userAgent}\n域名: ${url.hostname}\n入口: ${url.pathname + url.search}`); return new Response('Hello World!', { status: 403 }); + } else if ( TG == 1 || !userAgent.includes('subconverter') ){ + await sendMessage("#获取订阅", request.headers.get('CF-Connecting-IP'), `UA: ${userAgent}\n域名: ${url.hostname}\n入口: ${url.pathname + url.search}`); } - let req_data = ""; - req_data += MainData; - - try { - const responses = await Promise.all(urls.map(url => fetch(url,{ - method: 'get', - headers: { - 'Accept': 'text/html,application/xhtml+xml,application/xml;', - 'User-Agent': 'CF-Workers-SUB/cmliu' - } - }))); - - for (const response of responses) { - if (response.ok) { - const content = await response.text(); - req_data += atob(content) + '\n'; - } - } - } catch (error) { - - } - - await sendMessage("#获取订阅", request.headers.get('CF-Connecting-IP'), `UA: ${userAgent}\n域名: ${url.hostname}\n入口: ${url.pathname + url.search}`); if (userAgent.includes('clash')) { const subconverterUrl = `https://${subconverter}/sub?target=clash&url=${encodeURIComponent(request.url)}&insert=false&config=${encodeURIComponent(subconfig)}&emoji=true&list=false&tfo=false&scv=false&fdn=false&sort=false&new_name=true`; @@ -73,8 +53,11 @@ export default { const subconverterContent = await subconverterResponse.text(); - return new Response(subconverterContent, { - headers: { 'content-type': 'text/plain; charset=utf-8' }, + return new Response(subconverterContent ,{ + headers: { + "content-type": "text/plain; charset=utf-8", + "Profile-Update-Interval": `${SUBUpdateTime}`, + } }); } catch (error) { return new Response(`Error: ${error.message}`, { @@ -94,8 +77,11 @@ export default { const subconverterContent = await subconverterResponse.text(); - return new Response(subconverterContent, { - headers: { 'content-type': 'text/plain; charset=utf-8' }, + return new Response(subconverterContent ,{ + headers: { + "content-type": "text/plain; charset=utf-8", + "Profile-Update-Interval": `${SUBUpdateTime}`, + } }); } catch (error) { return new Response(`Error: ${error.message}`, { @@ -104,6 +90,27 @@ export default { }); } } else { + let req_data = ""; + req_data += MainData; + + try { + const responses = await Promise.all(urls.map(url => fetch(url,{ + method: 'get', + headers: { + 'Accept': 'text/html,application/xhtml+xml,application/xml;', + 'User-Agent': 'CF-Workers-SUB/cmliu' + } + }))); + + for (const response of responses) { + if (response.ok) { + const content = await response.text(); + req_data += atob(content) + '\n'; + } + } + } catch (error) { + + } //修复中文错误 const utf8Encoder = new TextEncoder(); const encodedData = utf8Encoder.encode(req_data); @@ -115,7 +122,12 @@ export default { //console.log(result); const base64Data = btoa(result); - return new Response(base64Data); + return new Response(base64Data ,{ + headers: { + "content-type": "text/plain; charset=utf-8", + "Profile-Update-Interval": `${SUBUpdateTime}`, + } + }); } } };