fix(x-bot): 리트윗 이중 저장 방지
같은 리트윗이 타임라인에서 래퍼 id / 원본 id 두 형태로 번갈아 나타나 post_id 중복 체크를 통과해 두 번 저장되던 문제 수정. 리트윗 저장 시 동일 내용 + (원작자 또는 봇계정) username이 이미 있으면 중복으로 간주해 건너뜀. hydration으로 양쪽 모두 전체 내용을 갖추므로 내용 기반 매칭이 안정적으로 동작. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
2cfc580283
commit
4cfa4ffc00
1 changed files with 14 additions and 0 deletions
|
|
@ -61,6 +61,20 @@ async function xBotPlugin(fastify, opts) {
|
|||
return null;
|
||||
}
|
||||
|
||||
// 리트윗 이중 저장 방지: 같은 리트윗이 타임라인에서 래퍼 id / 원본 id 두 형태로
|
||||
// 번갈아 나타나 post_id가 달라도 같은 트윗인 경우가 있음.
|
||||
// hydration으로 양쪽 모두 전체 내용을 갖추므로 동일 내용이면 중복 처리.
|
||||
// username은 형태에 따라 원작자/봇계정으로 불일치할 수 있어 둘 다 매칭.
|
||||
if (tweet.isRetweet && tweet.text) {
|
||||
const [dup] = await fastify.db.query(
|
||||
'SELECT id FROM schedule_x WHERE content = ? AND username IN (?, ?) LIMIT 1',
|
||||
[tweet.text, tweet.originalUsername || username, username]
|
||||
);
|
||||
if (dup.length > 0) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
const date = formatDate(tweet.time);
|
||||
const time = formatTime(tweet.time);
|
||||
const title = extractTitle(tweet.text);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue