Discourse 新标签页
Discourse 论坛体验优化脚本,可在新标签页打开主题帖、用户主页、附件、弹窗、侧边栏等页面,也可选择后台打开,并提供悬浮球快速切换,脚本会自动识别 Discourse 站点,支持域名黑白名单,每条规则都可独立启用或禁用,安装前后浏览速度无感知差异,完全免费。
Discourse 论坛系统应用还是比较广泛的,包括 OpenAI、Mozilla、Docker、Red Hat、Linux.do、小众软件等社区都在使用,有需要的可以尝试一下。
https://greasyfork.org/zh-CN/scripts/552284
频道 @WidgetChannel
123网盘文件解析
如题,输入 123 云盘文件分享链接,即可解析出直链进行下载,支持输入提取码,点击"解析链接"即可,支持浏览文件列表,点击文件名可直接下载,文件夹可以点击展开/折叠,查看内部文件,支持递归解析文件夹内的所有文件,免费使用,无需注册。
123云盘非会员用户超过 1 G下载大小后会限制下载,可以收藏备用一下,适合轻度用户使用,至于能用多久就不知道了。
https://www.kanxizai.cn/123pan/
频道 @WidgetChannel
Vector Shelf
一个日本的插画素材网站,内容不是特别多,但质量非常不错,并且所有插画都是免费可商用的,从事设计工作的可以收藏一下,无需注册,即可直接下载,且提供 Ai/PNG/SVG 三种格式。
https://vectorshelf.com
频道 @WidgetChannel
Handhelds Space
掌机规格数据库与对比平台,包括便携游戏机、PC 手持机、复古掌机等数百款设备,并提供品牌、发布日期、重量、操作系统、屏幕尺寸、分辨率、处理器、内存、电池等详尽规格,可通过品牌、重量、屏幕比例、操作系统等条件进行筛选搜索,想要比较不同掌机参数或者了解新机发布信息的都可以看看,完全免费,无需注册。
https://handhelds.space
频道 @WidgetChannel
Kener 是一个使用 SvelteKit 和 NodeJS 构建的简洁轻量级状态页系统
https://github.com/rajnandan1/kener
https://github.com/rajnandan1/kener
Mastodon instances
Mastodon 实例搜索服务,可根据语言、用户量、管理模式等维度筛选出合适的 Mastodon 服务器,并可查看各实例的注册人数、活跃度、安全评级与连通情况,玩长毛象社区的可以体验一下,免费使用,无需注册。
https://instances.social
频道 @WidgetChannel
// 在 B 站打开任意 page(已登录),在控制台粘贴运行
const uids = [1042653845,
1055149070,
1075400468,
1148923121,
1152997930,
1188004959,
1208114979,
1227735707,
1252039983,
1257852431,
1302669433,
1356882480,
1430439192,
1627242161,
1642531925,
1655279349,
1720634591,
1743345026,
1798118517,
1806922031,
1817661914,
1826766269,
1859459400,
1919627194,
1926952280,
1956866386,
1957313739,
1987938455,
1992873935,
2024349971,
2067273601,
2072500476,
2101682498,
2103756604,
2115931056,
2118239887,
2126699792];
// 从 document.cookie 里尝试提取 csrf token bili_jct
function getCookie(name) {
const m = document.cookie.match(new RegExp('(^|; )' + name + '=([^;]*)'));
return m ? decodeURIComponent(m[2]) : '';
}
const bili_jct = getCookie('bili_jct');
if(!bili_jct) {
console.error('无法找到 bili_jct,请确保已登录并且 cookie 可用');
}
async function blockUid(uid) {
const url = 'https://api.bilibili.com/x/relation/modify?statistics=%7B%22appId%22:100,%22platform%22:5%7D';
const body = new URLSearchParams({
fid: String(uid),
act: '5',
re_src: '11',
gaia_source: 'web_main',
extend_content: JSON.stringify({ entity: 'user', entity_id: String(uid) }),
csrf: bili_jct
});
const resp = await fetch(url, {
method: 'POST',
headers: {
'content-type': 'application/x-www-form-urlencoded',
'origin': 'https://space.bilibili.com',
'referer': `https://space.bilibili.com/${uid}/dynamic`,
},
body: body.toString(),
credentials: 'include'
});
const j = await resp.json().catch(()=>null);
return { uid, status: resp.status, body: j ?? null };
}
(async () => {
for (const uid of uids) {
// 可选延时: await new Promise(r=>setTimeout(r, 300));
const r = await blockUid(uid);
console.log(r);
}
console.log('finished');
})();