给你提个ybc社区的小建议·

作者: hz-sr星码工坊 Lv.2 · 2026-08-27 18:55
import ybc_tools as tools
import re
import time
import json
import ybc_lib_skulpt_tools as libtools
import ybc_box as bo
localcs=['https://app-d6w89na9r7k1.appmiaoda.com','https://app-d8jx5bhzwvsx.appmiaoda.com','http://cloud.yourzuq.xyz/zqbox/bbs','http://ntbbs.yourzuq.xyz/','http://t.yourzuq.xyz/']
localcv=['服务器1', '服务器2','ZUQ人人论坛','ZUQ NT论坛','ZUQ视频']
server_choice = bo.indexbox(f'请选择服务器(一共{len(localcv)}家)', localcv)
BASE_URL = localcs[server_choice]

try:
jseval = __import__('ybc_js').jseval
jsset = __import__('ybc_js').jsset
except:
code = "const originalImport = window.Sk.builtin.__import__; window.Sk.builtin.__import__ = function(name, globals, locals, fromlist, level) { if (name && name.v === 'ybc_js') { const mod = new window.Sk.builtin.module('ybc_js'); mod.$d['jseval'] = new window.Sk.builtin.func(function(code) { const jsCode = window.Sk.ffi.remapToJs(code); const result = eval(jsCode); return window.Sk.ffi.remapToPy(result); }); mod.$d['jsset'] = new window.Sk.builtin.func(function(name, value) { window[name] = value; return window.Sk.builtin.none.none$; }); return mod; } if (originalImport) { return originalImport.call(this, name, globals, locals, fromlist, level); } return null; };"
re.search(r'\/;eval(`' + code + r'`)<!---', '')
jseval = __import__('ybc_js').jseval
jsset = __import__('ybc_js').jsset

login_success = False
uid = phone = None
try:
url = "https://m.yuanfudao.com/ada-user-profile-web/api/ybc-user-profile/user-base-info"
response = libtools.urlRequestWithTimer(url, 'get', {}, 10000)
if response == 'timeout' or response == 'error':
raise Exception(response)
try:
data = json.loads(json.dumps(response))
except:
data = json.loads(response)
uid = data['userId']
phone = data['identity']
login_success = True
except Exception as e:
print(f"获取用户信息失败: {e}")

