fix(monitor): 强化时间戳过滤 - 两道关卡检查
问题:公告表格包含历史日期(如2026年8月3日),时间戳9:06在今天内
导致过期22小时的历史消息被误认为新消息处理
根因:
1. OCR提取日期正则不匹配中文格式'2026年8月3日'
- 原正则只匹配 YYYY/M/D 或 YYYY-M-D 格式
- 公告使用中文日期格式,导致raw_dates为空
2. has_past_date=False → 跳过日期检查
3. 只检查时间戳9:06(在今天内)→ 放行
修复:
1. 扩展正则支持中文日期格式:\d{4}年\d{1,2}月\d{1,2}日
2. 新增第一道关卡:日期新鲜度检查
- 如果文本包含日期信息,必须至少有一个日期是今天
- 否则直接拒绝,不让进入后续队列
3. 保留第二道关卡:时间戳检查(现有逻辑)
- 时间戳必须在300秒内
效果:
- 公告表格(含历史日期)→ 拒绝 ✅
- 新消息(无日期+新鲜时间戳)→ 放行 ✅
- 用户消息(无日期+无时间戳)→ 交给DB查重 ✅
This commit is contained in:
+25
-3
@@ -5094,11 +5094,12 @@ class MessageMonitor:
|
||||
timestamps.append(f'{_d6[0:2]}:{_d6[2:4]}:{_d6[4:6]}')
|
||||
logger.debug(f"[ocr] 提取到时间戳: {timestamps}")
|
||||
|
||||
# 提取日期信息(如2026/8/2、2026-08-02等),用于判断时间戳是否真的是"未来"
|
||||
# 提取日期信息(如2026/8/2、2026-08-02、2026年8月2日等),用于判断时间戳是否真的是"未来"
|
||||
# OCR常把日期和时间连在一起:2026/8/319:45:20 → 匹配到2026/8/31(未来/非法)
|
||||
# 需要截断到最后一个合法且≤今天的日期
|
||||
raw_dates = re.findall(r'\d{4}[/-]\d{1,2}[/-]\d{1,2}', text)
|
||||
raw_dates = [d.replace('-', '/') for d in raw_dates]
|
||||
# ⭐ 2026-08-15 修复:扩展正则支持中文日期格式(2026年8月3日)
|
||||
raw_dates = re.findall(r'\d{4}[/-]\d{1,2}[/-]\d{1,2}|\d{4}年\d{1,2}月\d{1,2}日', text)
|
||||
raw_dates = [d.replace('-', '/').replace('年', '/').replace('月', '/').replace('日', '') for d in raw_dates]
|
||||
today = datetime.now().date()
|
||||
|
||||
# 改进日期解析:处理OCR把日期和时间连在一起的情况
|
||||
@@ -5146,6 +5147,27 @@ class MessageMonitor:
|
||||
break
|
||||
except (ValueError, IndexError):
|
||||
pass
|
||||
# ⭐ 2026-08-15 新增:日期新鲜度检查(第一道关卡)
|
||||
# 如果文本包含日期信息,必须至少有一个日期是今天,否则拒绝
|
||||
# 修复:公告表格使用"2026年8月3日"格式,原正则不匹配导致无法识别日期
|
||||
has_today_date = False
|
||||
if dates:
|
||||
for date_str in dates:
|
||||
try:
|
||||
parts = date_str.split('/')
|
||||
if len(parts) != 3:
|
||||
continue
|
||||
y, m, d = int(parts[0]), int(parts[1]), int(parts[2])
|
||||
date_obj = datetime(y, m, d).date()
|
||||
if date_obj == today:
|
||||
has_today_date = True
|
||||
logger.debug(f"[ocr] 检测到今日日期: {date_str}")
|
||||
break
|
||||
except (ValueError, IndexError):
|
||||
pass
|
||||
if not has_today_date:
|
||||
logger.debug(f"[ocr] 过滤器1结果: 所有日期都非今日({dates}),丢弃: {text[:80]!r}")
|
||||
return False
|
||||
if not timestamps:
|
||||
# ⭐ 无可见时间戳:检查噪声文本
|
||||
logger.debug(f"[ocr] 无可见时间戳")
|
||||
|
||||
+115
@@ -0,0 +1,115 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<meta name="keywords" content=""/>
|
||||
<meta name="description" content="/assets/admin/images/login/bg.jpg
|
||||
|
||||
# 欢迎来到本店,以下内容是常见问题和相应解决方案
|
||||
|
||||
### 常见问题1:付款后提示未支付
|
||||
- 答: 可能是因为网络波动,服务器没有抓到你的付款记录,请稍等一会儿,如果持续提示未付款,请您按下方提示加入官方群处理<br />
|
||||
|
||||
### 常见问题2: 官方群加入方式
|
||||
- 答: [点击此处加入官方群](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=sd9D2f1ZWVzHzAAlTKMAghY92ZtpYv7X&authKey=EnctCF3XVMdKTRIfYTosqVDUpWR4SPyVNdf9uGJgr4yn8va5jmOb/o20WUF9Q10X&noverify=0&group_code=981954292)
|
||||
|
||||
### 常见问题3: 如何使用本站提供的CDK
|
||||
- 答: 您需要前往**草原探险服务器官方APP**登陆你的账号,然后点击左侧的**CDK兑换**,然后**输入你购买的CDK代码**,点击兑换,即可自动到账
|
||||
|
||||
### 常见问题4: 其它问题
|
||||
- 答: 您可前往[草原探险Wiki](https://wiki.ypshidifu.cn)或加入我们官方群以获得解答"/>
|
||||
<link href="/favicon.ico?v=3.5.6" rel="icon">
|
||||
<title>购物 - 史蒂夫的小店</title>
|
||||
<link rel="stylesheet" href="/assets/common/css/bootstrap.min.css?v=3.5.6" class="cdn-support"><link rel="stylesheet" href="/assets/common/css/_.css?v=3.5.6" class="cdn-support"><link rel="stylesheet" href="/assets/user/css/index.css?v=3.5.6" class="cdn-support">
|
||||
<script src="/assets/common/js/ready.js?v=3.5.6" class="cdn-support"></script>
|
||||
<script>setVar("DEBUG",false);setVar("CAT_ID",0);setVar("HACK_ROUTE_TABLE_COLUMNS","");setVar("HACK_SUBMIT_FORM","");setVar("HACK_SUBMIT_TAB","");setVar("HACK_ROUTE_TABLE_SEARCH","");</script>
|
||||
<!--start::HOOK-->
|
||||
|
||||
|
||||
<!--end::HOOK-->
|
||||
</head>
|
||||
<body style="background-size: cover;background-image: linear-gradient(180deg, rgb(255 255 255 / 0%), rgb(255 255 255 / 71%)), url('https://uapis.cn/api/v1/random/image')">
|
||||
<nav class="navbar navbar-expand-lg navbar-acg">
|
||||
<div class="container">
|
||||
<a class="navbar-brand fw-bold d-flex align-items-center" href="/">
|
||||
<img src="/favicon.ico" alt="ACG Logo" class="brand-logo me-2">
|
||||
<span style="color: #1396558a;">史蒂夫的小店</span>
|
||||
</a>
|
||||
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"
|
||||
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav me-auto mb-lg-0">
|
||||
<li class="nav-item"><a class="nav-link " href="/"><i
|
||||
class="fa-duotone fa-regular fa-cart-shopping nav-icon"></i>购物</a></li>
|
||||
<li class="nav-item"><a class="nav-link "
|
||||
href="/user/index/query"><i
|
||||
class="fa-duotone fa-regular fa-folders nav-icon"></i>订单查询</a></li>
|
||||
</ul>
|
||||
<div class="d-none d-lg-flex search-input" role="search">
|
||||
<div class="input-group">
|
||||
<span class="input-group-text"><i
|
||||
class="fa-duotone fa-regular fa-magnifying-glass nav-icon"></i></span>
|
||||
<input class="form-control item-search-input" type="search" placeholder="搜索商品关键词.."
|
||||
aria-label="Search">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ms-2 user-login-box">
|
||||
<a class="btn btn-outline-secondary btn-sm br-12" href="/user/authentication/login"><i
|
||||
class="fa-duotone fa-regular fa-right-to-bracket nav-icon"></i>登录</a>
|
||||
<a class="btn btn-primary btn-sm br-12" href="/user/authentication/register"><i
|
||||
class="fa-duotone fa-regular fa-user-plus nav-icon"></i>创建账号</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</nav>
|
||||
<div id="pjax-container"><main class="container py-4">
|
||||
<!-- 公告面板 -->
|
||||
<div class="panel">
|
||||
<div class="panel-header">
|
||||
<span class="icon"><i class="fa-duotone fa-regular fa-bullhorn"></i></span>
|
||||
<h6 class="panel-title">公告</h6>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<h1>欢迎来到本店,以下内容是常见问题和相应解决方案</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 购买面板 -->
|
||||
<div class="panel">
|
||||
<div class="panel-header">
|
||||
<span class="icon"><i class="fa-duotone fa-regular fa-cart-shopping"></i></span>
|
||||
<h6 class="panel-title">购买</h6>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="mb-3">
|
||||
<div class="chip-list">
|
||||
<a data-id="1" class="switch-category chip is-primary " href="javascript:void(0);"><span class="chip-icon" style="background: url('/favicon.ico') center/cover no-repeat;"></span>DEMO</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row item-list">
|
||||
<div class="item-message">努力加载中..</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<script>ready("/assets/user/controller/index/index.js?v=3.5.6");</script>
|
||||
</div>
|
||||
|
||||
<script src="/assets/common/js/_.js?v=3.5.6" class="cdn-support"></script><script src="/assets/user/js/_index.js?v=3.5.6" class="cdn-support"></script>
|
||||
<!--start::HOOK-->
|
||||
|
||||
|
||||
<!--end::HOOK-->
|
||||
</body>
|
||||
<!--start::HOOK-->
|
||||
|
||||
|
||||
<!--end::HOOK-->
|
||||
</html>
|
||||
+115
@@ -0,0 +1,115 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<meta name="keywords" content=""/>
|
||||
<meta name="description" content="/assets/admin/images/login/bg.jpg
|
||||
|
||||
# 欢迎来到本店,以下内容是常见问题和相应解决方案
|
||||
|
||||
### 常见问题1:付款后提示未支付
|
||||
- 答: 可能是因为网络波动,服务器没有抓到你的付款记录,请稍等一会儿,如果持续提示未付款,请您按下方提示加入官方群处理<br />
|
||||
|
||||
### 常见问题2: 官方群加入方式
|
||||
- 答: [点击此处加入官方群](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=sd9D2f1ZWVzHzAAlTKMAghY92ZtpYv7X&authKey=EnctCF3XVMdKTRIfYTosqVDUpWR4SPyVNdf9uGJgr4yn8va5jmOb/o20WUF9Q10X&noverify=0&group_code=981954292)
|
||||
|
||||
### 常见问题3: 如何使用本站提供的CDK
|
||||
- 答: 您需要前往**草原探险服务器官方APP**登陆你的账号,然后点击左侧的**CDK兑换**,然后**输入你购买的CDK代码**,点击兑换,即可自动到账
|
||||
|
||||
### 常见问题4: 其它问题
|
||||
- 答: 您可前往[草原探险Wiki](https://wiki.ypshidifu.cn)或加入我们官方群以获得解答"/>
|
||||
<link href="/favicon.ico?v=3.5.6" rel="icon">
|
||||
<title>购物 - 史蒂夫的小店</title>
|
||||
<link rel="stylesheet" href="/assets/common/css/bootstrap.min.css?v=3.5.6" class="cdn-support"><link rel="stylesheet" href="/assets/common/css/_.css?v=3.5.6" class="cdn-support"><link rel="stylesheet" href="/assets/user/css/index.css?v=3.5.6" class="cdn-support">
|
||||
<script src="/assets/common/js/ready.js?v=3.5.6" class="cdn-support"></script>
|
||||
<script>setVar("DEBUG",false);setVar("CAT_ID",0);setVar("HACK_ROUTE_TABLE_COLUMNS","");setVar("HACK_SUBMIT_FORM","");setVar("HACK_SUBMIT_TAB","");setVar("HACK_ROUTE_TABLE_SEARCH","");</script>
|
||||
<!--start::HOOK-->
|
||||
|
||||
|
||||
<!--end::HOOK-->
|
||||
</head>
|
||||
<body style="background-size: cover;background-image: linear-gradient(180deg, rgb(255 255 255 / 0%), rgb(255 255 255 / 71%)), url('https://uapis.cn/api/v1/random/image')">
|
||||
<nav class="navbar navbar-expand-lg navbar-acg">
|
||||
<div class="container">
|
||||
<a class="navbar-brand fw-bold d-flex align-items-center" href="/">
|
||||
<img src="/favicon.ico" alt="ACG Logo" class="brand-logo me-2">
|
||||
<span style="color: #1396558a;">史蒂夫的小店</span>
|
||||
</a>
|
||||
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"
|
||||
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav me-auto mb-lg-0">
|
||||
<li class="nav-item"><a class="nav-link " href="/"><i
|
||||
class="fa-duotone fa-regular fa-cart-shopping nav-icon"></i>购物</a></li>
|
||||
<li class="nav-item"><a class="nav-link "
|
||||
href="/user/index/query"><i
|
||||
class="fa-duotone fa-regular fa-folders nav-icon"></i>订单查询</a></li>
|
||||
</ul>
|
||||
<div class="d-none d-lg-flex search-input" role="search">
|
||||
<div class="input-group">
|
||||
<span class="input-group-text"><i
|
||||
class="fa-duotone fa-regular fa-magnifying-glass nav-icon"></i></span>
|
||||
<input class="form-control item-search-input" type="search" placeholder="搜索商品关键词.."
|
||||
aria-label="Search">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ms-2 user-login-box">
|
||||
<a class="btn btn-outline-secondary btn-sm br-12" href="/user/authentication/login"><i
|
||||
class="fa-duotone fa-regular fa-right-to-bracket nav-icon"></i>登录</a>
|
||||
<a class="btn btn-primary btn-sm br-12" href="/user/authentication/register"><i
|
||||
class="fa-duotone fa-regular fa-user-plus nav-icon"></i>创建账号</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</nav>
|
||||
<div id="pjax-container"><main class="container py-4">
|
||||
<!-- 公告面板 -->
|
||||
<div class="panel">
|
||||
<div class="panel-header">
|
||||
<span class="icon"><i class="fa-duotone fa-regular fa-bullhorn"></i></span>
|
||||
<h6 class="panel-title">公告</h6>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<h1>欢迎来到本店,以下内容是常见问题和相应解决方案</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 购买面板 -->
|
||||
<div class="panel">
|
||||
<div class="panel-header">
|
||||
<span class="icon"><i class="fa-duotone fa-regular fa-cart-shopping"></i></span>
|
||||
<h6 class="panel-title">购买</h6>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="mb-3">
|
||||
<div class="chip-list">
|
||||
<a data-id="1" class="switch-category chip is-primary " href="javascript:void(0);"><span class="chip-icon" style="background: url('/favicon.ico') center/cover no-repeat;"></span>DEMO</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row item-list">
|
||||
<div class="item-message">努力加载中..</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<script>ready("/assets/user/controller/index/index.js?v=3.5.6");</script>
|
||||
</div>
|
||||
|
||||
<script src="/assets/common/js/_.js?v=3.5.6" class="cdn-support"></script><script src="/assets/user/js/_index.js?v=3.5.6" class="cdn-support"></script>
|
||||
<!--start::HOOK-->
|
||||
|
||||
|
||||
<!--end::HOOK-->
|
||||
</body>
|
||||
<!--start::HOOK-->
|
||||
|
||||
|
||||
<!--end::HOOK-->
|
||||
</html>
|
||||
Reference in New Issue
Block a user