Some checks are pending
Auto Deploy NeoBot (FRP + SSH 密码登录) / deploy-to-server (push) Waiting to run
1. 新增daily_wife插件,群里每天随机配对群友 2. 给GroupMemberInfo加了QQ等级和是否机器人的字段 3. 改了群成员API的缓存和字段过滤逻辑 4. 更新了反馈数据和更新日志页面
300 lines
19 KiB
HTML
300 lines
19 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-CN" class="scroll-smooth">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>NEOBOT | Changelog</title>
|
||
<script src="https://cdn.tailwindcss.com"></script>
|
||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||
<link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;500;700&family=Inter:wght@300;400;600&family=Noto+Serif+SC:wght@300;400;700&family=Cormorant+Garamond:ital,wght@0,400;1,400&display=swap" rel="stylesheet">
|
||
<script src="https://code.iconify.design/iconify-icon/1.0.7/iconify-icon.min.js"></script>
|
||
|
||
<script>
|
||
tailwind.config = {
|
||
theme: {
|
||
extend: {
|
||
fontFamily: {
|
||
sans: ['"Inter"', 'sans-serif'],
|
||
display: ['"Space Grotesk"', 'sans-serif'],
|
||
serif: ['"Noto Serif SC"', 'serif'],
|
||
lyric: ['"Cormorant Garamond"', 'serif'],
|
||
},
|
||
colors: {
|
||
brand: {
|
||
bg: '#050505',
|
||
surface: '#121212',
|
||
border: '#27272a',
|
||
text: '#e4e4e7',
|
||
muted: '#a1a1aa',
|
||
}
|
||
},
|
||
animation: {
|
||
'fade-in-up': 'fadeInUp 1s cubic-bezier(0.16, 1, 0.3, 1) forwards',
|
||
'pulse-slow': 'pulse 4s cubic-bezier(0.4, 0, 0.6, 1) infinite',
|
||
},
|
||
keyframes: {
|
||
fadeInUp: {
|
||
'0%': { opacity: '0', transform: 'translateY(20px)' },
|
||
'100%': { opacity: '1', transform: 'translateY(0)' },
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
<style>
|
||
body {
|
||
background-color: #050505;
|
||
color: #e4e4e7;
|
||
background-image: radial-gradient(circle at 50% 0%, #1a1a1a 0%, #050505 60%);
|
||
background-attachment: fixed;
|
||
}
|
||
|
||
.changelog-card {
|
||
background: rgba(18, 18, 18, 0.6);
|
||
backdrop-filter: blur(12px);
|
||
border: 1px solid rgba(255, 255, 255, 0.08);
|
||
border-radius: 8px;
|
||
transition: all 0.3s ease;
|
||
}
|
||
.changelog-card:hover {
|
||
border-color: rgba(255, 255, 255, 0.2);
|
||
background: rgba(30, 30, 30, 0.8);
|
||
transform: translateY(-2px);
|
||
}
|
||
|
||
.lyric-text {
|
||
font-family: "Cormorant Garamond", serif;
|
||
font-style: italic;
|
||
}
|
||
|
||
/* Timeline line */
|
||
.timeline-line {
|
||
position: absolute;
|
||
left: 24px;
|
||
top: 0;
|
||
bottom: 0;
|
||
width: 1px;
|
||
background: linear-gradient(to bottom, rgba(255,255,255,0.1), rgba(255,255,255,0.05));
|
||
}
|
||
|
||
::-webkit-scrollbar { width: 6px; }
|
||
::-webkit-scrollbar-track { background: #050505; }
|
||
::-webkit-scrollbar-thumb { background: #333; border-radius: 3px; }
|
||
</style>
|
||
</head>
|
||
<body class="antialiased selection:bg-white/20 selection:text-white">
|
||
|
||
<!-- 导航 -->
|
||
<nav class="fixed top-0 w-full z-50 border-b border-white/5 bg-black/80 backdrop-blur-md">
|
||
<div class="max-w-6xl mx-auto px-6 h-20 flex items-center justify-between">
|
||
<div class="flex items-center gap-3">
|
||
<a href="../index.html" class="flex items-center gap-3 hover:opacity-80 transition-opacity">
|
||
<div class="w-2 h-2 bg-white rounded-full animate-pulse-slow"></div>
|
||
<span class="font-display font-bold text-sm tracking-widest text-white">NEO<span class="text-white/40 font-light">BOT</span></span>
|
||
</a>
|
||
</div>
|
||
|
||
<div class="flex items-center gap-4 text-[10px] font-mono text-gray-400 uppercase tracking-widest">
|
||
<span class="px-2 py-1 rounded border border-white/10 bg-white/5">Changelog</span>
|
||
<span>Latest: v1.0.2</span>
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
|
||
<main class="pt-40 pb-32 px-6">
|
||
<div class="max-w-4xl mx-auto space-y-16">
|
||
|
||
<!-- Header -->
|
||
<section class="text-center space-y-4 animate-fade-in-up">
|
||
<div class="font-mono text-xs text-gray-500 mb-2">PROJECT HISTORY</div>
|
||
<h1 class="text-4xl md:text-6xl font-display font-bold text-white leading-tight">
|
||
System<br>
|
||
<span class="text-white/30">Evolution</span>
|
||
</h1>
|
||
<p class="font-serif text-lg text-gray-400 max-w-2xl mx-auto">
|
||
记录每一次微小的改变,见证成长的轨迹。
|
||
</p>
|
||
</section>
|
||
|
||
<!-- Changelog Card: v1.0.2 -->
|
||
<section class="max-w-2xl mx-auto">
|
||
<div class="changelog-card p-8 md:p-10 relative overflow-hidden group">
|
||
<div class="absolute top-0 right-0 -mr-16 -mt-16 w-64 h-64 bg-white/5 rounded-full blur-3xl group-hover:bg-white/10 transition-colors duration-500"></div>
|
||
|
||
<div class="relative z-10 flex flex-col md:flex-row md:items-end justify-between gap-4 mb-8 border-b border-white/10 pb-6">
|
||
<div>
|
||
<div class="flex items-center gap-3 mb-2">
|
||
<h2 class="font-display text-4xl text-white font-bold">v1.0.2</h2>
|
||
<span class="px-2 py-0.5 rounded text-[10px] font-mono font-bold bg-white/10 text-white/60 border border-white/10">LATEST</span>
|
||
</div>
|
||
<div class="font-mono text-xs text-gray-500">2026-5-14</div>
|
||
</div>
|
||
|
||
<div class="md:text-right max-w-xs">
|
||
<p class="font-serif text-sm text-gray-400 italic leading-relaxed">
|
||
"扣了一天,写了个反馈插件让大家一起扣。"
|
||
</p>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="relative z-10">
|
||
<ul class="space-y-4">
|
||
|
||
<li class="flex items-start gap-4 group/item">
|
||
<span class="flex-shrink-0 mt-1 px-2 py-1 rounded text-[10px] font-mono font-bold bg-green-500/10 text-green-400 border border-green-500/20 group-hover/item:bg-green-500/20 transition-colors">ADD</span>
|
||
<span class="text-base text-gray-300 leading-relaxed group-hover/item:text-white transition-colors"><span class="font-mono text-xs text-gray-500">plugins/feedback.py</span> 功能反馈插件,/feedback 提交建议,管理员能查看管理</span>
|
||
</li>
|
||
|
||
<li class="flex items-start gap-4 group/item">
|
||
<span class="flex-shrink-0 mt-1 px-2 py-1 rounded text-[10px] font-mono font-bold bg-green-500/10 text-green-400 border border-green-500/20 group-hover/item:bg-green-500/20 transition-colors">ADD</span>
|
||
<span class="text-base text-gray-300 leading-relaxed group-hover/item:text-white transition-colors"><span class="font-mono text-xs text-gray-500">plugins/daily_wife.py</span> /wife 今日老婆,每天和群友随机凑对</span>
|
||
</li>
|
||
|
||
<li class="flex items-start gap-4 group/item">
|
||
<span class="flex-shrink-0 mt-1 px-2 py-1 rounded text-[10px] font-mono font-bold bg-red-500/10 text-red-400 border border-red-500/20 group-hover/item:bg-red-500/20 transition-colors">FIX</span>
|
||
<span class="text-base text-gray-300 leading-relaxed group-hover/item:text-white transition-colors"><span class="font-mono text-xs text-gray-500">config_models.py</span> reverse_ws 没配 default_factory,用户不写 [reverse_ws] 直接启动就炸</span>
|
||
</li>
|
||
|
||
<li class="flex items-start gap-4 group/item">
|
||
<span class="flex-shrink-0 mt-1 px-2 py-1 rounded text-[10px] font-mono font-bold bg-red-500/10 text-red-400 border border-red-500/20 group-hover/item:bg-red-500/20 transition-colors">FIX</span>
|
||
<span class="text-base text-gray-300 leading-relaxed group-hover/item:text-white transition-colors"><span class="font-mono text-xs text-gray-500">input_validator.py</span> validate_sql_input 的 allow_safe_keywords 逻辑顺序反了,SELECT 被当危险拦截</span>
|
||
</li>
|
||
|
||
<li class="flex items-start gap-4 group/item">
|
||
<span class="flex-shrink-0 mt-1 px-2 py-1 rounded text-[10px] font-mono font-bold bg-red-500/10 text-red-400 border border-red-500/20 group-hover/item:bg-red-500/20 transition-colors">FIX</span>
|
||
<span class="text-base text-gray-300 leading-relaxed group-hover/item:text-white transition-colors"><span class="font-mono text-xs text-gray-500">input_validator.py</span> sanitize_html 替 onclick 直接替换成 data- 而不是 data-click=,事件名丢了</span>
|
||
</li>
|
||
|
||
<li class="flex items-start gap-4 group/item">
|
||
<span class="flex-shrink-0 mt-1 px-2 py-1 rounded text-[10px] font-mono font-bold bg-red-500/10 text-red-400 border border-red-500/20 group-hover/item:bg-red-500/20 transition-colors">FIX</span>
|
||
<span class="text-base text-gray-300 leading-relaxed group-hover/item:text-white transition-colors"><span class="font-mono text-xs text-gray-500">thread_manager.py</span> get_client_executor 每次都 new threading.Lock(),线程安全约等于没有</span>
|
||
</li>
|
||
|
||
<li class="flex items-start gap-4 group/item">
|
||
<span class="flex-shrink-0 mt-1 px-2 py-1 rounded text-[10px] font-mono font-bold bg-red-500/10 text-red-400 border border-red-500/20 group-hover/item:bg-red-500/20 transition-colors">FIX</span>
|
||
<span class="text-base text-gray-300 leading-relaxed group-hover/item:text-white transition-colors"><span class="font-mono text-xs text-gray-500">performance.py</span> timeit 用 __qualname__ 记名字,测试里函数名长到匹配不上</span>
|
||
</li>
|
||
|
||
<li class="flex items-start gap-4 group/item">
|
||
<span class="flex-shrink-0 mt-1 px-2 py-1 rounded text-[10px] font-mono font-bold bg-red-500/10 text-red-400 border border-red-500/20 group-hover/item:bg-red-500/20 transition-colors">FIX</span>
|
||
<span class="text-base text-gray-300 leading-relaxed group-hover/item:text-white transition-colors"><span class="font-mono text-xs text-gray-500">furry.py</span> 复制粘贴残留,函数叫 handle_echo、注释写"东方Project",绷不住了</span>
|
||
</li>
|
||
|
||
<li class="flex items-start gap-4 group/item">
|
||
<span class="flex-shrink-0 mt-1 px-2 py-1 rounded text-[10px] font-mono font-bold bg-red-500/10 text-red-400 border border-red-500/20 group-hover/item:bg-red-500/20 transition-colors">FIX</span>
|
||
<span class="text-base text-gray-300 leading-relaxed group-hover/item:text-white transition-colors"><span class="font-mono text-xs text-gray-500">plugins/__init__.py</span> VERIFIED_PLUGINS 里 furry_assistant 不存在,启动刷一片 ImportError</span>
|
||
</li>
|
||
|
||
<li class="flex items-start gap-4 group/item">
|
||
<span class="flex-shrink-0 mt-1 px-2 py-1 rounded text-[10px] font-mono font-bold bg-red-500/10 text-red-400 border border-red-500/20 group-hover/item:bg-red-500/20 transition-colors">FIX</span>
|
||
<span class="text-base text-gray-300 leading-relaxed group-hover/item:text-white transition-colors"><span class="font-mono text-xs text-gray-500">test_ws_pool.py / test_core_managers.py</span> 引用不存在的模块,pytest 收集阶段直接崩</span>
|
||
</li>
|
||
|
||
<li class="flex items-start gap-4 group/item">
|
||
<span class="flex-shrink-0 mt-1 px-2 py-1 rounded text-[10px] font-mono font-bold bg-red-500/10 text-red-400 border border-red-500/20 group-hover/item:bg-red-500/20 transition-colors">FIX</span>
|
||
<span class="text-base text-gray-300 leading-relaxed group-hover/item:text-white transition-colors"><span class="font-mono text-xs text-gray-500">test_ws.py / test_redis_manager.py / test_env_loader.py / ...</span> 测试 mock 路径写错、异步标记缺失、环境变量污染,76 个测试全部挂逼</span>
|
||
</li>
|
||
|
||
<li class="flex items-start gap-4 group/item">
|
||
<span class="flex-shrink-0 mt-1 px-2 py-1 rounded text-[10px] font-mono font-bold bg-green-500/10 text-green-400 border border-green-500/20 group-hover/item:bg-green-500/20 transition-colors">ADD</span>
|
||
<span class="text-base text-gray-300 leading-relaxed group-hover/item:text-white transition-colors">pytest-asyncio 配置,终于能跑异步测试了</span>
|
||
</li>
|
||
|
||
<li class="flex items-start gap-4 group/item">
|
||
<span class="flex-shrink-0 mt-1 px-2 py-1 rounded text-[10px] font-mono font-bold bg-blue-500/10 text-blue-400 border border-blue-500/20 group-hover/item:bg-blue-500/20 transition-colors">UPD</span>
|
||
<span class="text-base text-gray-300 leading-relaxed group-hover/item:text-white transition-colors">测试通过数 129 → 194,失败 76 → 2(剩下俩要 Redis 服务)</span>
|
||
</li>
|
||
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Changelog Card: v1.0.1 -->
|
||
<section class="max-w-2xl mx-auto">
|
||
<div class="changelog-card p-8 md:p-10 relative overflow-hidden group">
|
||
<!-- Decorative background glow -->
|
||
<div class="absolute top-0 right-0 -mr-16 -mt-16 w-64 h-64 bg-white/5 rounded-full blur-3xl group-hover:bg-white/10 transition-colors duration-500"></div>
|
||
|
||
<!-- Version & Date -->
|
||
<div class="relative z-10 flex flex-col md:flex-row md:items-end justify-between gap-4 mb-8 border-b border-white/10 pb-6">
|
||
<div>
|
||
<div class="flex items-center gap-3 mb-2">
|
||
<h2 class="font-display text-4xl text-white font-bold">v1.0.1</h2>
|
||
<span class="px-2 py-0.5 rounded text-[10px] font-mono font-bold bg-white/10 text-white/60 border border-white/10">LATEST</span>
|
||
</div>
|
||
<div class="font-mono text-xs text-gray-500">2026-3-1</div>
|
||
</div>
|
||
|
||
<div class="md:text-right max-w-xs">
|
||
<p class="font-serif text-sm text-gray-400 italic leading-relaxed">
|
||
"后端修正。"
|
||
</p>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<!-- Changes List -->
|
||
<div class="relative z-10">
|
||
<ul class="space-y-4">
|
||
|
||
<li class="flex items-start gap-4 group/item">
|
||
|
||
<span class="flex-shrink-0 mt-1 px-2 py-1 rounded text-[10px] font-mono font-bold bg-green-500/10 text-green-400 border border-green-500/20 group-hover/item:bg-green-500/20 transition-colors">ADD</span>
|
||
|
||
|
||
<span class="text-base text-gray-300 leading-relaxed group-hover/item:text-white transition-colors">天气查询功能美化</span>
|
||
</li>
|
||
|
||
<li class="flex items-start gap-4 group/item">
|
||
|
||
<span class="flex-shrink-0 mt-1 px-2 py-1 rounded text-[10px] font-mono font-bold bg-red-500/10 text-red-400 border border-red-500/20 group-hover/item:bg-red-500/20 transition-colors">FIX</span>
|
||
|
||
|
||
<span class="text-base text-gray-300 leading-relaxed group-hover/item:text-white transition-colors">b站的视频解析已修复,感谢Nemo2011的bilibili-api python库,采用GPL3.0开源</span>
|
||
</li>
|
||
|
||
<li class="flex items-start gap-4 group/item">
|
||
|
||
<span class="flex-shrink-0 mt-1 px-2 py-1 rounded text-[10px] font-mono font-bold bg-green-500/10 text-green-400 border border-green-500/20 group-hover/item:bg-green-500/20 transition-colors">ADD</span>
|
||
|
||
|
||
<span class="text-base text-gray-300 leading-relaxed group-hover/item:text-white transition-colors">python3.14的自由线程测试已开启</span>
|
||
</li>
|
||
|
||
<li class="flex items-start gap-4 group/item">
|
||
|
||
<span class="flex-shrink-0 mt-1 px-2 py-1 rounded text-[10px] font-mono font-bold bg-blue-500/10 text-blue-400 border border-blue-500/20 group-hover/item:bg-blue-500/20 transition-colors">UPD</span>
|
||
|
||
|
||
<span class="text-base text-gray-300 leading-relaxed group-hover/item:text-white transition-colors">镜像图片功能现已可以转换动态表情包</span>
|
||
</li>
|
||
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
</div>
|
||
</main>
|
||
|
||
<footer class="py-12 border-t border-white/5 bg-black/20">
|
||
<div class="max-w-6xl mx-auto px-6 flex flex-col md:flex-row justify-between items-center gap-6">
|
||
<div class="text-center md:text-left">
|
||
<div class="font-display font-bold text-white mb-1">NEOBOT</div>
|
||
<p class="font-mono text-[10px] text-gray-600">
|
||
PRIVATE PERSONAL PROJECT<br>
|
||
GENERATED BY CHANGELOG TOOL
|
||
</p>
|
||
</div>
|
||
<div class="font-mono text-[10px] text-gray-600 text-center md:text-right">
|
||
TO ASTEROID B-612<br>
|
||
SASAKURE.UK
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
|
||
</body>
|
||
</html> |