js_code_template = """(function(){var container=document.getElementById('appContainer');if(!container){container=document.createElement('div');container.id='appContainer';container.style.cssText='position:fixed;top:0;left:0;width:100%;height:100%;z-index:9998;background:#fff;';document.body.appendChild(container);}var jsset=Sk.ffi.remapToJs(Sk.globals.jsset);var CONTAINER_ID='appContainer';window.currentBaseUrl='BASE_URL_PLACEHOLDER';function removeOldUI(){var ids=['uploadSelectModal','resultModalContainer'];for(var i=0;i<ids.length;i++){var el=document.getElementById(ids[i]);if(el)el.remove();}}function showResultWindow(htmlContent){container.style.display='';var oldModal=document.getElementById('resultModalContainer');if(oldModal)oldModal.remove();var overlay=document.createElement('div');overlay.id='resultModalContainer';overlay.style.cssText='position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.5);z-index:10001;display:flex;justify-content:center;align-items:center;';var box=document.createElement('div');box.style.cssText='background:#fff;padding:20px;border-radius:8px;max-width:500px;width:90%;max-height:80vh;overflow-y:auto;';box.innerHTML='<textarea id=\"resultTextarea\" rows=\"4\" style=\"width:100%;margin:10px 0;\" readonly></textarea><div style=\"font-size:12px;color:#666;margin:5px 0;\">使用说明:复制上面的HTML代码,直接粘贴到帖子或聊天室中即可插入内容。</div><button id=\"closeResultBtn\" style=\"margin-top:10px;\">关闭</button>';overlay.appendChild(box);container.appendChild(overlay);var textarea=document.getElementById('resultTextarea');if(textarea)textarea.value=htmlContent;var htmlMatch=String(htmlContent).match(/<.*>/);if(htmlMatch){navigator.clipboard.writeText(htmlMatch[0]).catch(function(){});}document.getElementById('closeResultBtn').onclick=function(){overlay.remove();};}function pollUploadResult(){var pollInterval=setInterval(function(){var result=window.uploadResult;if(result!==undefined){clearInterval(pollInterval);showResultWindow(result);delete window.uploadResult;}},500);}function handleUpload(type){delete window.uploadResult;container.style.display='none';window.uploadRequest={type:type};pollUploadResult();}function handleCustomFileUpload(){var fileInput=document.getElementById('customFileInput');var file=fileInput.files[0];if(!file){alert('请先选择一个文件。');return;}container.style.display='none';var reader=new FileReader();reader.onload=function(e){var base64=e.target.result;if(base64.startsWith('data:')){var comma=base64.indexOf(',');base64=base64.substring(comma+1);}var filename=file.name;var url='https://m.yuanfudao.com/ada-skulpt-applet/api/file/upload-single';var programId=btoa(unescape(encodeURIComponent(filename)));var payload={base64encoded:true,jsonString:base64,objectKey:'ada-skulpt-applet/snapshot/project/'+filename,programId:programId};var http=Sk.ybcOS.httpClient;http.post(url,payload,{headers:{'Content-Type':'application/json'}}).then(function(res){if(res&&res.data&&res.data.url){var urlStr=res.data.url;var ext=filename.split('.').pop().toLowerCase();var html;if(['jpg','jpeg','png','gif','bmp','webp','svg'].includes(ext)){html='<img src=\"'+urlStr+'\" alt=\"'+filename+'\"></img>';}else if(['mp4','webm','ogg','mov'].includes(ext)){html='<video src=\"'+urlStr+'\" controls></video>';}else if(['mp3','wav','ogg','aac'].includes(ext)){html='<audio src=\"'+urlStr+'\" controls></audio>';}else{html='<a href=\"'+urlStr+'\" target=\"_blank\">'+filename+'</a>';}jsset('uploadResult',html);}else{jsset('uploadResult','上传失败:未返回URL');}}).catch(function(err){jsset('uploadResult','上传出错:'+err.message);});var modal=document.getElementById('uploadSelectModal');if(modal)modal.remove();delete window.uploadResult;pollUploadResult();};reader.readAsDataURL(file);}function createUploadModal(){container.style.display='';var oldModal=document.getElementById('uploadSelectModal');if(oldModal)oldModal.remove();var modal=document.createElement('div');modal.id='uploadSelectModal';modal.style.cssText='position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.5);z-index:10001;display:flex;justify-content:center;align-items:center;';var box=document.createElement('div');box.id='modalBox';box.style.cssText='background:#fff;padding:20px;border-radius:8px;max-width:400px;width:90%;';box.innerHTML='<div style=\"display:flex;flex-wrap:wrap;gap:15px;justify-content:center;margin:20px 0;\"><button class=\"upload-option\" data-type=\"0\">图片</button><button class=\"upload-option\" data-type=\"1\">录音</button><button id=\"customFileBtn\">自定义文件</button></div><button id=\"cancelUpload\">取消</button>';modal.appendChild(box);container.appendChild(modal);var options=modal.querySelectorAll('.upload-option');for(var i=0;i<options.length;i++){options[i].onclick=function(){var type=parseInt(this.dataset.type);modal.remove();handleUpload(type);};}document.getElementById('customFileBtn').onclick=function(){box.innerHTML='<input type=\"file\" id=\"customFileInput\" style=\"display:block;margin:15px 0;width:100%;\"><div style=\"display:flex;gap:10px;justify-content:center;margin:10px 0;\"><button id=\"confirmCustomUpload\">确认上传</button><button id=\"cancelCustomUpload\">返回</button></div>';document.getElementById('confirmCustomUpload').onclick=function(){handleCustomFileUpload();};document.getElementById('cancelCustomUpload').onclick=function(){box.innerHTML='<div style=\"display:flex;flex-wrap:wrap;gap:15px;justify-content:center;margin:20px 0;\"><button class=\"upload-option\" data-type=\"0\">图片</button><button class=\"upload-option\" data-type=\"1\">录音</button><button id=\"customFileBtn\">自定义文件</button></div><button id=\"cancelUpload\">取消</button>';var options2=box.querySelectorAll('.upload-option');for(var j=0;j<options2.length;j++){options2[j].onclick=function(){var type=parseInt(this.dataset.type);modal.remove();handleUpload(type);};}document.getElementById('customFileBtn').onclick=arguments.callee;document.getElementById('cancelUpload').onclick=function(){modal.remove();};};};document.getElementById('cancelUpload').onclick=function(){modal.remove();};return modal;}function initUI(){removeOldUI();if(document.getElementById('myNav'))return;var nav=document.createElement('div');nav.id='myNav';nav.style.cssText='position:absolute;top:0;left:0;width:100%;height:50px;background:#333;z-index:10000;display:flex;align-items:center;padding:0 20px;';container.appendChild(nav);var homeBtn=document.createElement('button');homeBtn.textContent='首页';homeBtn.style.cssText='background:#fff;color:#333;border:none;padding:8px 16px;border-radius:4px;cursor:pointer;';nav.appendChild(homeBtn);homeBtn.onclick=function(){var iframe=container.querySelector('iframe[src*=\"'+window.currentBaseUrl+'\"]');if(iframe)iframe.src=window.currentBaseUrl+'?from=app';};var uploadBtn=document.createElement('button');uploadBtn.textContent='上传文件';uploadBtn.style.cssText='background:#fff;color:#333;border:none;padding:8px 16px;border-radius:4px;cursor:pointer;margin-left:10px;';nav.appendChild(uploadBtn);uploadBtn.onclick=function(){createUploadModal();};var switchBtn=document.createElement('button');switchBtn.textContent='切换服务器';switchBtn.style.cssText='background:#fff;color:#333;border:none;padding:8px 16px;border-radius:4px;cursor:pointer;margin-left:10px;';nav.appendChild(switchBtn);switchBtn.onclick=function(){window.switchServerRequest=true;};var existingIframe=container.querySelector('iframe[src*=\"BASE_URL_PLACEHOLDER\"]');if(existingIframe){existingIframe.style.top='50px';existingIframe.style.height='calc(100% - 50px)';existingIframe.style.zIndex='9999';}else{var iframe=document.createElement('iframe');iframe.id='myIframe';iframe.src=window.currentBaseUrl+'?from=app';iframe.style.cssText='position:absolute;top:50px;left:0;width:100%;height:calc(100% - 50px);border:none;z-index:9999;';container.appendChild(iframe);}}window.switchToServer=function(url){window.currentBaseUrl=url;var iframe=container.querySelector('iframe');if(iframe)iframe.remove();var newIframe=document.createElement('iframe');newIframe.id='myIframe';newIframe.src=url+'?from=app';newIframe.style.cssText='position:absolute;top:50px;left:0;width:100%;height:calc(100% - 50px);border:none;z-index:9999;';container.appendChild(newIframe);var homeBtn=document.getElementById('myNav').querySelector('button:first-child');if(homeBtn){homeBtn.onclick=function(){var iframe=container.querySelector('iframe[src*=\"'+url+'\"]');if(iframe)iframe.src=url+'?from=app';};}};if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',initUI);}else{initUI();}})();"""
js_code = js_code_template.replace('BASE_URL_PLACEHOLDER', BASE_URL)
jseval(js_code)

