作为一个超级丰满的女子,依然阻挡不住自己的自恋,要把照片放到每一个地方。啊,你问为什么?还不是因为自恋嘛!
Moe-Counter Baby版
这个东西其实用了很久了,直到前段时间重建之后才发现这个东西竟然也更新了。并且增加了很多样式,为了拥抱这些样式直接重新构建了一版。原来的版本依赖有点问题,于是顺手给改了以下,提交了一份新的代码:https://gitee.com/obaby/moe-counter
主要问题在于sqllite依赖的问题,修改package.json 改成下面的版本就行了:
"dependencies": {
"better-sqlite3": "^12.6.2",
"compression": "^1.8.0",
"dotenv": "^16.5.0",
"express": "^4.21.2",
"image-size": "^0.8.3",
"mime-types": "^2.1.35",
"mongoose": "^8.15.1",
"pug": "^3.0.3",
"zod": "^3.25.61"
},
重新编译:
# 1. 配置镜像源 pnpm config set registry https://registry.npmmirror.com export npm_config_disturl=https://npmmirror.com/dist export npm_config_node_gyp_mirror=https://npmmirror.com/dist # 2. 删除旧的依赖并重新安装(使用新版本) rm -rf node_modules pnpm-lock.yaml # 3. 重新安装依赖(会自动安装 better-sqlite3@12.6.2) pnpm install # 4. 如果安装后还是找不到 bindings,手动编译 cd node_modules/.pnpm/better-sqlite3@*/node_modules/better-sqlite3 npm run build-release cd ~/Moe-Counter
顺手把里面应用的jsdeliver的链接也给换了,毕竟这个东西在国内访问问题还是蛮多的。
自恋版计数器:
当然啦,为了做这些图也着实废了一番功夫:
最开始是上面的,生成一堆,但是分辨率不高。还有个问题那就是ai不识数,总是会少数字。
后来尝试单个生成,但是ai的数字分辨能力依然跟智障一样。生成了很多乱七八糟的数字:
至于怎么安装主题,那就更简单了,把图片按照0-9整成gif,弄个文件件放到theme下面,重启服务就ok啦。
UserAgent 系统版本号
浏览器的ua在某个时间点之后,操作系统的版本号就固定在了某个特定的值:
windows是Windows NT 10.0
mac是Intel Mac OS X 10_15_7
其实,这个现在已经变成了一个通用的作法,参考:https://bugs.webkit.org/show_bug.cgi?id=216593
这个东西以后大概率也不会更新了,为了让ua显示准确数值,之前修复了win11的识别问题,昨天有点时间,又处理了下osx的识别。但是在mac下目前safari无法获取系统版本信息,暂时没什么解决方案。
主要方法也简单:
1.在提交表单的时候判断操作系统,针对win 和mac 传递一个隐藏字段
////////////////////////////////////////////////////////////////////////////////////////////////
// macOS 主版本号与版本名称映射(15 Sequoia 2024-09-16,26 Tahoe 2025-09-15)
// By:obaby
// 2026-02-04
// https://oba.by
// https://zhongxiaojie.cn
////////////////////////////////////////////////////////////////////////////////////////////////
var macVersionNames = {
10: "macOS 10",
11: "Big Sur",
12: "Monterey",
13: "Ventura",
14: "Sonoma",
15: "Sequoia",
26: "Tahoe"
};
function setOsVersionInput(elementId, value) {
var el = document.getElementById(elementId);
if (el !== null) el.value = value;
}
try {
navigator.userAgentData.getHighEntropyValues(["platformVersion"])
.then(ua => {
var platform = navigator.userAgentData.platform;
if (platform === "Windows") {
var major = parseInt(ua.platformVersion.split('.')[0], 10);
if (major >= 13) {
setOsVersionInput("comment_windows_version", "win11");
console.log("Windows 11 or later");
} else if (major > 0) {
setOsVersionInput("comment_windows_version", "win10");
console.log("Windows 10");
} else {
console.log("Before Windows 10");
}
} else if (platform === "macOS" || platform === "Mac OS") {
var parts = ua.platformVersion.split('.');
var major = parseInt(parts[0], 10);
var minor = parseInt(parts[1] || '0', 10);
var versionLabel = major >= 11 ? (macVersionNames[major] || "macOS " + major) : "macOS 10." + minor;
// setOsVersionInput("comment_mac_version", versionLabel);
setOsVersionInput("comment_windows_version", "Mac OS X " + major + "_" + minor);
console.log("Value: " + "Mac OS X " + major + "_" + minor);
console.log("macOS:", versionLabel, "(" + ua.platformVersion + ")");
// 15 及之后单独标记,便于统计/兼容判断
if (major >= 15) {
setOsVersionInput("comment_mac_15plus", "1");
console.log("macOS 15+ (Sequoia or later):", versionLabel, "(" + ua.platformVersion + ")");
} else {
console.log("macOS:", versionLabel, "(" + ua.platformVersion + ")");
}
} else {
console.log("Not Windows or macOS:", platform);
}
});
} catch (e) {
console.log("OS version detection: Not Supported");
}
2.在wp接受到评论的时候,提前针对ua进行处理,针对传递的特殊的ua进行替换
// 钩子函数,在评论提交前调用
add_filter('pre_comment_user_agent', 'block_specific_user_agent');
function block_specific_user_agent($user_agent) {
// 这里设置你想要阻止的用户代理字符串
// $blocked_ua = 'BadBot/1.0';
// // 如果用户代理匹配,返回一个空字符串来阻止评论
// if (strpos($user_agent, $blocked_ua) !== false) {
// return '';
// }
if (isset($_POST['comment_windows_version']) && $user_agent) {
$raw = trim($_POST['comment_windows_version']);
// 白名单校验,防止 XSS/脏数据:只允许 'win11' 或 "Mac OS X 主_次" 格式
if ($raw === 'win11') {
$user_agent = str_replace('Windows NT 10.0', 'Windows NT 11.0', $user_agent);
} elseif (preg_match('/^Mac OS X\s+(\d+)(?:[_\.](\d+))?$/i', $raw, $m) && strlen($raw) <= 32) {
$major = (int)$m[1];
if ($major > 10) {
$allowed = true;
$user_agent = str_replace('Intel Mac OS X 10_15_7', $raw, $user_agent);
}
}
}
// 否则,返回原始的用户代理字符串
return $user_agent;
}
显示归属地的插件无需任何修改,会自动显示正确的版本。
博客: obaby 𝐢𝐧⃝ void
地址: https://zhongxiaojie.com/
文章: 《来自自恋狂的瞎折腾》















