feat(threads): persist autoArchiveAt in thread meta rows

Store scheduled auto-archive timestamps when creating threads with
autoArchiveMinutes so partition heal can archive expired threads (Phase 679).

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Raven Scott
2026-06-02 23:27:19 -04:00
co-authored by Cursor
parent c9078b82a2
commit 27e429e189
+10 -1
View File
@@ -141,6 +141,7 @@ class PearcordGuild extends EventEmitter {
archived: meta.archived === true, archived: meta.archived === true,
createdAt: meta.createdAt || now() createdAt: meta.createdAt || now()
} }
if (meta.autoArchiveAt != null) row.autoArchiveAt = Number(meta.autoArchiveAt) || 0
await this.db.insert(COLLECTIONS.THREAD_META, row) await this.db.insert(COLLECTIONS.THREAD_META, row)
return row return row
} }
@@ -1296,7 +1297,7 @@ class PearcordGuild extends EventEmitter {
return merged return merged
} }
async createThread ({ parentChannelId, rootMessageId, name }) { async createThread ({ parentChannelId, rootMessageId, name, autoArchiveMinutes = 0 }) {
if (!this.guild) throw new Error('no active guild') if (!this.guild) throw new Error('no active guild')
if (!parentChannelId || !rootMessageId) { if (!parentChannelId || !rootMessageId) {
throw new Error('parentChannelId and rootMessageId required') throw new Error('parentChannelId and rootMessageId required')
@@ -1328,6 +1329,14 @@ class PearcordGuild extends EventEmitter {
parentChannelId, parentChannelId,
{ rootMessageId, archived: false } { rootMessageId, archived: false }
) )
if (autoArchiveMinutes > 0 && channel?.id) {
await this._upsertThreadMeta({
guildId: this.guild.id,
channelId: channel.id,
rootMessageId,
autoArchiveAt: Date.now() + autoArchiveMinutes * 60 * 1000
}).catch(() => {})
}
this.emit('channel', channel) this.emit('channel', channel)
return channel return channel
} }