更新审核提示流程与工作台版本

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
LongtailandCopilot committed 2026-10-31 18:13:25 +08:00
1 parent d2f58ba687
commit 24a73b19c0
12 files changed
+296 -268

No files matched your search

+46 -35
View File
@@ -9,41 +9,52 @@
function parameter(href,key,base){try{return new URL(href,base).searchParams.get(key);}catch{return null;}}
function aid(image){return String(image.getAttribute('aid')||image.id||'').match(/(?:attachimg_|aimg_)?(\d+)$/)?.[1]||null;}
function inspect(doc,url,snapshot={}) {
const titleNode=doc.querySelector('#thread_subject');
if(!titleNode) {
const prompt=doc.querySelector('#messagetext, .messagetext');
const text=clean(prompt?.textContent);
if(/^(?:抱歉[,,]\s*)?(?:您填写的)?(?:帖子)?标题.{0,40}(?:超过|超出).{0,40}(?:字符|长度|限制)/.test(text))return {kind:'rejected',error:text};
return {kind:'waiting',prompt:text,candidate:prompt?.querySelector('a[href]')?.href||''};
}
const region=titleNode.closest('td')||titleNode.closest('h1')?.parentElement;
if(!region)return {kind:'incomplete',error:'缺少标题状态区域'};
const ids=new Set([...region.querySelectorAll('a[href]')].filter(a=>parameter(a.href,'mod',url)==='viewthread').map(a=>parameter(a.href,'tid',url)).filter(x=>/^\d+$/.test(x)));
if(ids.size!==1)return {kind:'incomplete',error:'详情页真实主题编号缺失或冲突'};
const thread_id=[...ids][0],body=doc.querySelector('[id^="postmessage_"]');
const pid=body?.id.match(/^postmessage_(\d+)$/)?.[1];
const post=pid&&doc.querySelector('#post_'+pid);
if(!post||clean(post.querySelector('#postnum'+pid)?.textContent)!=='楼主')return {kind:'incomplete',error:'无法确认当前正文属于首帖'};
const authors=post?[...post.querySelectorAll('.plc .pti .authi a[href], .pls .authi a[href]')]:[];
const uids=new Set(authors.map(a=>parameter(a.href,'uid',url)).filter(x=>/^\d+$/.test(x)));
const fids=new Set([...doc.querySelectorAll('#pt a[href], .mumucms_pt a[href]')].filter(a=>parameter(a.href,'mod',url)==='forumdisplay').map(a=>parameter(a.href,'fid',url)).filter(x=>/^\d+$/.test(x)));
if(!body||!pid||uids.size!==1||fids.size!==1)return {kind:'incomplete',error:'首帖作者、正文或版块证据不足'};
const moderation=[...region.querySelectorAll('span.xg1')].some(n=>/\(\s*审核中\s*\)|(\s*审核中\s*)/.test(n.textContent));
// A public-page sample is not available yet. Absence of moderation is not proof of publication.
if(!moderation)return {kind:'incomplete',error:'尚无可验证的公开或审核中状态'};
const allImages=[...body.querySelectorAll('img')];
const images=allImages.filter(img=>aid(img)).map(img=>({aid:aid(img),src:img.getAttribute('src'),loaded:img.complete&&img.naturalWidth>0&&!/\/none\.gif(?:[?#]|$)/.test(img.src||img.getAttribute('src')||''),file:img.getAttribute('file')||img.getAttribute('zoomfile')}));
const expected=(snapshot.images||[]).map(img=>String(img.aid||img.id||'').match(/(?:attachimg_|aimg_)?(\d+)$/)?.[1]).filter(Boolean);
const issues=[];
if(allImages.some(img=>!aid(img)))issues.push('正文存在无法关联附件的图片');
if(expected.length!==(snapshot.images||[]).length)issues.push('提交快照存在无法识别附件编号的图片');
if(JSON.stringify(expected)!==JSON.stringify(images.map(img=>img.aid)))issues.push('首帖正文图片引用或顺序与提交快照不一致');
if(images.some(img=>!img.loaded))issues.push('结果页正文图片尚未加载或加载失败');
if(snapshot.text&&clean(body.innerText||body.textContent)!==clean(snapshot.text))issues.push('结果正文与最终提交快照存在文字差异');
const attachments=post?[...post.querySelectorAll('.pattl img, .attm img')].map(img=>({aid:aid(img),src:img.getAttribute('src')})):[];
if(attachments.length)issues.push('结果页存在附件区图片,请核对正文位置');
return {kind:'accepted',thread_id,first_post_pid:pid,post_url:url,title:clean(titleNode.textContent),author_uid:[...uids][0],fid:Number([...fids][0]),state:'accepted_pending_moderation',
evidence:{adapter:1,thread_id,first_post_pid:pid,title:clean(titleNode.textContent),author_uid:[...uids][0],fid:Number([...fids][0]),moderation:true,images,attachments,integrity_issues:issues}};
const prompt=doc.querySelector('#messagetext, .messagetext');
const text=clean(prompt?.textContent);
const message='新主题需要审核,您的帖子通过审核后才能显示';
if(text.includes(message))return {
kind:'accepted_prompt',state:'accepted_pending_moderation',
evidence:{adapter:'moderation_prompt',message,observed_text:text,observed_url:url}
};
if(/^(?:抱歉[,,]\s*)?(?:您填写的)?(?:帖子)?标题.{0,40}(?:超过|超出).{0,40}(?:字符|长度|限制)/.test(text))return {kind:'rejected',error:text};
return {kind:'waiting',prompt:text};
// 暂停详情页核对:按用户要求注释保留,待恢复时启用。
// const titleNode=doc.querySelector('#thread_subject');
// if(!titleNode) {
// const prompt=doc.querySelector('#messagetext, .messagetext');
// const text=clean(prompt?.textContent);
// if(/^(?:抱歉[,,]\s*)?(?:您填写的)?(?:帖子)?标题.{0,40}(?:超过|超出).{0,40}(?:字符|长度|限制)/.test(text))return {kind:'rejected',error:text};
// return {kind:'waiting',prompt:text,candidate:prompt?.querySelector('a[href]')?.href||''};
// }
// const region=titleNode.closest('td')||titleNode.closest('h1')?.parentElement;
// if(!region)return {kind:'incomplete',error:'缺少标题状态区域'};
// const ids=new Set([...region.querySelectorAll('a[href]')].filter(a=>parameter(a.href,'mod',url)==='viewthread').map(a=>parameter(a.href,'tid',url)).filter(x=>/^\d+$/.test(x)));
// if(ids.size!==1)return {kind:'incomplete',error:'详情页真实主题编号缺失或冲突'};
// const thread_id=[...ids][0],body=doc.querySelector('[id^="postmessage_"]');
// const pid=body?.id.match(/^postmessage_(\d+)$/)?.[1];
// const post=pid&&doc.querySelector('#post_'+pid);
// if(!post||clean(post.querySelector('#postnum'+pid)?.textContent)!=='楼主')return {kind:'incomplete',error:'无法确认当前正文属于首帖'};
// const authors=post?[...post.querySelectorAll('.plc .pti .authi a[href], .pls .authi a[href]')]:[];
// const uids=new Set(authors.map(a=>parameter(a.href,'uid',url)).filter(x=>/^\d+$/.test(x)));
// const fids=new Set([...doc.querySelectorAll('#pt a[href], .mumucms_pt a[href]')].filter(a=>parameter(a.href,'mod',url)==='forumdisplay').map(a=>parameter(a.href,'fid',url)).filter(x=>/^\d+$/.test(x)));
// if(!body||!pid||uids.size!==1||fids.size!==1)return {kind:'incomplete',error:'首帖作者、正文或版块证据不足'};
// const moderation=[...region.querySelectorAll('span.xg1')].some(n=>/\(\s*审核中\s*\)|(\s*审核中\s*)/.test(n.textContent));
// // A public-page sample is not available yet. Absence of moderation is not proof of publication.
// if(!moderation)return {kind:'incomplete',error:'尚无可验证的公开或审核中状态'};
// const allImages=[...body.querySelectorAll('img')];
// const images=allImages.filter(img=>aid(img)).map(img=>({aid:aid(img),src:img.getAttribute('src'),loaded:img.complete&&img.naturalWidth>0&&!/\/none\.gif(?:[?#]|$)/.test(img.src||img.getAttribute('src')||''),file:img.getAttribute('file')||img.getAttribute('zoomfile')}));
// const expected=(snapshot.images||[]).map(img=>String(img.aid||img.id||'').match(/(?:attachimg_|aimg_)?(\d+)$/)?.[1]).filter(Boolean);
// const issues=[];
// if(allImages.some(img=>!aid(img)))issues.push('正文存在无法关联附件的图片');
// if(expected.length!==(snapshot.images||[]).length)issues.push('提交快照存在无法识别附件编号的图片');
// if(JSON.stringify(expected)!==JSON.stringify(images.map(img=>img.aid)))issues.push('首帖正文图片引用或顺序与提交快照不一致');
// if(images.some(img=>!img.loaded))issues.push('结果页正文图片尚未加载或加载失败');
// if(snapshot.text&&clean(body.innerText||body.textContent)!==clean(snapshot.text))issues.push('结果正文与最终提交快照存在文字差异');
// const attachments=post?[...post.querySelectorAll('.pattl img, .attm img')].map(img=>({aid:aid(img),src:img.getAttribute('src')})):[];
// if(attachments.length)issues.push('结果页存在附件区图片,请核对正文位置');
// return {kind:'accepted',thread_id,first_post_pid:pid,post_url:url,title:clean(titleNode.textContent),author_uid:[...uids][0],fid:Number([...fids][0]),state:'accepted_pending_moderation',
// evidence:{adapter:1,thread_id,first_post_pid:pid,title:clean(titleNode.textContent),author_uid:[...uids][0],fid:Number([...fids][0]),moderation:true,images,attachments,integrity_issues:issues}};
}
return {inspect,clean};
});