修复TBD比赛错误标记为完成的问题
Some checks failed
continuous-integration/drone/push Build is failing

- 修改比分解析逻辑,只匹配破折号而不匹配冒号,避免将时间(19:00)误识别为比分
- 添加额外检查,确保不会将日期格式误识别为比分
- 添加TBD比赛保护机制,确保TBD vs TBD的比赛永远不会被标记为有比分或已完成
- 如果错误解析了TBD比赛的比分,会自动删除

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Ching 2025-09-07 11:57:21 +08:00
parent 6fd21a64b9
commit 81eb9ba403

View File

@ -165,14 +165,16 @@ class Dota2CalendarSync:
# If score not found in structure, try text pattern
if not has_score:
text = parent.get_text()
score_pattern = re.search(r'(\d{1,2})[:|-](\d{1,2})', text)
# Only look for dash pattern (not colon) to avoid matching time
score_pattern = re.search(r'(\d{1,2})-(\d{1,2})', text)
if score_pattern:
score1 = int(score_pattern.group(1))
score2 = int(score_pattern.group(2))
# Validate it's a reasonable game score and not time
# Validate it's a reasonable game score
if 0 <= score1 <= 5 and 0 <= score2 <= 5 and (score1 + score2) > 0:
# Make sure it's not a time pattern (HH:MM)
if not re.search(r'\d{1,2}:\d{2}\s*(?:CEST?|UTC|[AP]M)', text[max(0, score_pattern.start()-10):score_pattern.end()+10]):
# Additional check: make sure this isn't part of a date (e.g., 2025-01-14)
surrounding_text = text[max(0, score_pattern.start()-5):score_pattern.end()+5]
if not re.search(r'\d{4}-\d{1,2}-\d{1,2}', surrounding_text):
has_score = True
match_data['score'] = f"{score1}-{score2}"
score_match = score_pattern
@ -219,43 +221,52 @@ class Dota2CalendarSync:
# Mark if has score and if completed
if has_score:
# Score already set above, extract score values
score_parts = re.match(r'(\d+)-(\d+)', match_data['score'])
if score_parts:
score1 = int(score_parts.group(1))
score2 = int(score_parts.group(2))
# TBD vs TBD matches should NEVER be marked as having a score or completed
if match_data.get('team1') == 'TBD' and match_data.get('team2') == 'TBD':
has_score = False
match_data['completed'] = False
match_data['has_score'] = False
# Remove any incorrectly parsed score
if 'score' in match_data:
del match_data['score']
else:
score1 = score2 = 0
# Score already set above, extract score values
score_parts = re.match(r'(\d+)-(\d+)', match_data['score'])
if score_parts:
score1 = int(score_parts.group(1))
score2 = int(score_parts.group(2))
else:
score1 = score2 = 0
# Check if series is actually completed based on format
series_completed = False
if 'format' in match_data:
if 'Bo3' in match_data['format']:
# Bo3 is complete when someone reaches 2 wins
# Check if series is actually completed based on format
series_completed = False
if 'format' in match_data:
if 'Bo3' in match_data['format']:
# Bo3 is complete when someone reaches 2 wins
series_completed = (score1 >= 2 or score2 >= 2)
elif 'Bo5' in match_data['format']:
# Bo5 is complete when someone reaches 3 wins
series_completed = (score1 >= 3 or score2 >= 3)
elif 'Bo1' in match_data['format']:
# Bo1 is complete when there's any score
series_completed = True
else:
# Unknown format, assume completed if there's a score
series_completed = True
else:
# No format info, try to guess from score
# If someone has 2+ wins, likely a completed Bo3/Bo5
series_completed = (score1 >= 2 or score2 >= 2)
elif 'Bo5' in match_data['format']:
# Bo5 is complete when someone reaches 3 wins
series_completed = (score1 >= 3 or score2 >= 3)
elif 'Bo1' in match_data['format']:
# Bo1 is complete when there's any score
series_completed = True
else:
# Unknown format, assume completed if there's a score
series_completed = True
else:
# No format info, try to guess from score
# If someone has 2+ wins, likely a completed Bo3/Bo5
series_completed = (score1 >= 2 or score2 >= 2)
match_data['completed'] = series_completed
match_data['has_score'] = True # Mark that there's a score even if not completed
match_data['completed'] = series_completed
match_data['has_score'] = True # Mark that there's a score even if not completed
# Determine winner only if completed
if series_completed:
if score1 > score2:
match_data['winner'] = match_data.get('team1', 'Unknown')
else:
match_data['winner'] = match_data.get('team2', 'Unknown')
# Determine winner only if completed
if series_completed:
if score1 > score2:
match_data['winner'] = match_data.get('team1', 'Unknown')
else:
match_data['winner'] = match_data.get('team2', 'Unknown')
else:
match_data['completed'] = False
match_data['has_score'] = False