fix(platform): skip duplicate announcement hub mirrors on re-gossip
Before inserting a remote hub mirror, check announcementHub.isDuplicateMirror for the source messageId and record markMirrored after a successful insert. Prevents duplicate 📡 mirror lines when ANNOUNCEMENT_HUB_POST is received twice. Co-authored-by: Cursor <[email protected]>
This commit is contained in:
@@ -2535,6 +2535,7 @@ class PearcordPlatform extends EventEmitter {
|
|||||||
)
|
)
|
||||||
const out = []
|
const out = []
|
||||||
const savedGuildId = this.guild?.guild?.id
|
const savedGuildId = this.guild?.guild?.id
|
||||||
|
const hubMessageId = payload.messageId || null
|
||||||
for (const sub of subs) {
|
for (const sub of subs) {
|
||||||
try {
|
try {
|
||||||
const channels = await this.db.find(COLLECTIONS.CHANNELS, {
|
const channels = await this.db.find(COLLECTIONS.CHANNELS, {
|
||||||
@@ -2542,6 +2543,16 @@ class PearcordPlatform extends EventEmitter {
|
|||||||
})
|
})
|
||||||
const tch = channels.find((c) => c.id === sub.targetChannelId)
|
const tch = channels.find((c) => c.id === sub.targetChannelId)
|
||||||
if (!tch || tch.type !== 'text') continue
|
if (!tch || tch.type !== 'text') continue
|
||||||
|
if (hubMessageId) {
|
||||||
|
const dup = await this.announcementHub.isDuplicateMirror({
|
||||||
|
subscriberGuildId: sub.subscriberGuildId,
|
||||||
|
targetChannelId: sub.targetChannelId,
|
||||||
|
sourceGuildId: payload.sourceGuildId,
|
||||||
|
sourceChannelId: payload.sourceChannelId,
|
||||||
|
messageId: hubMessageId
|
||||||
|
})
|
||||||
|
if (dup) continue
|
||||||
|
}
|
||||||
if (savedGuildId !== sub.subscriberGuildId) {
|
if (savedGuildId !== sub.subscriberGuildId) {
|
||||||
await this.loadGuild(sub.subscriberGuildId)
|
await this.loadGuild(sub.subscriberGuildId)
|
||||||
}
|
}
|
||||||
@@ -2551,6 +2562,17 @@ class PearcordPlatform extends EventEmitter {
|
|||||||
content: body,
|
content: body,
|
||||||
authorId: payload.authorId || this.identity?.user?.id
|
authorId: payload.authorId || this.identity?.user?.id
|
||||||
})
|
})
|
||||||
|
if (hubMessageId) {
|
||||||
|
await this.announcementHub.markMirrored({
|
||||||
|
subscriberGuildId: sub.subscriberGuildId,
|
||||||
|
targetChannelId: sub.targetChannelId,
|
||||||
|
sourceGuildId: payload.sourceGuildId,
|
||||||
|
sourceChannelId: payload.sourceChannelId,
|
||||||
|
messageId: hubMessageId,
|
||||||
|
localMessageId: row.id,
|
||||||
|
postedAt: payload.postedAt
|
||||||
|
})
|
||||||
|
}
|
||||||
out.push(row)
|
out.push(row)
|
||||||
} catch {
|
} catch {
|
||||||
// skip invalid sub
|
// skip invalid sub
|
||||||
|
|||||||
Reference in New Issue
Block a user