27 comments
昨天就发现了,小图看不清楚,还在想这是什么,点开了才发现是计数器。
嗯嗯,去掉了前面的一堆0,保留了一个,嘎嘎
是不是色彩对比不够强烈?页面右边那里还是不能很容易分辨
主要是让ai写个数字挺难的,弄了无数次选了这几个。
计数器图片换成灵妹妹就更好了
是的啊,不过分辨率低点
要把照片放到没一个地方
===
这里有个错别字。
改啦。有错别字说明大概率就是人工写的。😄
看到你这么爱折腾,我就想到我今晚准备写一个黄金监控的插件,最近一直在盯盘,看的眼疼,网上也有但大都不是我想要的效果,晚上自己手搓一个插件,哈哈哈哈,简单又很实用
想弄啥就弄啥,现在有ai帮忙会省很多事情,虽然ai有时候很智障。
这几天把我之前写的代码给弄没了,我也是服了。
太个性了,哈哈哈
自己搭建的服务,好处就是可以随便折腾
昨天晚上我测试了,Safari 不好搞
safari没有提供相应的方法,现有的方法都是基于ua截图,ua本身就是错的,所以也就没啥意义了。
确实爱美,先得美美的。
我这也属于赛博精神病的一种,
好多好多照片
用的可灵 生成的,不过多数数字多少都有点问题,就挺坑的。
ai对于生成的数字完全没概念,一个4尝试了无数次。
要选一个姐姐服务,才发现全部是灵姐姐
选好了吗
没选好,全都想要
连域名都改了?
恩恩 是的
看花眼了,看花眼了
不选一个吗 😄
真是乱花渐欲迷人眼啊
好看叭🌸