一楼送给戒除网瘾的表哥 @戒除逼瘾
论坛默认会跟踪你浏览过的话题并关注你回复过的话题,时间一长你的账户可能会关注、跟踪几千个话题;有些痰友可能和我一样改了设置,然后想要批量去除对话题的跟踪和关注,但我暂时没有找到discourse的相关功能,于是我写了个小脚本批处理这个请求:
/* 四条款BSD许可证
* 版权所有 (c) 2025 美卡论坛-哈耶克 保留所有权利
* 只要满足以下条件,则允许再分发及使用源代码形式和二进制形式,无论其是否修改:
* 重新分发源代码时,必须保留上述版权声明、本条件列表及下述免责声明。
* 重新分发二进制形式时,必须在分发时随附的文档和/或其他材料中复制上述版权声明、本条件列表及下述免责声明。
* 所有提及本软件功能或是本软件使用的宣传材料必须包含以下文字:“本产品内含有由美卡论坛坛友及其他贡献者开发的软件。”
* 未经明确的事先书面许可,不得使用版权持有人名称或贡献者名称背书或推广本软件的衍生产品。
*
* 本软件由版权持有人和贡献者“按原样”提供并排除任何明示或默示保证,包括但不限于对适销性及特定用途适用性的默示保证。
* 在任何情况下,版权持有人或贡献者不对因使用本软件而产生的任何直接的、间接的、附带的、特定的、惩罚性的或继发性的损失
* (包括但不限于因采购替代性商品或服务而造成;因无法使用、数据灭失或利润损失而造成;或因业务中断而造成)承担责任,
* 不论因何种原因导致或基于何种责任理论,不论是来自于合同、严格责任或侵权(包括过失或其他),即使曾被告知存在该等损失的可能性。
*/
(async (pp) => {
for (const e of pp) {
const p = e.id;
try {
(await fetch(`https://www.uscardforum.com/t/${p}/notifications`, {
credentials: "include",
headers: headers,
referrer: `https://www.uscardforum.com/t/${p}`,
body: "notification_level=1",
method: "POST",
mode: "cors",
})).ok ? console.log(`${p}`) : console.error(`${r.status} - ${r.statusText} ${p}`);
} catch (err) {
console.error(`${err} ${p}`);
}
await new Promise(r => setTimeout(r, 500));
}
})(await (async () => (await Promise.all(["watching", "tracking"].map(async s => {
const pp = []; let i = 0;
for (;; ++i) {
const r = await fetch(`https://www.uscardforum.com/latest.json?no_definitions=true&page=${i}&state=${s}`, {
"credentials": "include",
"headers": headers,
"referrer": "https://www.uscardforum.com/latest",
"method": "GET",
"mode": "cors"
});
const b = await r.json();
if (b?.topic_list?.topics?.length === 0) break;
pp.push(...b.topic_list.topics);
}
return pp;
}))).flat()
)());
用法:先监视一次对论坛的任意请求,把请求头复制出来赋值给全局变量const header
,然后运行这段代码
如果你觉得这脚本写得可读性等于0,一坨屎,那:
如果你觉得你的论坛不好,你就去谩骂它;如果你觉得脚本可读性不好,你就回帖提出PR让可读性变得更差;如果你觉得坛友素质太高,就从你开始做一个更低素质的坛友
编辑记录1: 降低了箭头函数的可读性
1 个赞