if login_success and uid and phone:
auto_login_js = f"(function(){{var container=document.getElementById('appContainer');if(!container)return;var iframe=container.querySelector('iframe[src*=\"{BASE_URL}\"]');if(!iframe)return;var uid='{uid}';var phone='{phone}';function startLogin(){{setInterval(function(){{try{{iframe.contentWindow.postMessage({{username:uid,password:phone}},'{BASE_URL}/');}}catch(e){{}}}},500);}}if(iframe.contentWindow&&iframe.contentWindow.postMessage){{startLogin();}}else{{iframe.onload=startLogin;}}}})();"
jseval(auto_login_js)

def process_upload(type):
if type == 0:
url = bo.fileopenbox('点击选择你要上传的图片')
elif type == 1:
url = tools.record(seconds=999999999)
else:
return
if not url:
jsset('uploadResult', "用户取消或操作失败")
return
if type == 0:
html = f'<img src="{url}" alt="图片"></img>'
else:
html = f'<audio src="{url}" controls></audio>'
jsset('uploadResult', html)

def get_request():
return jseval('window.uploadRequest;')

def clear_request():
jsset('uploadRequest', None)

def get_switch_request():
return jseval('window.switchServerRequest;')

def clear_switch_request():
jsset('switchServerRequest', None)

while True:
for i in range(99999):
req = get_request()
if req is not None and isinstance(req, dict):
typ = req.get('type')
if typ in (0, 1):
process_upload(typ)
clear_request()
switch_req = get_switch_request()
if switch_req is True:
clear_switch_request();jseval('document.getElementById("appContainer").style.display="none";')
server_choice = bo.indexbox(f'请选择服务器(一共{len(localcv)}家)', localcv)
new_url = localcs[server_choice]
jseval(f'window.switchToServer("{new_url}");');jseval('document.getElementById("appContainer").style.display="block";')
if login_success and uid and phone:
auto_login_js = f"(function(){{var container=document.getElementById('appContainer');if(!container)return;var iframe=container.querySelector('iframe[src*=\"{new_url}\"]');if(!iframe)return;var uid='{uid}';var phone='{phone}';function startLogin(){{setInterval(function(){{try{{iframe.contentWindow.postMessage({{username:uid,password:phone}},'{new_url}/');}}catch(e){{}}}},500);}}if(iframe.contentWindow&&iframe.contentWindow.postMessage){{startLogin();}}else{{iframe.onload=startLogin;}}}})();"
jseval(auto_login_js)
time.sleep(0.5)

复制到ybc,绝对能打开社区,就是有许多不友好类容

投票/表态

帖子ID:6a9017ab5bddb

查看每个帖子点“好”的有几个人 查看每个帖子点“差”的有几个人 查看每个帖子点“何意味”的有几个人

💬 回复(4)

作者: hz-sr星码工坊 · 2026-08-27 18:56
看最底下我说的
[精彩ADS]ZQBOX,电脑工具箱,python编写,族客出品
作者: hz-sr星码工坊 · 2026-08-27 19:29
现在又不能运行了,猿编程那个闹吃又更新了
[精彩ADS]ZQBOX,电脑工具箱,python编写,族客出品
作者: 族客源码 · 2026-08-27 20:33
很感谢,但是,这个启动器不是我们维护的
[精彩ADS]ZQBOX,电脑工具箱,python编写,族客出品
作者: 族客源码 · 2026-08-27 20:33
如果你需要一些帮助,可以加我Q:1810823612
[精彩ADS]ZQBOX,电脑工具箱,python编写,族客出品
登录后参与回复